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

Python中访问XPath返回的选择器数组 始终获取第一个元素问题

问题原因

在子选择器下使用//开头的XPath路径时,默认从整个文档的根节点开始检索,不会限定在当前选中的节点范围内,因此每次调用.xpath()方法都会返回全文档第一个匹配的结果,和当前遍历到的节点无关。

解决方法

在XPath路径开头加.,明确限定检索范围为当前节点的子节点,正确的遍历代码如下:

# 拉取所有店铺节点到数组中
selectors = response.xpath('//div[@class="shop"]')
# 遍历所有节点
for selector in selectors:
    href = selector.xpath('.//a[@class="name"]/@href').extract_first()
    # 后续业务逻辑

查询结果不一致说明

你测试的两个查询结果不匹配的原因:

  • 执行selectors[7].xpath('//a[@class="name"]/@href').extract_first()时,//忽略了当前第8个shop节点的上下文,直接返回全文档第一个匹配的a标签属性
  • 执行response.xpath('//div[@class="shop"][8]//a[@class="name"]/@href').extract_first()时,XPath路径本身限定了先匹配第8个shop节点再检索子节点,因此可以得到对应节点的正确结果

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 12:06:02