我目前正试图从表中提取所有数据。当没有数据时,表数据行格式为<td headers="h1" align="left"></td>
。
使用lxml
库中的etree.tostring()
方法将这些元素打印为<td headers="h1" align="left"/>
,而不是源格式。
此外,使用xpath
,如果我运行代码tree.path('//td[@headers="h1"]/text()')
,结果列表不包括没有数据的空白值。
当我试图将这些结果写入CSV文件时,我如何包含NULL,即没有数据的""
?
一种解决方法是使用//td[@headers="h1"]
xpath获取元素,然后获取每个元素的.text
属性:
from lxml import etree
data = """
<table>
<tr>
<td headers="h1" align="left"></td>
<td headers="h1" align="left">Text1</td>
<td headers="h1" align="left"/>
<td headers="h1" align="left">Text2</td>
<td headers="h1" align="left"></td>
</tr>
</table>
"""
tree = etree.fromstring(data)
print [element.text for element in tree.xpath('//td[@headers="h1"]')]
打印:
[None, 'Text1', None, 'Text2', None]
如果您想要空字符串而不是None
:
print [element.text if element.text is not None else ''
for element in tree.xpath('//td[@headers="h1"]')]
打印:
['', 'Text1', '', 'Text2', '']
参见:如何返回''查找XPath中的空节点's text() ?