【问题标题】:How do I scrape something after JS has changed the DOM?JS 改变 DOM 后如何抓取一些东西?
【发布时间】:2012-05-23 11:06:05
【问题描述】:

我正在使用 Mechanize,但如果 Mechanize 做不到,我愿意接受 Nokogiri。

我想在所有脚本加载后而不是预先加载页面。

我该怎么做?

【问题讨论】:

    标签: javascript ruby screen-scraping nokogiri mechanize


    【解决方案1】:

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

    我知道的唯一方法是编写一个 FireFox 插件。使用插件,您可以在页面上运行 JavaScript,即使它不是您的页面。抱歉,我没有提供更多帮助,我希望这有助于您走上正确的道路。

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

    【讨论】:

    • Greasemonkey 可以不用从头开始制作自己的插件。
    【解决方案2】:

    Nokogiri 和 Mechanize 不是完整的 Web 浏览器,并且不在浏览器模型 DOM 中运行 JavaScript。您想使用类似 WatirSelenium 的东西,它们允许您使用 Ruby 来控制实际的 Web 浏览器。

    【讨论】:

    【解决方案3】:

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

    【讨论】:

      【解决方案4】:

      我认为 Nokogiri、Watir 和 PhantomJs 是一个不错的选择:

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

      b.goto URL

      doc = Nokogiri::HTML(b.html)

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-10-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多