使用xpath选择一个接一个的元素

jse*_*old 11 xpath lxml

我见过类似的问题,但我见过的解决方案不适用于以下内容.我远非XPath专家.我只需要解析一些HTML.如何选择Header 2后面的表格.我认为下面的解决方案应该可行,但显然不行.有人可以帮我从这里出去吗?

content = """<div>
<p><b>Header 1</b></p>
<p><b>Header 2</b><br></p>
<table>
<tr>
    <td>Something</td>
</tr>
</table>
</div>
"""

from lxml import etree
tree = etree.HTML(content)
tree.xpath("//table/following::p/b[text()='Header 2']")
Run Code Online (Sandbox Code Playgroud)

pau*_*rth 13

@Arup答案的一些替代方案:

tree.xpath("//p[b='Header 2']/following-sibling::table[1]")
Run Code Online (Sandbox Code Playgroud)

选择包含包含"Header 2" 的标题后的第一个table兄弟pb

tree.xpath("//b[.='Header 2']/following::table[1]")
Run Code Online (Sandbox Code Playgroud)

tableb包含"Header 2" 之后选择文档顺序中的第一个

有关不同轴的详细信息,请参阅XPath 1.0规范:

  • 下面的轴包含同一文档是文档顺序上下文节点之后上下文节点中的所有节点,但不包括任何后代和排除属性节点和命名空间节点

  • 下面的同胞轴包含上下文节点的所有兄弟姐妹以下; 如果上下文节点是属性节点或命名空间节点,则以下兄弟轴为空


Aru*_*hit 10

您需要使用Axes 使用下面的XPATH 1.0preceding.

 //table[preceding::p[1]/b[.='Header 2']]
Run Code Online (Sandbox Code Playgroud)