gpt4 book ai didi

python - Xpath python 在特定文本后查找节点

转载 作者:太空宇宙 更新时间:2023-11-03 19:28:30 25 4
gpt4 key购买 nike

这是 HTML 代码:

<div id="someid">
<h2>Specific text 1</h2>
<a class="hyperlinks" href="link"> link1 inside specific text 1</a>
<a class="hyperlinks" href="link"> link2 inside specific text 1</a>
<a class="hyperlinks" href="link"> link3 inside specific text 1</a>

<h2>Specific text 2</h2>
<a class="hyperlinks" href="link"> link1 inside specific text 2</a>
<a class="hyperlinks" href="link"> link2 inside specific text 2</a>
<a class="hyperlinks" href="link"> link3 inside specific text 2</a>
<a class="hyperlinks" href="link"> link4 inside specific text 2</a>

<h2>Specific text 3</h2>
<a class="hyperlinks" href="link"> link1 inside specific text 3</a>
<a class="hyperlinks" href="link"> link2 inside specific text 3</a>

</div>

我必须清楚地找到每个“特定文本”下的链接。问题是,如果我在 python 中编写以下代码:

links = root.xpath("//div[@id='someid']//a")
for link in links:
print link.attrib['href']

它会打印所有链接,无论“特定文本 x”如何,而我想要类似的内容:

print "link under Specific text:"+specific+" link:"+link.attrib['href']

请提出建议

最佳答案

我认为每个 h2 特定文本都需要一个 XPath 表达式。

给定一个 h2 特定文本,您可以通过以下方式获取其以下相邻的 a 同级文本:

    //div[@id='someid']/h2[.='Specific text 1']
/following-sibling::a[
count( . | following-sibling::h2[1]/preceding-sibling::*)
= count(following-sibling::h2[1]/preceding-sibling::*)
and preceding-sibling::h2[1][.='Specific text 1']]
|
//div[@id='someid']/h2[.='Specific text 1' and not(following-sibling::h2[1])]
/following-sibling::a"

第二个 //h2 选择处理 h2 是最后一个的情况。

上面的表达式只是利用了 XPath 1.0 交集公式:

$ns1[count(.|$ns2)=count($ns2)]

您可以在 SO 找到很多关于此方法的资源和很多答案(也可以查看我的答案)。我认为理解如何应用这个公式并不难,难的是理解何时必须应用它。

该公式由@Michael Key 提供。只是google it a bit .

我的表达式已使用附加谓词进行了扩展,以处理您的特定情况,并使用附加表达式统一 (|) 来处理最后的 h2

关于python - Xpath python 在特定文本后查找节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7188964/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com