无法了解XPath兄弟姐妹的行为

时间:2019-08-17 16:48:56

标签: xpath scrapy

在只有连续的带有信息标签的情况下,我试图刮擦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不是客户也是如此。我在做什么错了?

1 个答案:

答案 0 :(得分:3)

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

您应该做的是找到随后的第一个兄弟姐妹(*[1]),并检查该兄弟姐妹是否为span[self::span]),如果是,则检查看看它是否等于“(客户)” ...

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