2010-04-16 37 views
10

有一个网站,我想从Perl中提取信息,我需要的是使用JavaScript生成的页面,不过部分,因此你在源看到的是:如何使用Perl从JavaScript动态生成的网页中获取文本?

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

我需要以某种方式拉取出该div的内容并使用Perl/proxies/whatever将其保存到文件中。例如我想要保存的信息将是

document.getElementById('results').innerHTML; 

我不确定这是否可能,或者如果有人有任何想法或方法来做到这一点。 我正在使用山猫源转储为其他网页,但因为我不能直接屏幕刮这个页面,我来到这里问它!

如果有人有兴趣,该页面是http://downloadcenter.trendmicro.com/index.php?clk=left_nav&clkval=pattern_file&regs=NABU,我想获得的信息是关于ConsumerOPR

+0

我也对这个感兴趣...你能看到和/或你有没有访问AJAX请求URL(假设数据正在通过AJAX填充)? – farinspace 2010-04-16 17:43:36

+0

是的,我可以看到ajax,但是在这个网站上从ajax查询中发回的所有内容都是results.innerHTML设置的另一个js函数。 – user318747 2010-04-16 17:45:51

回答

11

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

如果Javascript只是在进行纯粹的DOM操作,那么这意味着数据必须已经存在于页面或Javascript中的其他地方。所以找出它来自哪里并抓住它。

最后,如果这些选项都不足够,您可能需要使用真正的浏览器来完成。浏览器行为自动化有几个选项,如WWW::Mechanize::FirefoxWin32::IE::Mechanize

7

Bringing the Browser to the Server行通过John Resig可能是有用的。

+0

非常有趣的链接。多年来,我不得不用这种方式。我实际上有点失望,现在它会轻松几个数量级。 – 2010-04-16 17:49:02

+0

大声笑...随着网站增加动态组件,我欢迎易用性......我记得为了类似的目的而运行浏览器必须设置专用服务器。 – farinspace 2010-04-16 17:56:13

+0

单个专用服务器?如何同时运行64个IE实例的四个专用四CPU系统? ;-) – 2010-04-16 18:08:18

4

,您的网页内容是由一些JavaScript生成的,你需要的能力:

  • 执行一些JavaScript代码
    • 可能,甚至一些复杂的JS代码,做Ajax请求,并所有这一切?
  • 有了这样的支持功能/存在于浏览器(如DOM操作)


一个解决办法是居然真的启动浏览器的方法引擎做导航到该页面,然后解析由它加载的页面以提取信息?

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

这不是很快,它很沉重(它必须启动浏览器!),但它工作得很好:例如,您将使用Firefox导航到您的页面 - 这意味着一个真正的Javascript引擎,许多人每天都会使用它;-)

0

This可能是你寻找什么(在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 /卷曲重建它...

0

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

相关问题