HTML 使用 lxml 解析 - 如何在结果列表中保留空内容?

HTML parsing with lxml - how to keep empty content in resulting list?

我正在使用 lxml 解析 html 文件:

from lxml import html

tree = html.parse(myfile)
data = tree.xpath('//p/text()')

我的 html 文件中有 300 个 <p>text</p> 标签,但 len(data) 只有 250 个,因为有时我的 html 中会有 <p></p> .我希望这些作为 'nan'''.

包含在 data

关于如何做到这一点有什么建议吗?

//p/text() 只会找到具有非空文本的 p 元素的文本。

相反,查找所有 p 个元素并为每个元素调用 .text_content()

data = [p.text_content() for p in tree.xpath('//p')]

演示差异:

>>> from lxml import html
>>> 
>>> 
>>> data = """
... <p>text1</p>
... <p></p>
... <p>text2</p>
... """
>>> 
>>> tree = html.fromstring(data)
>>> data = tree.xpath('//p/text()')
>>> len(data)
2
>>> 
>>> data = [p.text_content() for p in tree.xpath('//p')]
>>> len(data)
3