Dom-Processing с Perl-Mechanize: завершение небольшой программы - PullRequest
0 голосов
/ 20 мая 2011

В настоящее время я работаю над небольшим комбайном, используя этот набор данных из 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-пути.

Ответы [ 2 ]

2 голосов
/ 20 мая 2011

Используйте инструменты Firebug, Opera Dragonfly, Chromium Developer.

Firebug screenshot

Вызвать контекстное меню для указанного элемента, чтобы скопировать выражение XPath или селектор CSS (полезно для Web :: Query ) в буфер обмена.

1 голос
/ 20 мая 2011

На самом деле вы хотите использовать Web :: Scraper для такого рода вещей.

...