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

Scrapy爬取亚马逊评论报错:Crawled 0 Pages问题求助

亚马逊评论爬虫爬取失败的排查与修复

核心问题分析

出现Crawled 0 pages, scraped 0 item通常是亚马逊反爬机制拦截了请求,或是页面解析逻辑失效,导致爬虫未获取到有效内容。

具体修复方案

1. 添加请求头模拟浏览器访问

亚马逊会识别非浏览器请求,需在项目settings.py中配置请求头与延迟:

USER_AGENT = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36'
DOWNLOAD_DELAY = 2  # 增加下载延迟,降低被封风险

2. 优化链接提取逻辑,增加容错处理

原代码直接提取href属性,若元素不存在会直接报错中断请求,修改parse_see_all_link函数:

def parse_see_all_link(self, response):
    # 先检查目标元素是否存在
    see_all_reviews_link = response.css("a[data-hook=see-all-reviews-link-foot]::attr(href)").get()
    if see_all_reviews_link:
        see_all_reviews_url = urljoin('https://www.amazon.it', see_all_reviews_link)
        yield scrapy.Request(url=see_all_reviews_url, callback=self.parse_reviews, meta={'retry_count': 0})
    else:
        self.logger.warning(f"未找到全量评论链接,页面响应片段:{response.text[:500]}")

3. 增强评论页的反爬应对与解析容错

亚马逊可能返回JS渲染页或验证码页,需增加页面有效性判断,并优化解析逻辑:

def parse_reviews(self, response):
    retry_count = response.meta.get('retry_count', 0)

    # 检查页面是否包含评论容器,判断是否被拦截
    if not response.css("#cm_cr-review_list"):
        if retry_count < 3:
            self.logger.info(f"页面无评论内容,重试第{retry_count+1}次")
            yield scrapy.Request(
                url=response.url,
                callback=self.parse_reviews,
                dont_filter=True,
                meta={'retry_count': retry_count + 1},
                headers={'User-Agent': self.settings.get('USER_AGENT')}
            )
        else:
            self.logger.error(f"多次重试后仍无法获取评论,URL:{response.url}")
        return

    # 提取下一页链接
    next_page_relative_url = response.css(".a-pagination .a-last>a::attr(href)").get()
    if next_page_relative_url:
        next_page = urljoin('https://www.amazon.it/', next_page_relative_url)
        yield scrapy.Request(
            url=next_page,
            callback=self.parse_reviews,
            meta={'retry_count': 0},
            headers={'User-Agent': self.settings.get('USER_AGENT')}
        )

    # 解析评论数据,增加字段容错
    review_elements = response.css("#cm_cr-review_list div.review")
    for review_element in review_elements:
        # 评分提取容错处理
        rating_text = review_element.css("*[data-hook*=review-star-rating] ::text").re_first(r"(\d+\.*\d*) out")
        rating = rating_text if rating_text else None
        
        yield {
            "text": "".join(review_element.css("span[data-hook=review-body] ::text").getall()).strip(),
            "title": review_element.css("*[data-hook=review-title]>span::text").get(),
            "location_and_date": review_element.css("span[data-hook=review-date] ::text").get(),
            "verified": bool(review_element.css("span[data-hook=avp-badge] ::text").get()),
            "rating": rating,
        }

4. 启用Scrapy内置重试与重定向机制

在settings.py中开启相关配置,提升爬虫稳定性:

RETRY_ENABLED = True
RETRY_TIMES = 3
RETRY_HTTP_CODES = [500, 502, 503, 504, 400, 403, 404, 429]
REDIRECT_ENABLED = True

运行验证

修改完成后,执行以下命令启动爬虫并导出CSV:

scrapy crawl amazon_reviews -o reviews.csv

若仍失败,可在settings.py中设置LOG_LEVEL = 'DEBUG'查看详细日志,确认是否遇到验证码或IP拦截,必要时可添加代理IP进一步绕过反爬。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 12:54:56