XPath寻找子树

时间:2013-02-19 09:56:58

标签: xpath lxml

我正在抓取一个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>

我计划使用lxml for Python来做这件事。

1 个答案:

答案 0 :(得分:3)

如果所需值的位置始终位于第三级跨度上,则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]