【问题标题】:Is there anything special to consider using HTML scraping using xpaths?使用 xpaths 进行 HTML 抓取有什么特别需要考虑的吗?
【发布时间】:2011-11-17 03:12:46
【问题描述】:

我正在尝试使用 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">

代码很简单:

#!/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

它适用于其他较短的路径,但仅针对这种特定情况返回 ""

为什么会发生这种情况?我错过了什么,或者由于某些错误而有一个有趣的 Nokogiri 行为?欢迎大家指点。

【问题讨论】:

  • 你能发布一些(完整的)示例标记供我们试验吗?如果它很长,请给出它。 gist.github.com
  • 不,没有什么特别需要考虑的,只是您的 XPath 看起来异常脆弱。如果可能,您应该锚定页面的更多语义方面(如idclass 属性)。正如@d11wtq 所说,您需要向我们展示一个要使用的 XML 的真实示例。
  • 谢谢大家!它实际上是由 mozilla 添加的 tbody 标签,它最初并不存在。如果您从 xpath 中删除它,它会起作用

标签: html ruby xpath nokogiri web-scraping


【解决方案1】:

tbody 标签可能实际上并不存在。 有些浏览器会在它们不存在时添加它们,但 Nokogiri 不会。

【讨论】:

  • 我也有这个问题。你可以在这里看到我的堆栈溢出问题:stackoverflow.com/questions/7540506/…
  • 正确,一些浏览器添加了tbody,这就像一个红鲱鱼。在构建 XPath 访问器时最好查看源文本,而不是依赖浏览器来生成访问器。
  • 删除tbody 标签有效。该死的浏览器(在这种特定情况下是Mozilla)!谢谢 pguardiario :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-18
  • 1970-01-01
  • 1970-01-01
  • 2012-01-23
相关资源
最近更新 更多