我正试图用Nokogiri抓取HTML。 这是html源代码:
<span id="J_WlAreaInfo" class="wl-areacon">
<span id="J-From">山东济南</span>
至
<span id="J-To">
<span id="J_WlAddressInfo" class="wl-addressinfo" title="全国">
全国
<s></s>
</span>
</span>
</span>
我需要获得以下文字:山东济南
用firebug检查最短的XPATH:
//*[@id="J-From"]
这是我的红宝石代码:
doc = Nokogiri::HTML(open("http://foo.html"), "UTF-8")
area = doc.xpath('//*[@id="J-From"]')
puts area.text
然而,它什么都不返回。 我做错了什么?
答案 0 :(得分:2)
然而,它什么都不返回。我做错了什么?
xpath()返回一个包含匹配项的数组(它实际上称为NodeSet):
require 'nokogiri'
html = %q{
<span id="J_WlAreaInfo" class="wl-areacon">
<span id="J-From">山东济南</span>
至
<span id="J-To">
<span id="J_WlAddressInfo" class="wl-addressinfo" title="全国">
全国
<s></s>
</span>
</span>
</span>
}
doc = Nokogiri::HTML(html)
target_tags = doc.xpath('//*[@id="J-From"]')
target_tags.each do |target_tag|
puts target_tag.text
end
--output:--
山东济南
编辑:您实际上可以在数组上调用text()
,但它会返回数组中每个匹配的文本的连接结果 - 这不是我认为有用的东西 - - 但因为只有一个匹配你应该得到结果山东济南
。您的帖子中没有任何内容表明您没有获得该结果的原因。
如果您只需要xpath中的单个结果,即第一个匹配项,那么您可以使用at_xpath()
:
target_tag = doc.at_xpath('//*[@id="J-From"]')
puts target_tag.text
--output:--
山东济南