<span class='python'>
<a>google</a>
<a>chrome</a>
</span>
Run Code Online (Sandbox Code Playgroud)
我想得到chrome并让它像这样工作.
q = item.findall('.//span[@class="python"]//a')
t = q[1].text # first element = 0
Run Code Online (Sandbox Code Playgroud)
我想将它组合成一个XPath表达式,只需要一个项而不是列表.
我试过这个,但它不起作用.
t = item.findtext('.//span[@class="python"]//a[2]') # first element = 1
Run Code Online (Sandbox Code Playgroud)
实际的,而不是简化的HTML就是这样的.
<span class='python'>
<span>
<span>
<img></img>
<a>google</a>
</span>
<a>chrome</a>
</span>
</span>
Run Code Online (Sandbox Code Playgroud)
Dim*_*hev 35
我试过这个,但它不起作用.
Run Code Online (Sandbox Code Playgroud)t = item.findtext('.//span[@class="python"]//a[2]')
这是关于//缩写的常见问题解答.
.//a[2]表示:选择a当前节点的所有后代,这些后代是a其父节点的第二个子节点.因此,这可能会选择多个元素或不选择任何元素 - 具体取决于具体的XML文档.
更简单地说,[]运营商的优先级高于//.
如果只需要返回所有节点中的一个(第二个),则必须使用括号来强制所需的优先级:
(.//a)[2]
这确实选择a了当前节点的第二个后代.
对于问题中使用的实际表达式,请将其更改为:
(.//span[@class="python"]//a)[2]
Run Code Online (Sandbox Code Playgroud)
或将其更改为:
(.//span[@class="python"]//a)[2]/text()
Run Code Online (Sandbox Code Playgroud)