You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何Scrapy中编写的XPath返回大量重复结果?

XPath返回重复结果的原因解析

问题出在XPath路径的写法上:

  • 你先通过response.xpath('//div[@class="quote"]')获取了所有class为quote的div节点集合。
  • 但后续调用result.xpath('//span[@class="text"]/text()')时,开头的//是绝对路径——它会忽略当前的result节点集合,直接从整个HTML文档的根节点重新检索所有符合条件的span标签。也就是说,每遍历一个div节点,就会把页面上所有class为text的span都取一次,最终结果自然会出现大量重复(重复次数等于div节点的数量)。

而CSS选择器默认是基于当前节点做相对查找的,比如result.css('.text::text')会自动在每个div.quote节点的子节点范围内检索,所以结果正常。

要解决这个问题,只需要把第二次的XPath改成相对路径,在开头加上.,表示从当前节点开始向下查找:

result.xpath('.//span[@class="text"]/text()')

这样就能在每个div.quote节点下正确找到对应的span文本,得到无重复的结果。

内容的提问来源于stack exchange,提问作者Edmounds

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 15:15:57