python - Xpath - 获取 2 个节点,其中 1 个节点如果缺失则具有默认值

标签 python python-2.7 xpath

我在 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/

相关文章:

python - 如何在 Qt Designer 中创建圆形按钮

python - 当指定绝对路径 $/usr/bin/python 与 $ python 别名为相同路径时,如何会产生不同的结果?

Django/Tastypie 图片上传 - 多部分 : None? 中的边界无效

excel - 尝试使用动态下拉菜单在输入框中填充文本

xpath - 如何使用CasperJS和XPath获取元素的HREF值

python - 使用模板中的 Django 模型方法

python - python 上的 Hive Server 2 错误与 hiveserver2 连接

python - 获取 werkzeug.routing.BuildError

python - 如何捕获 Try/Catch Block Python 中的所有异常?

xml - XPath 2.0 - 1.0 等效?