Как обработать простой цикл в Perl WWW::Mechanize?

Особенно интересным для меня, как для начинающего PHP/Perl, является этот сайт в Швейцарии: http://www.edi.admin.ch/esv/00475/00698/index.html?lang=de&webgrab_path=http://esv2000.edi.admin.ch/d/entry.asp?Id=1308 Который имеет набор данных из 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 сообщает механизму, за каким из результатов он должен следовать дальше.

Если у нас есть несколько страниц результатов, мы также будем использовать тот же прием для обхода страниц результатов. Для семантического извлечения информации о записи мы могли бы проанализировать содержимое фактических записей с помощью HTML-парсера XML:LibXML (который отлично работает на этой странице), потому что он дает вам мощный выбор DOM (используя XPath) методы. Ну, фактический цикл по страницам должен быть выполним в несколько строк Perl макс. 20 строк - скорее всего меньше.

Но подождите: тогда обработка входных страниц будет самой сложной частью скрипта.

Подходы. В принципе, мы могли бы реализовать тот же алгоритм с одним циклом while, если бы умело использовали функцию back().

Не могли бы вы подсказать для начала - обработка входных страниц - это делается в Perl::Mechanize


person zero    schedule 18.05.2011    source источник


Ответы (1)


«У которого есть набор данных из 2700 фондов. Все данные можно использовать бесплатно без каких-либо ограничений авторских прав на них».

Не правда. См. http://perlmonks.org/?node_id=905767.

«Данные защищены авторским правом, несмотря на то, что они доступны бесплатно: «Скачивание или копирование текстов, иллюстраций, фотографий или любых других данных не влечет за собой передачу прав на контент» (и опять же, по-немецки, как вы раньше очищал некоторые другие немецкие списки для спама)».

person Raoul    schedule 20.05.2011