我在 Python 2.7 中使用 xpath 和 lxml:
from lxml import html
...
tree = html.fromstring(source)
results = tree.xpath(...xpath string...)
现在问题是 xpath 字符串,我在其中迷失了方向。我正在尝试从一条路径获取所有节点,如下所示:
//a[@class="hyperlinkClass"]/span/text() (1)
这部分没有丢失条目,并且效果很好。但我也试图获得与此相关的部分,如下所示:
//a[@class="hyperlinkClass"]/span/following-sibling::div[@class="divClassName"]/span[@class="spanClassName"]/text() (2)
这本身工作得很好,但 (2) 可能有也可能没有 (1) 中每个节点的节点。我想做的是,如果(2)对于每个(1)缺失/为空,则有一个默认值,即“不存在”。这听起来很简单,也许确实如此,但我在这里遇到了困难。
通过执行 '(1) | (2)' 我得到了所需的所有值,但无法匹配它们。如果我这样做 '(1) | concat((2), "absent")',这也不起作用 - concat 似乎在 python 中不起作用,尽管我用 xpath 读到它是有效的。我看到here “贝克尔方法”,但这也不起作用(或者我无法实现)。
希望有人能够阐明如何使其发挥作用,或者是否可行。
最佳答案
不要让事情变得更复杂:
path1 = '//a[@class="hyperlinkClass"]/span'
path2 = './following-sibling::div[@class="divClassName"]/span[@class="spanClassName"]'
for link in tree.xpath(path1):
other_node = link.xpath(path2)
if len(other_node):
print(link.text, other_node[0].text)
else:
print(link.text, 'n/a')
关于python - Xpath - 获取 2 个节点,其中 1 个节点如果缺失则具有默认值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38231990/