Perl::Mechanize: запуск простого поискового робота с циклом [несколько запросов]

в настоящее время отрабатывается способ анализа данных страницы: http://www.foundationfinder.ch/

я люблю делать это на Perl: Ну, я просто размышляю, как лучше всего выполнить эту работу. Угадайте, что я перед хорошей кривой обучения. ;) Это задание даст мне несколько хороших уроков Perl. На данный момент это выходит за рамки моей головы... ;-)

Итак, вот пример страницы:

см. страницу результатов

... и, как я думал, я могу найти все 790 страниц результатов в определенном диапазоне между Id = 0 и Id = 100000, я подумал, что могу пойти по пути с циклом:

http://www.foundationfinder.ch/ShowDetails.php?Id=11233&InterfaceLanguage=&Type=Html http://www.foundationfinder.ch/ShowDetails.php?Id=927&InterfaceLanguage=1&Type=Html http://www.foundationfinder.ch/ShowDetails.php?Id=949&InterfaceLanguage=1&Type=Html http://www.foundationfinder.ch/ShowDetails.php?Id=20011&InterfaceLanguage=1&Type=Html http://www.foundationfinder.ch/ShowDetails.php?Id=10579&InterfaceLanguage=1&Type=Html

я думал, что могу пойти по пути Perl, но я не очень уверен: я пытался использовать LWP::UserAgent для тех же URL-адресов [см. ниже] с разными аргументами запроса, и мне интересно, предоставляет ли LWP::UserAgent как нам перебирать аргументы запроса? Я не уверен, что у LWP::UserAgent есть способ сделать это. Ну, я иногда слышал, что проще использовать Mechanize. Но неужели проще!?

КСТАТИ; Но если я иду по пути PHP, я мог бы сделать это с Curl - не так ли!?

Вот мой подход: я пытался понять это. И я копнул глубже в Manpages и Howtos. У нас может быть цикл создания URL-адресов и многократное использование Curl.

Как отмечалось выше: здесь у нас есть несколько страниц результатов;

http://www.foundationfinder.ch/ShowDetails.php?Id=11233&InterfaceLanguage=&Type=Html http://www.foundationfinder.ch/ShowDetails.php?Id=927&InterfaceLanguage=1&Type=Html

В качестве альтернативы мы можем добавить обработчик request_prepare, который вычисляет и добавляет аргументы запроса перед отправкой запроса.

Опять же: цель: я хочу проанализировать данные, а затем сохранить их в локальной базе данных MySQL.

я должен определить extern_uid !?

и иди так:

for my $i (0..10000) {
  $ua->get('http://www.foundationfinder.ch/ShowDetails.php?Id=', id => 21, extern_uid => $i);
  # process reply
}

Ну, но теперь я застрял - мне нужна помощь - я могу сделать эту работу так !?

С уважением

нуль


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


Ответы (1)


Не делай так. Используйте живые заголовки HTTP (плагин Firefox) или эквивалент. чтобы увидеть, что javasript делает за кулисами, пока вы выбираете то, что вам нужно здесь, чтобы перейти на эту страницу (с Таблица).

Чтобы получить данные из таблицы, используйте HTML::TableExtract или HTML::TreeBuilder::XPath, если вы хотите использовать XPath

Если вы хотите перебирать запросы, просто создайте еще одну переменную:

my $a = 'http://www.foundationfinder.ch/ShowDetails.php?Id=' . $q . '&InterfaceLanguage=&Type=Html';

и увеличивайте $q по мере продвижения, убедитесь, что страница действительна, прежде чем пытаться загрузить ее с помощью get

person snoofkin    schedule 15.05.2011
comment
Привет, SoulSurfer, большое спасибо, приятно слышать от тебя! Я никогда не работал с liveHeaders в FF. Не могли бы вы протянуть мне руку помощи - (также в Table Extract или Treebuilder !? - чтобы получить первый взгляд на XPAth, над которым я работаю. Рад услышать от вас! приветствия - person zero; 15.05.2011
comment
Привет, SoulSurfer - большое спасибо. Я уверен, что должен убедиться, что страница действительна, прежде чем пытаться загрузить ее с помощью get. Верный момент! Тх пока. Я постараюсь ладить с этой первой помощью! Надеюсь, я справлюсь с задачей!! - person zero; 15.05.2011
comment
Здравствуйте, Soulsurfer: Большое спасибо за быстрый ответ. Если быть честным. у меня нет опыта работы с HTML::TableExtract или TML::TreeBuilder::XPath Так что не могли бы вы дать мне несколько первых шагов, чтобы сделать это таким образом. Идея TableExtract сделать работу очень интересна! Можете ли вы протянуть мне руку помощи и показать, как это решение будет выглядеть!? С нетерпением ждем ответа от Вас! Кстати .- вы бы очень помогли мне и моим ученикам - это задание, которое я делаю для своего школьного класса (и ученики были бы очень счастливы)... жду от вас известий... ;-) - person zero; 15.05.2011
comment
@zero: это работает намного лучше, если вы делаете то, что можете, а затем объясняете, где вы застряли или что-то пошло не так. - person ysth; 15.05.2011
comment
привет ysth - хорошо, я так и сделаю - и вернись сюда позже... до скорого - person zero; 15.05.2011