【问题标题】:HTML is read before fully loaded using open-uri and nokogiri使用 open-uri 和 nokogiri 在完全加载之前读取 HTML
【发布时间】:2012-11-27 04:41:21
【问题描述】:

我正在使用 open-urinokogiri 和 ruby​​ 来做一些简单的网络爬虫。 存在一个问题,有时 html 在完全加载之前就被读取了。在这种情况下,我无法获取加载图标和导航栏以外的任何内容。 告诉open-urinokogiri 等待页面完全加载的最佳方法是什么?

目前我的脚本如下:

require 'nokogiri'
require 'open-uri'

url = "https://www.the-page-i-wanna-crawl.com"
doc = Nokogiri::HTML(open(url, ssl_verify_mode: OpenSSL::SSL::VERIFY_NONE)) 
puts doc.at_css("h2").text

【问题讨论】:

  • example.com source 没有任何

    标签。

  • 这只是我的问题的占位符。很抱歉误导。
  • 定义“完全加载”,图片、外部脚本、ajax内容等呢?
  • 您确定您认为正在发生的事情就是正在发生的事情吗?即,您是否检查过 curl 或类似内容?我没有看到你描述的行为。
  • 这表明内容正在通过 AJAX 或其他一些 JS 方法加载,并且原始 HTML 源(所有 curl/nokogiri 都可以看到)不包含您想要的内容。在这种情况下,您需要选择另一个支持 JS/ajax 的爬虫。

标签: ruby nokogiri open-uri


【解决方案1】:

你所描述的是不可能的。 open 的结果只会在open 方法返回完整值之后传递给HTML

我怀疑页面本身使用 AJAX 加载其内容,正如 cmets 中所建议的那样,在这种情况下,您可以使用 Watir 使用浏览器获取页面

require 'nokogiri'
require 'watir'

browser = Watir::Browser.new
browser.goto 'https://www.the-page-i-wanna-crawl.com'

doc = Nokogiri::HTML.parse(browser.html)

这可能会打开一个浏览器窗口。

【讨论】:

  • 非常方便。谢谢!
  • 有没有办法避免打开浏览器?
  • @lcguida browser = Watir::Browser.new :chrome, headless: true
猜你喜欢
  • 2013-07-04
  • 1970-01-01
  • 1970-01-01
  • 2011-02-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-27
  • 2014-04-11
相关资源
最近更新 更多