JS改变DOM后如何刮掉一些东西?

时间:2012-05-15 21:36:18

标签: javascript ruby screen-scraping nokogiri mechanize

我正在使用Mechanize,虽然如果Mechanize不能这样做,我会对Nokogiri持开放态度。

我希望在加载所有脚本之后抓取页面而不是事先。

我该怎么做?

4 个答案:

答案 0 :(得分:6)

对于Nokogiri,Watir和PhantomJs,我认为这是一个很好的选择:

b = Watir::Browser.new(:phantomjs)

b.goto URL

doc = Nokogiri::HTML(b.html)

生成的文档将来自脚本加载后的时间。而phantomjs很不错,因为不需要加载浏览器。

答案 1 :(得分:4)

Nokogiri和Mechanize不是完整的网络浏览器,也不会在浏览器模型DOM中运行JavaScript。您希望使用WatirSelenium之类的东西,它允许您使用Ruby来控制实际的Web浏览器。

答案 2 :(得分:2)

除了watir-webdriver和capybara-webkit之外,celerity是一个不错的选择,虽然它只是jruby。

答案 3 :(得分:0)

我对机械化或nokogiri一无所知所以我不能专门评论它们。但是,在修改JavaScript之后获取JavaScript的问题是我认为只能通过更多JavaScript来解决的问题。为了获得新生成的HTML,您需要获取文档元素的.innerHTML。这可能很棘手,因为您必须将js注入页面。

我知道完成此任务的唯一方法是编写FireFox插件。使用插件,您可以在页面上运行JavaScript,即使它不是您的页面。对不起,我没有更多的帮助,我希望这有助于让你走上正确的道路。

如果您对插件感兴趣,可以从这里开始:http://anthonystechblog.wordpress.com/category/internet/firefox/