Как я могу использовать 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®s=NABU, и информация, которую я пытаюсь получить, - это строка об UserOPR
Ответы
Ответ 1
Вам нужно будет перепроектировать, что делает Javascript. Запускает ли он запрос AJAX для заполнения <div>
? Если это так, довольно легко обнюхать запрос с помощью Firebug, а затем дублировать его с помощью LWP:: UserAgent или WWW:: Механизировать, чтобы получить информацию.
Если Javascript просто выполняет чистую манипуляцию DOM, это значит, что данные должны существовать где-то еще на странице или в Javascript. Так что выясните, откуда она взялась и возьмите его.
Наконец, если ни один из этих вариантов не подходит, вам может потребоваться просто использовать настоящий браузер для этого. Существует несколько вариантов автоматизации поведения браузера, например WWW:: Mechanize:: Firefox или Win32:: IE:: Механизируйте.
Ответ 2
Приведение браузера на сервер с помощью John Resig может оказаться полезным.
Ответ 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®=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 раньше.