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

Scrapy中XPath获取@href返回异常值问题求助

解决Tripadvisor餐厅链接爬取异常问题

问题分析

  • .b是Tripadvisor动态生成的混淆类名,页面加载后类名会变化,导致你的CSS选择器直接失效。
  • 你当前的XPath选中的是单条评论的跳转链接(ShowUserReviews开头),而非餐厅主页的链接(Restaurant_Review开头)——因为路径指向了列表项内的评论预览模块,而非餐厅名称的跳转标签。

解决方案

1. 定位正确的餐厅主页链接

餐厅主页链接的a标签满足两个特征:包含在data-test="1_list_item"的列表项中,且href以/Restaurant_Review开头。可以用以下两种方式获取:

方式一:XPath
# 获取全部30个餐厅主页链接
restaurant_links = response.xpath('//div[@data-test="1_list_item"]//a[starts-with(@href, "/Restaurant_Review")]/@href').extract()
方式二:CSS选择器
# 获取全部30个餐厅主页链接
restaurant_links = response.css('div[data-test="1_list_item"] a[href^="/Restaurant_Review"]::attr(href)').extract()

2. 验证效果

以上两种方法返回的链接格式均为/Restaurant_Review-g187791-dXXXXXX-Reviews-XXXXXX-Rome_Lazio.html,完全符合你的预期。

3. 错误原因复盘

你之前的XPath路径//div[@data-test='1_list_item']/div/div[2]/div[1]/div//a/@href,实际指向了列表项里的评论预览区域,该区域的a标签是单条用户评论的跳转链接,因此拿到的是ShowUserReviews开头的地址。

额外爬取提示

Tripadvisor有反爬机制,爬取时注意:

  • 在settings.py中设置合理的DOWNLOAD_DELAY(如2-3秒)
  • 使用随机User-Agent
  • 避免短时间内频繁请求同一页面

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 13:00:02