使用XPath使用HTML刮削有什么特别的考虑吗?
我试图使用Nokogiri和xpath从HTML中的某个位置抓取数据。我使用的xpath是:使用XPath使用HTML刮削有什么特别的考虑吗?,html,ruby,xpath,nokogiri,web-scraping,Html,Ruby,Xpath,Nokogiri,Web Scraping,我试图使用Nokogiri和xpath从HTML中的某个位置抓取数据。我使用的xpath是: /html/body/table/tbody/tr[2]/td/table/tbody/tr[2]/td[2] xpath指向: <td class="anatxt" nowrap=""> CELL TXT DATA <div id="div0" style="visibility: hidden; position: absolute"> 它适用于其他较短的路径,但对于此
/html/body/table/tbody/tr[2]/td/table/tbody/tr[2]/td[2]
xpath指向:
<td class="anatxt" nowrap=""> CELL TXT DATA <div id="div0" style="visibility: hidden; position: absolute">
它适用于其他较短的路径,但对于此特定情况,它仅返回“”
为什么会发生这种情况?我遗漏了什么,或者是因为一些bug导致了一个有趣的Nokogiri行为?欢迎使用任何指针。标签可能不在那里。
有些浏览器在不存在时会添加它们,但Nokogiri不会。标签可能实际上不存在。
有些浏览器在不存在时会添加它们,但Nokogiri不会添加。您能发布一些(完整的)示例标记供我们试验吗?如果是长的,就给它要点。不,除了XPath看起来特别脆弱之外,没有什么特别要考虑的。如果可能的话,您应该关注页面的更多语义方面(如
id
和class
属性)。正如@d11wtq所说的,您需要向我们展示一个真正的XML使用示例。谢谢大家!它实际上是mozilla添加的tbody
标记,它最初并不存在。如果您将其从XPath中删除,它会起作用。您可以发布一些(完整的)示例标记供我们使用吗?如果是长的,就给它要点。不,除了XPath看起来特别脆弱之外,没有什么特别要考虑的。如果可能的话,您应该关注页面的更多语义方面(如id
和class
属性)。正如@d11wtq所说的,您需要向我们展示一个真正的XML使用示例。谢谢大家!它实际上是mozilla添加的tbody
标记,它最初并不存在。如果你把它从xpathI中移除,它也会工作。你可以在这里看到我的堆栈溢出问题:正确,一些浏览器添加了tbody
,这就像是在转移注意力。在构建XPath访问器时,最好查看源文本,而不是依赖浏览器生成访问器。删除tbody
标记是有效的。该死的浏览器(在这种情况下是mozilla)!谢谢你,我也有这个问题。你可以在这里看到我的堆栈溢出问题:正确,一些浏览器添加了tbody
,这就像是在转移注意力。在构建XPath访问器时,最好查看源文本,而不是依赖浏览器生成访问器。删除tbody
标记是有效的。该死的浏览器(在这种情况下是mozilla)!谢谢你,帕瓜迪里奥:)
#!/usr/bin/ruby -w
require 'rubygems'
require 'nokogiri'
page1 = Nokogiri::HTML(open('test1.html'))
a = page1.xpath("/html/body/table/tbody/tr[2]/td/table/tbody/tr[2]/td[2]").text
p a