Как я могу использовать Perl для захвата текста с веб-страницы, которая динамически генерируется с помощью JavaScript? - PullRequest
12 голосов
/ 16 апреля 2010

Есть сайт, с которого я пытаюсь получить информацию в Perl, однако нужный мне раздел страницы создается с использованием javascript, поэтому все, что вы видите в источнике:

<div id="results"></div>

Мне нужно каким-то образом извлечь содержимое этого div и сохранить его в файл, используя Perl / proxies / что угодно. например информация, которую я хочу сохранить, будет

document.getElementById('results').innerHTML;

Я не уверен, возможно ли это или кто-то имел какие-либо идеи или способ сделать это. Я использовал дамп исходного кода lynx для других страниц, но так как я не могу просмотреть экран прямо, я пришел сюда, чтобы спросить об этом!

Если кому-то интересно, страница - http://downloadcenter.trendmicro.com/index.php?clk=left_nav&clkval=pattern_file&regs=NABU, и информация, которую я пытаюсь получить, - это строка о ConsumerOPR

Ответы [ 5 ]

14 голосов
/ 16 апреля 2010

Вам нужно будет перепроектировать то, что делает Javascript. Срабатывает ли AJAX-запрос для заполнения <div>? Если это так, должно быть довольно просто прослушать запрос, используя Firebug , а затем скопировать его с помощью LWP :: UserAgent или WWW :: Mechanize , чтобы получить информацию .

Если Javascript просто выполняет чистые манипуляции с DOM, то это означает, что данные должны уже существовать где-то еще на странице или в Javascript. Так что выясни, откуда он, и возьми его.

Наконец, если ни один из этих параметров не подходит, вам может понадобиться просто использовать настоящий браузер, чтобы сделать это. Есть несколько вариантов автоматизации поведения браузера, например WWW :: Mechanize :: Firefox или Win32 :: IE :: Mechanize .

7 голосов
/ 16 апреля 2010
4 голосов
/ 16 апреля 2010

Поскольку содержимое вашей страницы генерируется неким Javascript, вам нужна способность:

  • Выполнить некоторый код Javascript
    • Даже, возможно, какой-нибудь сложный код JS, выполняющий Ajax-запросы и все такое?
  • И сделать это с движком, который поддерживает функции / методы, присутствующие в браузере (например, манипуляции с DOM)


Решение может состоять в том, чтобы действительно запустить браузер для перехода на эту страницу, а затем проанализировать загруженную им страницу для извлечения информации?

Я никогда не использовал это для захвата, но Selenium Suite *1019* может помочь, здесь: используя Selenium RC, вы можете запустить настоящий браузер и запустить его - тогда у вас есть функции, чтобы получить данные из него.

Это не совсем быстро и довольно тяжело (нужно запустить браузер!) , но работает довольно хорошо: вы будете использовать Firefox, например, для перехода на свою страницу - - что означает настоящий движок Javascript, который каждый день используется многими людьми; -)

0 голосов
/ 20 апреля 2010

Для работы с динамически создаваемым HTML вы можете использовать плагин FireFox Chickenfoot . Или, если вам нужно что-то, что работает из скрипта командной строки, используйте привязки к Perl. Я делал это с Python раньше.

0 голосов
/ 16 апреля 2010

Это может быть то, что вы ищете (в PHP):

$url = 'http://downloadcenter.trendmicro.com/ajx/pattern_result.php';

$ch = curl_init();
curl_setopt ($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt ($ch, CURLOPT_URL, $url);
curl_setopt ($ch, CURLOPT_POST, 1);
curl_setopt ($ch, CURLOPT_POSTFIELDS, 'q=patresult_page&reg=NABU');
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
$content = curl_exec($ch);
curl_close($ch);

echo $content;
exit;

как только вы получите контент, вы можете использовать что-то вроде: http://code.google.com/p/phpquery/ для анализа нужных вам результатов или аналогичного perl-эквивалента ???

И / или выполните синтаксический анализ самостоятельно.

К вашему сведению: все, что я делал, это использовал firebug для проверки запросов и воссоздал его с помощью PHP / CURL ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...