如果没有文本数据,xpath 是否有可能返回 NULL?

too*_*hed 5 xpath

我目前正在尝试从表中提取所有数据。表数据行的格式设置为<td headers="h1" align="left"></td>没有数据时。

使用库中的etree.tostring()方法lxml打印出这些元素<td headers="h1" align="left"/>而不是源格式。

此外,xpath如果我运行代码tree.path('//td[@headers="h1"]/text()'),结果列表不包含没有数据的空白值。

当我尝试将这些结果写入 CSV 文件时,如何包含 NULL,即""当没有数据时?

ale*_*cxe 2

一种解决方法是使用//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"]')]
Run Code Online (Sandbox Code Playgroud)

印刷:

[None, 'Text1', None, 'Text2', None]
Run Code Online (Sandbox Code Playgroud)

如果您想要空字符串而不是None

print [element.text if element.text is not None else ''
       for element in tree.xpath('//td[@headers="h1"]')]
Run Code Online (Sandbox Code Playgroud)

会打印:

['', 'Text1', '', 'Text2', '']
Run Code Online (Sandbox Code Playgroud)

另请参阅:如何在 XPath 中为空节点的 text() 返回 ''?