在只有连续的带有信息标签的情况下,我试图刮擦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不是客户,这也将返回Name1,Name2和Name4。我究竟做错了什么?
最佳答案
这是因为该Name1的第一个后继兄弟跨度确实等于“(Customer)”。
相反,您应该做的是找到后面的第一个同级(*[1]
),并检查该同级是否为span
([self::span]
),如果是,则检查其是否等于“(Customer) “ ...
//a[contains(@href,'ID/') and ./following-sibling::*[1][self::span][text() = '(Customer)']]/text()
关于xpath - 无法了解XPath sibling 的行为,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57538197/