gpt4 book ai didi

html - 使用 XPath 获取 HTML 元素的文本内容?

转载 作者:技术小花猫 更新时间:2023-10-29 12:04:37 28 4
gpt4 key购买 nike

查看此 html

<div>
<p>
<span class="abc">Monitor</span> <b>$300</b>
</p>
<a href="/add">Add to cart</a>
</div>
<div>
<p>
<span class="abc">Keyboard</span> $20
</p>
<a href="/add">Add to cart</a>
</div>

使用 xpath 我想解析 Monitor $300Keyboard $20 .我使用这个 xpath

 //div[a[contains(., "Add to cart")]]/p/text()

但它选择了 <span class="abc">Monitor</span> <b>$300</b> .我不想要标签。如何只获取文本?

最佳答案

您想选择所有后代 文本,而不仅仅是子文本:

//div[a[contains(., "Add to cart")]]/p//text()

注意 ptext() 之间的双斜杠。

虽然这可能还会包含很多标签间空格,但您需要将其清理掉。使用 lxml 的示例:

>>> import lxml.etree as ET
>>> tree = ET.fromstring('''<div>
... <div>
... <p>
... <span class="abc">Monitor</span> <b>$300</b>
... </p>
... <a href="/add">Add to cart</a>
... </div>
... <div>
... <p>
... <span class="abc">Keyboard</span> $20
... </p>
... <a href="/add">Add to cart</a>
... </div>
... </div>''')
>>> tree.xpath('//div[a[contains(., "Add to cart")]]/p//text()')
['\n ', 'Monitor', ' ', '$300', '\n ', '\n ', 'Keyboard', ' $20 \n ']
>>> res = _
>>> [txt for txt in (txt.strip() for txt in res) if txt]
['Monitor', '$300', 'Keyboard', '$20']

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

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