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

时间:2016-02-05 16:36:19

标签: python html parsing lxml lxml.html

我使用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>。我希望将这些内容作为data'nan'包含在''中。

有关如何执行此操作的任何建议吗?

1 个答案:

答案 0 :(得分:2)

//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