В настоящее время я работаю над небольшим комбайном, используя этот набор данных из 2700 основ .Все данные могут свободно использоваться без каких-либо ограничений или авторских прав.
Что у меня есть на данный момент: Задача сбора урожая не должна быть проблемой, если я возьму WWW :: Mechanize - особенно для выполненияпоиск на основе формы и выбор отдельных записей.Хм - я думаю, что алгоритм будет в основном двумя вложенными циклами: внешний цикл выполняет поиск на основе форм, внутренний цикл обрабатывает результаты поиска.
Внешний цикл будет использовать select()
и submit_form()
функционирует во второй поисковой форме на странице.Можем ли мы использовать обработку DOM здесь?Хорошо - как мы можем получить значения выбора.
Внутренний цикл по результатам будет использовать функцию следующей ссылки, чтобы добраться до фактических записей, используя следующий вызов.
$mech->follow_link(url_regex => qr/webgrab_path=http:\/\/evs2000.*\?
Id=\d+$/, n => $result_nbr);
Это перенаправит наш механический браузер на страницу входа.В основном, URL-запрос ищет ссылки, имеющие шаблон webgrap_path to Id, который уникален для каждой записи базы данных.Переменная $result_nbr
сообщает mecha, какому из результатов следует следовать.
Если бы у нас было несколько страниц результатов, мы бы также использовали тот же трюк для перемещения по страницам результатов.Для семантического извлечения информации о входе мы могли бы проанализировать содержимое фактических записей с помощью XML: hxml-анализатор LibXML (который прекрасно работает на этой странице), потому что он дает вам мощный выбор DOM (с использованием XPath) методы.Ну, фактический цикл по страницам должен быть выполним в несколько строк Perl (максимум 20 строк - вероятно, меньше).
Но подождите : обработка страниц ввода будет тогдасамая сложная часть сценария.
Подходы : В принципе, мы могли бы сделать тот же алгоритм с одним циклом while, если бы мы умно использовали функцию back ().
Можете ли вы дать мне подсказку для начала - обработку страниц ввода - делая это в Perl :: Mechanize?
Вот что у меня есть:
GetThePage(
starting url
);
sub GetThePage {
my $mech ...
my @pages = ...
while(@pages) {
my $page = shift @pages;
$mech->get( $page );
push @pages, GetMorePages( $mech );
SomethingImportant( $mech );
SomethingXPATH( $mech );
}
}
Вопрос в том, как найти DOM-пути.