当有另一个带有文本的标签时,LXML 库不会提取给定 HTML 标签中的文本

lxml library doesn't extract text in a given html tag when there is another tag with the text

提问人:Minions 提问时间:8/3/2023 最后编辑:Daniel HaleyMinions 更新时间:8/3/2023 访问量:33

问:

我有以下html脚本:

<div>
    <p class="test1"> 
        <i class="empty"> </i> 
        WANTED TEXT 
    </p>
</div>

我想提取标签(WANTED TEXT)的上下文。我的代码:p

from lxml import etree
from io import StringIO
html_parser = etree.HTMLParser()
tmp_xp = "//p[1]"
selected_tag = etree.parse(StringIO("""<div> <p class="test1"> <i class="empty"> </i> WANTED TEXT </p> </div>"""), html_parser).xpath(tmp_xp)
print(selected_tag[0].text)

代码不打印任何内容。如果我移动到标签之前,代码开始正常工作。WANTED TEXT<i>

我该如何解决这个问题?

python html 解析 lxml

评论

1赞 Daniel Haley 8/3/2023
感谢您拥有 MCVE。
0赞 Daniel Haley 8/10/2023
您的问题是否得到充分解答,或者您仍然有问题?
0赞 Minions 8/10/2023
@DanielHaley是的,有人回答了。谢谢!

答:

1赞 Andrej Kesely 8/3/2023 #1

用途:selected_tag[0].itertext()

print("".join(selected_tag[0].itertext()).strip())

指纹:

WANTED TEXT
1赞 Daniel Haley 8/3/2023 #2

不起作用的原因是文本(以及周围的空格)实际上是元素的。.textWANTED TEXT.taili

除了另一个答案中显示的 、 和 之外,您还可以使用普通 XPath ()。.join().itertext().strip()normalize-space()

只需更改:

print(selected_tag[0].text)

自:

print(selected_tag[0].xpath("normalize-space()"))