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

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

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

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

document.getElementById('results').innerHTML;

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

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

Ответ 1

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

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

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

Ответ 3

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

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


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

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

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

Ответ 4

Это может быть то, что вы ищете (в 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???

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

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

Ответ 5

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