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

Scrapy爬取TripAdvisor餐厅数据分页不生效该如何排查?

Scrapy爬取TripAdvisor分页失效问题解决方案

核心错误点

  • 分页链接语法错误:('http://tripadvisor.com' + response.css('a.nav').attrib['href']).extract() 写法不符合Scrapy语法规则,attrib['href'] 获取到的结果已经是字符串类型,不存在extract()方法,运行会直接抛出异常,导致分页逻辑直接终止。
  • 选择器匹配不准确:使用a.nav作为选择器会匹配到所有分页导航链接,无法保证取到的是「下一页」对应的地址,很容易拿到错误的分页链接。
  • 协议拼接错误:手动拼接的域名使用http,而TripAdvisor全站已启用https,会触发重定向甚至请求失败。
  • 多余的手动域名拼接:Scrapy的response.follow()原生支持相对路径,不需要手动拼接域名,完全可以避免拼接出错的问题。

修复后的完整代码

import scrapy

class TripadvSpider(scrapy.Spider):
    name = 'tripadv'
    allowed_domains = ['tripadvisor.com']
    start_urls = ['https://www.tripadvisor.com/Restaurants-g60795-oa0-Philadelphia_Pennsylvania.html#EATERY_LIST_CONTENTS']
    def parse(self, response):
        for stores in response.css('div.emrzT'):
            yield {
                # 替换extract()为get(),获取单个字符串而非列表格式的结果
                'name' : stores.css('a.bHGqj::text').get(),
                'link' : stores.css('a.bHGqj').xpath("@href").get()
            }
        # 直接匹配带Next文本的下一页按钮,获取href属性
        next_page = response.xpath('//a[contains(text(), "Next")]/@href').get()
        # next_page不为空时自动跟进请求,不需要手动拼接域名
        if next_page:
            yield response.follow(next_page, callback=self.parse)

额外注意点

如果运行后还是取不到下一页链接,大概率是TripAdvisor的页面元素类名、文本规则发生了更新,打开浏览器控制台核对下一页按钮的元素属性,调整对应选择器即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 00:57:03