【问题标题】:xpath how to get text when the brother is not an element当兄弟不是元素时xpath如何获取文本
【发布时间】:2015-02-09 09:52:00
【问题描述】:

我曾经有过这种形式;

<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

【问题讨论】:

    标签: python xpath scrapy


    【解决方案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]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-02
      • 2020-03-31
      • 2019-10-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多