我使用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'
包含在''
中。
有关如何执行此操作的任何建议吗?
答案 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