基本上我想选择一个节点(div),其子节点(h1,b,h3)包含指定的文本.
<html>
<div id="contents">
<p>
<h1> Child text 1</h1>
<b> Child text 2 </b>
...
</p>
<h3> Child text 3 </h3>
</div>
Run Code Online (Sandbox Code Playgroud)
我期待,/ html/div/not/html/div/h1
我有这个,但不幸的是返回孩子,而不是xpath到div.
expression = "//div[contains(text(), 'Child text 1')]"
doc.xpath(expression)
Run Code Online (Sandbox Code Playgroud)
我期待,/ html/div/not/html/div/h1
那么有没有办法简单地使用xpath语法?
and*_*e-r 12
下面的表达式给出了一个节点(div),其中任何子节点(不仅仅是h1,b,h3)包含指定的文本(不是div本身):
doc.xpath('//div[.//*[contains(text(), "Child text 1")]]')
Run Code Online (Sandbox Code Playgroud)
您可以优化它并返回唯一具有id的div,contents如示例所示:
doc.xpath('//div[@id="contents" and .//*[contains(text(), "Child text 1")]]')
Run Code Online (Sandbox Code Playgroud)
它不匹配,如果文本是div的文本节点(直接在div内),这是我对问题的解释.
你可以追加"/ .."来锚回父母.不确定是否有更强大的方法.
expression = "//div[contains(text(), 'Child text 1')]/.."
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
11689 次 |
| 最近记录: |