<td></td><td>foo</td>
我想返回
['', 'foo']
但 libxml 的 xpath //td/text()
仅返回 ['foo']
。如何找到空标签为 ''
而不是(不匹配)?
虽然@Tomalak 是完全正确的,但在 XPath 2.0 中可以使用:
//td/string(.)
这会产生一系列字符串——每个字符串都包含相应
td
元素的字符串值。
因此,在您的情况下,结果将是所需的结果:
"", "foo"
只要您专门选择文本节点,就不能。因为第一个
<td>
中根本没有文本节点。
当您将 XPath 表达式更改为
'//td'
时,您将获得两个 <td>
节点。在进一步处理中使用它们的文本值。
# pip install parsel
from parsel import Selector
html = """
<td>foo</td>
<td></td>
"""
root = selector = Selector(text=html)
tds = selector.xpath('//td').xpath('string(.)')
for td in tds:
if td.root == '':
print('null')
else:
print(td.root)
# output
foo
null