<span class='python'>
  <a>google</a>
  <a>chrome</a>
</span>

我想获取chrome并使其已经像这样工作。
q = item.findall('.//span[@class="python"]//a')
t = q[1].text # first element = 0

我想将其组合成一个XPath表达式,只得到一个项目而不是一个列表。
t = item.findtext('.//span[@class="python"]//a[2]') # first element = 1

实际的而不是简化的HTML就是这样。
<span class='python'>
  <span>
    <span>
      <img></img>
      <a>google</a>
    </span>
    <a>chrome</a>
  </span>
</span>

最佳答案



这是有关//缩写的常见问题解答。
.//a[2]的意思是:选择当前节点的所有a后代,它们是其父级的第二个a子代。因此,根据具体的XML文档,它可以选择多个元素或不选择任何元素。

简而言之,[]运算符的优先级高于//

如果只想返回所有节点中的一个(第二个),则必须使用方括号来强制所需的优先级:
(.//a)[2]
这实际上选择了当前节点的第二个a后代。

对于问题中使用的实际表达式,将其更改为:

(.//span[@class="python"]//a)[2]

或将其更改为:
(.//span[@class="python"]//a)[2]/text()

关于python - 使用XPath获取第二个元素文本?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4117953/

10-12 22:20