こんばんは、親愛なるコミュニティ!
Webスパイダー/クローラーのように、複数のWebページを処理したい。私はいくつかのビットを持っています-しかし今、私はいくつかの改良されたスパイダーロジックを持っている必要があります。target-urlhttp: //192.68.214.70/km/asps/schulsuche.asp?q =e&a=50を参照してください
アップデート:
2つの素晴らしいコメントのおかげで私はたくさん得ました。これで、コードは非常にうまく実行されます。最後の質問:データをファイルに保存する方法...パーサーに結果をファイルに書き込むように強制する方法。これは、コマンドラインで6000を超えるレコードを取得するよりもはるかに便利です...そして、出力がファイルで行われる場合は、最終的なクリーンアップを行う必要があります。出力を参照してください。すべての出力をターゲットURLと比較する場合-次に、これにはクリーンアップが必要であることを確認してください。どう思いますか?!もう一度target-urlhttp: //192.68.214.70/km/asps/schulsuche.asp?q =e&a=50を参照してください
6114,7754,"Volksschule Zeil a.Mai",/Sa,"d a.Mai",(Gru,"09524/94992 09524/94997",,Volksschulen,
6115,7757,"Mittelschule Zeil - Sa","d a.Mai",Schulri,"g
97475 Zeil","09524/94995
09524/94997",,Volksschulen," www.hauptschule-zeil-sand.de"
6116,3890,"Volksschule Zeilar",(Gru,"dschule)
Bgm.-Stallbauer-Str. 8
84367 Zeilar",,"08572/439
08572/920001",,Volksschulen," www.gs-zeilarn.de"
6117,4664,"Volksschule Zeitlar",(Gru,"dschule)
Schulstra�e 5
93197 Zeitlar",,"0941/63528
0941/68945",,Volksschulen," www.vs-zeitlarn.de"
6118,4818,"Mittelschule Zeitlar","Schulstra�e 5
93197 Zeitlar",,,"0941/63528
0941/68945",,Volksschulen," www.vs-zeitlarn.de"
6119,7684,"Volksschule Zeitlofs (Gru","dschule)
Raiffeise","Str. 36
97799 Zeitlofs",,"09746/347
09746/347",,Volksschulen," grundschule-zeitlofs.de"
ありとあらゆる情報のためのthx!零!
ここに古い質問があります:ワンショット関数の一部としてうまく機能しているようです。しかし、ループの一部として関数を含めるとすぐに、何も返されません...どうしたのですか?
最初から始めましょう:ターゲットを参照してくださいhttp://192.68.214.70/km/asps/schulsuche.asp?q=e&a=50 このページには6000以上の結果があります!どうすればすべての結果を得ることができますか?私はモジュールLWP::simpleを使用しており、すべての6150レコードを取得するために使用できるいくつかの改善された引数が必要です...私は非常に協力的なメンバーtadmicから盗むコードを持っています(このフォーラムを参照)-そしてそれは基本的に非常にうまく動作します。しかし、いくつかの行を追加した後-(現時点では)いくつかのエラーを吐き出します。
試行:最初の5ページのURLは次のとおりです。
http://192.68.214.70/km/asps/schulsuche.asp?q=e&a=50&s=0
http://192.68.214.70/km/asps/schulsuche.asp?q=e&a=50&s=50
http://192.68.214.70/km/asps/schulsuche.asp?q=e&a=50&s=100
http://192.68.214.70/km/asps/schulsuche.asp?q=e&a=50&s=150
http://192.68.214.70/km/asps/schulsuche.asp?q=e&a=50&s=200
URLの「s」属性はページ1では0から始まり、その後はページごとに50ずつ増加することがわかります。この情報を使用して、ループを作成できます。
#!/usr/bin/perl
use warnings;
use strict;
use LWP::Simple;
use HTML::TableExtract;
use Text::CSV;
my @cols = qw(
rownum
number
name
phone
type
website
);
my @fields = qw(
rownum
number
name
street
postal
town
phone
fax
type
website
);
my $i_first = "0";
my $i_last = "6100";
my $i_interval = "50";
for (my $i = $i_first; $i <= $i_last; $i += $i_interval) {
my $html = get("http://192.68.214.70/km/asps/schulsuche.asp?q=e&a=50&s=$i");
$html =~ tr/r//d; # strip the carriage returns
$html =~ s/ / /g; # expand the spaces
my $te = new HTML::TableExtract();
$te->parse($html);
my $csv = Text::CSV->new({ binary => 1 });
foreach my $ts ($te->table_states) {
foreach my $row ($ts->rows) {
#trim leading/trailing whitespace from base fields
s/^s+//, s/\s+$// for @$row;
#load the fields into the hash using a "hash slice"
my %h;
@h{@cols} = @$row;
#derive some fields from base fields, again using a hash slice
@h{qw/name street postal town/} = split /n+/, $h{name};
@h{qw/phone fax/} = split /n+/, $h{phone};
#trim leading/trailing whitespace from derived fields
s/^s+//, s/\s+$// for @h{qw/name street postal town/};
$csv->combine(@h{@fields});
print $csv->string, "\n";
}
}
}
コードをテストしたところ、次の結果が得られました。
ところで:ここでは57行目と58行目: ...コマンドラインはihaveエラーがここにあることを示しています..:
#trim leading/trailing whitespace from derived fields
s/^s+//, s/\s+$// for @h{qw/name street postal town/};
どう思いますか?バックスラッシュが欠落していますか?結果が正しくなるようにコードを修正してテスト実行する方法!?
ゼロからのご連絡をお待ちしております
私が得るエラーを見てください:
Ot",,,Telefo,Fax,Schulat,Webseite Use of uninitialized value $_ in substitution (s///) at bavaria_all_guru.pl line 58. Use of uninitialized value $_ in substitution (s///) at bavaria_all_guru.pl line 58. Use of uninitialized value $_ in substitution (s///) at bavaria_all_guru.pl line 58. Use of uninitialized value $_ in substitution (s///) at bavaria_all_guru.pl line 58. "lfd. N.",Schul-numme,Schul,"ame
Sta�e
PLZ
Ot",,,Telefo,Fax,Schulat,Webseite
Use of uninitialized value $_ in substitution (s///) at bavaria_all_guru.pl line 58.
Use of uninitialized value $_ in substitution (s///) at bavaria_all_guru.pl line 58.
Use of uninitialized value $_ in substitution (s///) at bavaria_all_guru.pl line 58.
Use of uninitialized value $_ in substitution (s///) at bavaria_all_guru.pl line 58.
"lfd. N.",Schul-numme,Schul,"ame
Sta�e
PLZ
Ot",,,Telefo,Fax,Schulat,Webseite
Use of uninitialized value $_ in substitution (s///) at bavaria_all_guru.pl line 58.
Use of uninitialized value $_ in substitution (s///) at bavaria_all_guru.pl line 58.
Use of uninitialized value $_ in substitution (s///) at bavaria_all_guru.pl line 58.
Use of uninitialized value $_ in substitution (s///) at bavaria_all_guru.pl line 58.
"lfd. N.",Schul-numme,Schul,"ame