看看这个页面:http://finviz.com/quote.ashx?t=AAPL
The XPath
(//*[contains(concat(' ', @class, ' '), ' snapshot-table2 ')]/tbody/tr/td[text() = 'Index']/following::td)[1]/b应该吐出S&P 500,当我在JavaScript控制台中试用它时,它就会吐出来。但是,当我尝试在Ruby中使用Nokogiri时,它会返回一个空数组。
下面是完整的代码:
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)返回[]
有什么想法吗?
发布于 2014-07-22 22:05:38
在该页面的响应中,我没有看到一个<tbody>元素。
您提到您的XPath在浏览器控制台中工作,这很可能是因为浏览器为呈现目的而注入tbody元素,请参阅"Why do browsers insert tbody element into table elements?“以了解为什么会发生这种情况。
再次尝试XPath,而不指定<tbody>节点:
data.xpath("(//*[contains(@class, 'snapshot-table2')]/tr/td[text() = 'Index']/following::td)[1]/b")您还可以使用类似的工具在浏览器和Ruby代码中获得相同的XPath:
(//*[contains(@class, 'snapshot-table2')]//tr/td[text() = 'Index']/following::td)[1]/bhttps://stackoverflow.com/questions/24898299
复制相似问题