在只有连续的带有信息标签的情况下,我试图刮擦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不是客户也是如此。我在做什么错了?
答案 0 :(得分:3)
这是因为该Name1的第一个后继兄弟跨度的确等于“(客户)”。
您应该做的是找到随后的第一个兄弟姐妹(*[1]
),并检查该兄弟姐妹是否为span
([self::span]
),如果是,则检查看看它是否等于“(客户)” ...
//a[contains(@href,'ID/') and ./following-sibling::*[1][self::span][text() = '(Customer)']]/text()