xpath如何在兄弟不是元素时获取文本

时间:2015-02-09 01:12:36

标签: python xpath scrapy

我曾经有这种形式;

<li>
    <span>name:</span>
    <p>Seca </p>
</li>

我正在使用此xpath来获取seca

ul/li/span[normalize-space(text())='name:']/following-sibling::p[1]/text())

一切都很好。

现在我没有p标签。所以我就是这样:

<li>
    <span>name:</span>
    Seca
</li>

我应该对我的代码进行哪些编辑才能获得seca现在好吗?

1 个答案:

答案 0 :(得分:1)

现在,“Seca”只是li元素的另一个子元素 - 因此是span元素的后续兄弟。使用

//ul/li/span[normalize-space(text())='name:']/following-sibling::text()

给你

[EMPTY LINE]
Seca
[EMPTY LINE]

您可能希望排除那些仅限空格的行:

normalize-space(//ul/li/span[normalize-space(text())='name:']/following-sibling::text())

,结果将是

Seca

如果您的实际输入包含更多文本节点,请不要忘记将[1]添加到表达式中。


请注意,如果实际上没有理由规范化span的文本内容并仅考虑其直接子文本节点,则表达式可以更容易:

//ul/li[span='name:']/text()[2]