繁体   English   中英

如何使用Perl从使用JavaScript动态生成的网页中获取文本?

[英]How can I use Perl to grab text from a web page that is dynamically generated with 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 ,我试图得到的信息是关于ConsumerOPR的行

您需要对Javascript正在执行的操作进行反向工程。 是否触发了填充<div>的AJAX请求? 如果是这样,使用Firebug嗅探请求应该很容易,然后使用LWP :: UserAgentWWW :: Mechanize复制它以获取信息。

如果Javascript只是在进行纯DOM操作,那么这意味着数据必须存在于页面中的其他位置或Javascript中。 因此,弄清楚它来自何处并抓住它。

最后,如果这些选项都不合适,您可能需要使用真正的浏览器来完成它。 有一些选项可以自动执行浏览器行为,例如WWW :: Mechanize :: FirefoxWin32 :: IE :: Mechanize

由于某些Javascript会生成您网页的内容,因此您需要能够:

  • 执行一些Javascript代码
    • 甚至,可能是一些复杂的JS代码,执行Ajax请求以及所有这些?
  • 并使用支持浏览器中存在的函数/方法的引擎(如DOM操作)来实现


一个解决方案可能是真正启动浏览器导航到该页面,然后解析由它加载的页面,以提取信息?

我从来没有用它来抓取,但是Selenium套件可能有所帮助,在这里:使用Selenium RC,你可以启动一个真正的浏览器,并试用它 - 然后,你有功能从它获取数据。

它不是很快,而且非常繁重(它必须启动一个浏览器!) ,但它运行得很好:例如,你将使用Firefox导航到你的页面 - 这意味着一个真正的Javascript引擎,这是每天都被很多人使用;-)

这可能是你想要的(在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重新创建它...

要使用动态创建的HTML,您可以使用FireFox Chickenfoot插件。 或者,如果您需要一些可以从命令行脚本运行的东西,请使用绑定到Perl。 我以前用Python做过这个。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM