2

我正在抓取一个 html 文档,其结构一直在变化。Css 类名甚至会改变,所以我不能依赖它。但是,有一件事永远不会改变,该值始终包含在子树中,如下所示:

<span>
  <span>
    <span>wanted value</span>
    <span></span>wanted value
  </span>
</span>

这可以表示为 XPath 表达式吗?

它不应该匹配

<span>
  <span>
    <span> 1, one too little </span>
    <span> 2 </span>
    <span> 3, one too many </span>
    <span> 4, two too many </span>
  </span>
</span>

我计划使用 Python 的 lxml 来做到这一点。

4

1 回答 1

3

如果想要的值的位置始终在 span 的第三级,则以下 xpath 将起作用:

//span/span/span[1]

应用于下一个 HTML 文档时:

<html>
  <head>
    <title>Your Title</title>
  </head>
  <body>
    <div>
    <span>
      <span>
        <span>wanted value</span>
        <span></span>
      </span>
    </span>
    </div>
    <div>
    <span>
      <span>
        <span>wanted value</span>
        <span></span>
      </span>
    </span>
    </div>
  </body>
</html>

结果将是:

wanted value
wanted value

编辑

如果在第三级上的跨度总数等于 2 时,您只需要第三级上的第一个跨度的值,则可以使用以下 XPath:

//span/span[count(span) = 2]/span[1]
于 2013-02-19T10:11:57.187 回答