2011-02-28 113 views
1

我想弄清楚如何抓取完全呈现的页面并对其进行处理。我一直在使用Nokogiri,Hpricot,Mechanize等,但没有人可以捕捉到一个网页,其元素由AJAX或其他事件后呈现。屏幕抓取完全呈现页面

一个例子是Twitter的状态页面,很多的一个,我碰到过这个项目,我遇到的麻烦:

http://twitter.com/#!/nytimes/status/42341419062525952

http://twitter.com/#!/alleyinsider/status/42337897038364672

如果您查看HTML源代码,则主要是稍后呈现呈现的JavaScript。在Firebug或其他控制台中检查它,你会看到完全渲染的结果,但我不知道如何用上述工具捕获它。我错过了什么吗?

BTW:是的,我知道有一个Twitter API。但这更像是一个理论问题,因为我在其他一些网站上有不同程度的打击。

谢谢!

回答

5

...没有人可以捕获到其网页的元素由AJAX或其他事件后呈现的页面。

这是正确的。您捕获的内容在捕获时并不存在于文档中,而是作为浏览器处理JavaScript的结果插入的,该JavaScript通过AJAX请求内容并将其插入到页面中。

因此,要获得您想要去的位置,您需要在您的代码控制下使用JavaScript解释器或浏览器。

Watir项目能够做到这一点。这就像Mechanize上面的下一个步骤,除了不是Ruby代码,它是一个浏览器被告知你的Ruby代码做什么。所以,浏览器应该能够加载页面,处理JavaScript,然后引入你正在寻找的内容。

variations on Watir为不同的浏览器,所以你可以使用IE浏览器,Safari浏览器,Firefox等

+0

我听说过Watir,但从未完全检查过它。我现在就这样做。谢谢! – Nuby 2011-02-28 23:13:26

0

您是否试过WebDriver?它将整个页面加载到浏览器中(真实或虚拟),您可以浏览页面的DOM,并且如果要修改页面,则可以传递javascript命令来执行。

+0

我以前没听说过。我一定会检查出来的。 – Nuby 2011-02-28 23:12:58

0

我想如果你试图抓取的数据是通过Ajax检索的话,如果可能的话,你最好瞄准你的景点。

除此之外,API的帮助很多(如你所说)。有趣的是,它看起来像是Twitter网站的工作原理like your example

0

如果你是跑步java,你可能想看看lobo浏览器,你可以通过你的代码实例化并渲染页面。 http://lobobrowser.org/java-browser.jsp。我曾尝试过,但后来放弃了没有Ajax内容的更简单的解决方案。

0

iMacros是一个伟大的和容易使用工具web scraping。您可以在IE,Firefox和Chrome中运行刮码。有两个,一个免费和商业版本。我喜欢它适用于任何类型的网站,甚至是Flash小程序。