我正在使用 NOKOGIRI 对网页进行 XPath 处理。我熟悉 XPath,但我无法弄清楚为什么我的 XPath 无法获取特定行。请参阅 ruby 代码。
我使用 FireBug XML 来验证我的 XPath,因此我 99% 确定我的 XPath 是正确的。
require 'nokogiri'
require 'open-uri'
@searchURL = 'http://www.umn.edu/lookup?UID=smit4562'
@xpath = '//html/body/p/table/tbody/tr/td[2]/table/tbody/tr[2]'
doc = Nokogiri::HTML(open(@searchURL))
puts 'row should be = Email Address: <a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="285b45415c1c1d1e1a685d4546064d4c5d" rel="noreferrer noopener nofollow">[email protected]</a>'
puts '=> ' + doc.xpath(@xpath).to_s
puts 'is row emppty?'
puts '=> ' + doc.xpath(@xpath).empty?().to_s
最佳答案
<tbody>
tag 是一个可选标签,如果省略则为隐式标签。这意味着<tbody>
当标签不存在时,浏览器会自动插入标签。它们不在您的示例的源代码中,因此 nokogiri 不知道它们。
Firebug 使用生成的 DOM,其中包含 tbody
元素,因此该语句在浏览器中确实匹配。
删除 tbody
选择器,你应该没问题。
关于ruby - 为什么这个 Nokogiri XPath 返回 null?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9156650/