gpt4 book ai didi

python - 正确的 xpath 来卷起子项的文本

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

我正在解析一个具有如下结构的页面:

<pre class="asdf">content a</pre>
<pre class="asdf">content b</pre>

# returns
content a
content b

我使用以下 XPath 来获取内容: "//pre[@class='asdf']/text()"

它工作得很好,除非有任何元素嵌套在 <pre> 中。标签,它不连接它们:

<pre class="asdf">content <a href="http://stackoverflow.com"</a>a</a></pre>
<pre class="asdf">content b</pre>

# returns
content
content b

如果我使用此 XPath,我会得到以下输出。 "//pre[@class='asdf']//text()"

content
a
content b

这两个我都不想要。我想获取 <pre> 中的所有文本,即使它有 child 。我不在乎标签是否被剥离,但我希望将其连接在一起。

我该怎么做?我正在使用lxml.html.xpath在python2中,但我认为这并不重要。 This answer to another question让我觉得也许child::跟我的回答有关系。

这里有一些重现它的代码。

from lxml import html

tree = html.fromstring("""
<pre class="asdf">content <a href="http://stackoverflow.com">a</a></pre>
<pre class="asdf">content b</pre>
""")
for row in tree.xpath("//*[@class='asdf']/text()"):
print("row: ", row)

最佳答案

.text_content()是你应该使用的:

.text_content(): Returns the text content of the element, including the text content of its children, with no markup.

for row in tree.xpath("//*[@class='asdf']"):
print("row: ", row.text_content())

演示:

>>> from lxml import html
>>>
>>> tree = html.fromstring("""
... <pre class="asdf">content <a href="http://stackoverflow.com">a</a></pre>
... <pre class="asdf">content b</pre>
... """)
>>> for row in tree.xpath("//*[@class='asdf']"):
... print("row: ", row.text_content())
...
('row: ', 'content a')
('row: ', 'content b')

关于python - 正确的 xpath 来卷起子项的文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35077535/

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