Добрый вечер, уважаемое сообщество!
Я хочу обрабатывать несколько веб-страниц, вроде веб-паука / сканера.У меня есть несколько битов - но теперь мне нужно немного улучшить логику паука.См. Целевой URL http://192.68.214.70/km/asps/schulsuche.asp?q=e&a=50
Обновление:
благодаря двум замечательным комментариям, которые я получил много.Теперь код работает очень хорошо.Последний вопрос: как сохранить данные в файл ... Как заставить синтаксический анализатор записать результаты в файл.Это гораздо удобнее, чем получать более 6000 записей в командной строке ... И если выходные данные делаются в файле, мне нужно выполнить окончательную очистку: см. Выходные данные: если мы сравним все выходные данные с целевым url -тогда уверен, что это нуждается в некоторой очистке, что ты думаешь ?!Снова посмотрите целевой URL http://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 для любой информации!нуль!
Здесь старый вопрос: Кажется, работает нормально как часть функции 1-выстрел.Но как только я включаю функцию как часть цикла, она ничего не возвращает ... В чем дело?
Для начала: смотри цель 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
Мы можем видеть, что "s"атрибут в URL-адресе начинается с 0 для страницы 1, а затем увеличивается на 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: ... командная строка говорит, что у меня есть ошибки здесь ..:
#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