【问题标题】:Unable to understand XPath siblings behaviour无法理解 XPath 同级行为
【发布时间】:2019-12-23 13:53:33
【问题描述】:

我正在尝试在只有连续标签的情况下抓取 HTML 页面。

我想从以下代码中获取标签的文本(例如 Name1、Name2、...),并考虑到:

"a" 后跟 "span" 提供有关该 ID 是否为客户的信息。

“a”后跟“a”表示ID是匿名的。

<span class="list">
    <em>List 1:</em>
</span>
<a href="/ID/423006">Name1</a>, 
<a href="/ID/115325">Name2</a>
<span class="small">(Customer)</span>, 
<a href="/ID/248819">Name3</a>
<span class="small">(Non Customer)</span>, 
<a href="/ID/658259">Name4</a>
<span class="small">(Customer)</span>, 
<a href="/ID/294083">Name5</a>
<a href="/ID/218292">Name6</a>
<span class="small">(Non Customer)</span>

我正在使用以下 XPATH 来尝试匹配“a”后跟“span”

//a[包含(@href,'ID/') 和 ./following-sibling::span[1][text() = '(Customer)']]/text()

这将返回 Name1、Name2 和 Name4,即使 Name1 不是客户。我做错了什么?

【问题讨论】:

    标签: xpath scrapy


    【解决方案1】:

    这是因为 Name1 的第一个后续兄弟跨度确实等于“(客户)”。

    你应该做的是找到第一个后续兄弟 (*[1]) 并检查该兄弟是否是 span ([self::span]),如果是,然后检查它是否等于 " (客户)”...

    //a[contains(@href,'ID/') and ./following-sibling::*[1][self::span][text() = '(Customer)']]/text()
    

    【讨论】:

      猜你喜欢
      • 2010-12-14
      • 1970-01-01
      • 1970-01-01
      • 2012-11-07
      • 2020-01-02
      • 2019-11-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多