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

Scrapy中XPath提取节点内href失效仅CSS选择器可用是什么原因

核心问题根因

你遇到的XPath失效问题本质是XPath路径的相对/绝对规则混淆,和CSS选择器的默认查询范围不一致导致的,具体逻辑如下:

  • XPath中以//开头的查询规则,无论你在哪个子选择器(也就是你这里的tmpSEC[0])上调用,默认都会从整个HTML文档的根节点开始全局搜索,所以你拿到的是整个页面第一个<a>标签的href属性,刚好这个值就是/。
  • 而CSS选择器默认的查询范围就是当前子选择器的后代节点,所以你调用tmpSEC[0].css("a::attr(href)")的时候,只会在第一个section节点的后代里找<a>标签,自然能拿到正确结果。
正确的XPath写法

如果要在当前子选择器的后代范围内查询,需要在//前加.代表当前节点:

# 取当前section下所有a标签的href,拿第一个匹配结果
tmpSEC[0].xpath(".//a/@href").get()
# 明确取当前section下第一个a标签的href
tmpSEC[0].xpath("(.//a)[1]/@href").get()

以上两种写法就能拿到和CSS选择器一致的结果。

额外代码修正建议

你提供的爬虫代码里还有两处配置错误,后续运行也会出问题,可以提前修正:

  1. allowed_domains只需要填写域名,不需要带协议、路径,正确写法:allowed_domains = ['tripadvisor.co.uk']
  2. start_urls多了冗余的http://前缀,正确写法:start_urls = ['https://www.tripadvisor.co.uk/Attractions-g186216-Activities-c48-a_allAttractions.true-United_Kingdom.html']

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 09:54:04