首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Nokogiri不为高级XPath搜索工作

问Nokogiri不为高级XPath搜索工作
EN

Stack Overflow用户
提问于 2014-07-22 21:37:07
回答 1查看 269关注 0票数 0

看看这个页面:http://finviz.com/quote.ashx?t=AAPL

The XPath

代码语言:javascript
复制
(//*[contains(concat(' ', @class, ' '), ' snapshot-table2 ')]/tbody/tr/td[text() = 'Index']/following::td)[1]/b

应该吐出S&P 500,当我在JavaScript控制台中试用它时,它就会吐出来。但是,当我尝试在Ruby中使用Nokogiri时,它会返回一个空数组。

下面是完整的代码:

代码语言:javascript
复制
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)返回[]

有什么想法吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-07-22 22:05:38

在该页面的响应中,我没有看到一个<tbody>元素。

您提到您的XPath在浏览器控制台中工作,这很可能是因为浏览器为呈现目的而注入tbody元素,请参阅"Why do browsers insert tbody element into table elements?“以了解为什么会发生这种情况。

再次尝试XPath,而不指定<tbody>节点:

代码语言:javascript
复制
data.xpath("(//*[contains(@class, 'snapshot-table2')]/tr/td[text() = 'Index']/following::td)[1]/b")

您还可以使用类似的工具在浏览器和Ruby代码中获得相同的XPath:

代码语言:javascript
复制
(//*[contains(@class, 'snapshot-table2')]//tr/td[text() = 'Index']/following::td)[1]/b
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24898299

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档