【发布时间】:2014-07-23 07:12:30
【问题描述】:
看看这个页面:http://finviz.com/quote.ashx?t=AAPL
XPath
(//*[contains(concat(' ', @class, ' '), ' snapshot-table2 ')]/tbody/tr/td[text() = 'Index']/following::td)[1]/b
应该吐出S&P 500,当我在 JavaScript 控制台中尝试它时,它确实如此。但是,当我尝试将 Nokogiri 与 Ruby 一起使用时,它会返回一个空数组。
这是完整的代码:
url = "http://finviz.com/quote.ashx?t=#{ticker}"
data = Nokogiri::HTML(open(url))
xpath = "(//*[contains(concat(' ', @class, ' '), ' snapshot-table2 ')]/tbody/tr/td[text() = '#{datapoint}']/following::td)[1]/b"
data.xpath(xpath)
data.xpath(xpath) 返回[]
有什么想法吗?
【问题讨论】:
-
您不能相信浏览器会告诉您节点的正确路径。浏览器试图呈现一些可用的东西,并使用格式错误的 HTML 进行各种修复。那个“固定”的 HTML 就是它将向您展示的内容。相反,请查看当您的
open语句移交 IO 句柄时 Nokogiri 将看到的相同 HTML。使用open(url).read,您将看到服务器发送的原始 HTML,这将使您有更好的机会找到正确的 XPath。
标签: ruby-on-rails ruby xml xpath nokogiri