亚马逊评论数据采集的「坑」与生产级解决方案(附 Python 完整爬虫代码)

Python网络爬虫与信息提取(实例讲解) 下面小编就为大家带来一篇Python网络爬虫与信息提取(实例讲解)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧 课程体系结构: 1、Requests框架:自动爬取HTML页面与自动网络请求提交 2、robots.txt:网络爬虫排除标准 3、BeautifulSoup框架:解析HTML页面 4、Re框架:正则框架,提取页面关键信息 5、Scrapy框架:网络爬虫原... 阅读详情

在这里插入图片描述

前言

在进行电商数据分析、舆情监控和 AI Agent 选品大模型预训练时,Amazon 评论数据(amazon customer reviews dataset) 是核心语料。然而,随着防爬系统的升级以及 2024 年底亚马逊对评论页面 /product-reviews/ 实施「登录墙」(未登录一律重定向至登录页),传统的 requests + BeautifulSoup 爬虫已经举步维艰。

本文将从底层防爬机制拆解,分享一段能够小规模运行的 Python 评论爬虫代码,深入剖析其在大规模生产环境下的致命缺陷,并提供企业级、高并发的解决方案。


一、学术数据集与商业快照的现状

当我们在寻找亚马逊评论数据集(Amazon Customer Reviews Dataset)时,通常会遇到以下两种选择:

1. 学术开源数据集(UCSD McAuley Lab)

这是目前科研界最常用、最权威的开源数据集。

  • 规模:2023 年底发布的最新版本包含 571.54M 条评论,覆盖 33 个品类,跨越 1996 年至 2023 年 9 月。
  • 获取渠道:可直接在 Hugging Face 或 AWS S3 上加载。
  • 弊端:
    • 非商用限制:采用 CC BY-NC 4.0 协议,禁止商业化应用。
    • 时效滞后:数据截止至 2023 年 9 月,对于瞬息万变的电商选品和即时差评监控,已经滞后了近三年。
    • 无 Customer Says 摘要:该数据集未收录亚马逊 2023 年底推出的 AI 评论总结(Customer Says)。

2. 商业预打包数据集

Bright Data 等平台提供预装的静态数据集交付。虽然提供商业授权,但依然是静态快照(一般为月度或季度更新),无法支撑实时监控(如监控特定竞品 ASIN 的每日新增负面评价)。


在这里插入图片描述

二、DIY 亚马逊评论爬虫实现

以下是一段基于 requests 和 BeautifulSoup 编写的亚马逊精选评论采集器。该代码仅用于技术原理演示:

"""
Amazon Reviews 基础采集器 — 仅供技术研究使用
警告:由于登录墙与 anti-bot 检测,本脚本成功率较低,不适合商业化生产。
"""

import requests
from bs4 import BeautifulSoup
import time
import random
import json
from dataclasses import dataclass, asdict
from typing import Optional

@dataclass
class Review:
    asin: str
    review_id: str
    title: str
    rating: float
    body: str
    verified: bool
    date: str
    helpful_count: int
    reviewer_name: str

class AmazonReviewScraper:
    BASE_URL = "https://www.amazon.com/dp/{asin}"

    # 尝试模拟普通浏览器的 Header
    HEADERS = {
        "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36",
        "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
        "Accept-Language": "en-US,en;q=0.5",
        "Accept-Encoding": "gzip, deflate, br",
        "Connection": "keep-alive",
        "Upgrade-Insecure-Requests": "1"
    }

    def __init__(self, delay_range=(3, 8)):
        self.session = requests.Session()
        self.session.headers.update(self.HEADERS)
        self.delay_range = delay_range

    def _get_page(self, url: str) -> Optional[BeautifulSoup]:
        try:
            time.sleep(random.uniform(*self.delay_range))
            response = self.session.get(url, timeout=15)
            
            # 检测是否跳转到验证码页或登录页
            if "ap/signin" in response.url:
                print(f"[警告] 触发登录墙,跳转至: {response.url}")
                return None
            if response.status_code == 503:
                print(f"[警告] 503 Service Unavailable,IP已受限")
                return None
            if response.status_code != 200:
                print(f"[错误] HTTP {response.status_code}")
                return None
                
            return BeautifulSoup(response.text, "lxml")
        except Exception as e:
            print(f"[异常] {e}")
            return None

    def scrape_featured_reviews(self, asin: str) -> list[Review]:
        url = self.BASE_URL.format(asin=asin)
        soup = self._get_page(url)
        if not soup:
            return []

        reviews = []
        review_divs = soup.select("[data-hook='review']")
        
        # 兼容备用选择器
        if not review_divs:
            review_divs = soup.select(".review")

        for div in review_divs:
            try:
                review_id = div.get("id", "")
                if not review_id:
                    continue
                
                # 星级评分
                rating_elem = div.select_one("[data-hook='review-star-rating'] span")
                rating_text = rating_elem.get_text() if rating_elem else "0"
                rating = float(rating_text.split()[0]) if rating_text else 0.0

                # 标题与正文
                title = div.select_one("[data-hook='review-title'] span:last-child").get_text(strip=True)
                body = div.select_one("[data-hook='review-body'] span").get_text(strip=True)
                
                # 评论日期
                date = div.select_one("[data-hook='review-date']").get_text(strip=True)
                
                # 购买验证标记
                verified = div.select_one("[data-hook='avp-badge']") is not None
                
                # 觉得有用人数
                helpful_elem = div.select_one("[data-hook='helpful-vote-statement']")
                helpful_text = helpful_elem.get_text(strip=True) if helpful_elem else "0"
                helpful_count = 0
                if "One person" in helpful_text:
                    helpful_count = 1
                elif helpful_text:
                    try:
                        helpful_count = int(helpful_text.split()[0].replace(",", ""))
                    except:
                        pass

                reviewer_name = div.select_one(".a-profile-name").get_text(strip=True)

                reviews.append(Review(
                    asin=asin, review_id=review_id, title=title, rating=rating,
                    body=body, verified=verified, date=date, helpful_count=helpful_count,
                    reviewer_name=reviewer_name
                ))
            except Exception as e:
                print(f"[解析单条失败] {e}")
        return reviews

if __name__ == "__main__":
    scraper = AmazonReviewScraper()
    # 示例 ASIN
    data = scraper.scrape_featured_reviews("B08N5WRWNW")
    print(json.dumps([asdict(r) for r in data], indent=2, ensure_ascii=False))

三、为什么这段代码无法用于大规模生产环境?

当你想把上述脚本用于商业决策或高频任务时,你会在 72 小时内遇到以下瓶颈:

  1. 登录墙拦截(Catastrophic Block):
    亚马逊在 /product-reviews/ 接口上实施了强登录要求。未登录用户只能读取详情页自带的极少数「精选评论」(一般只有 8 条左右)。如果你想通过翻页收集几千条历史评论,该脚本会彻底失效。
  2. TLS/JA3 指纹识别:
    亚马逊使用 Cloudflare/Akamai 或自建的 WAF,会在 TCP/TLS 握手阶段收集你的客户端 JA3 指纹。Python requests 的默认密码套件顺序具有极高的识别性,即使你的 User-Agent 伪装得再逼真,WAF 依然可以直接 503 阻断。
  3. Customer Says AI 摘要缺失:
    现代选品分析高度依赖 Amazon 的 AI 摘要接口,这是通过独立的 GraphQL 异步接口渲染的,单纯抓取 HTML 文档无法拿到该核心字段。
  4. 代理 IP 的天价开销:
    亚马逊对 IP 段的信誉评分非常严格。机房 IP (Datacenter IP) 瞬间被封,迫使你使用昂贵的住宅代理 IP (Residential IP),按流量计费($3-$15/GB)。高并发采集评论页会产生无法承受的代理账单。

在这里插入图片描述

四、生产级选型方案

针对以上痛点,企业级开发中通常会采用专业的代理托管 API,这里以市场上主流的方案做一对比:

维度DIY 爬虫Bright Data APIOxylabs APIPangolinfo Amazon Review API
反反爬维护需专人持续更新指纹与选择器托管维护托管维护托管维护
Customer Says❌ 无法抓取部分支持部分支持✅ 完整支持
实时性❌ 经常被封✅ 实时✅ 实时✅ 分钟级实时
接入成本极高 (研发与调试)较高 ($0.75-3.00/1K)较高 ($0.50-1.35/1K)极低 (按量付费,性价比高)

代码演练:使用 Pangolinfo API 获取完整评论

采用专业 API 后,无需再编写繁琐的选择器,更不需要自己维护复杂的住宅代理池:

import requests

class PangolReviewClient:
    API_URL = "https://api.pangolinfo.com/v1/amazon/reviews"

    def __init__(self, api_key: str):
        self.headers = {
            "Authorization": f"Bearer {api_key}",
            "Content-Type": "application/json"
        }

    def fetch_reviews(self, asin: str, page: int = 1) -> dict:
        payload = {
            "asin": asin,
            "marketplace": "US",
            "page": page,
            "sort_by": "recent"
        }
        response = requests.post(self.API_URL, json=payload, headers=self.headers, timeout=20)
        return response.json()

# 使用示例
if __name__ == "__main__":
    client = PangolReviewClient(api_key="YOUR_API_KEY")
    result = client.fetch_reviews("B08N5WRWNW")
    
    # 打印返回的 AI 摘要
    print("AI Summary (Customer Says):", result.get("customer_says"))
    # 打印第一条评论
    if result.get("reviews"):
        print("First Review:", result["reviews"][0])

Pangolinfo API 屏蔽了底层的验证码突破、TLS 混淆以及登录态模拟,返回已经格式化完毕的 JSON 数据。

对于需要将数据流直接输送给大语言模型或 Dify 工作流的团队,Pangolinfo 还提供了原生的 Amazon Data MCP 协议支持,让 AI Agent 可以免去二次封装,实现分钟级的数据检索。


结论

  1. 纯学术研究:优先选择 UCSD McAuley Lab 开源的数据集,免费、量大,但需做去偏斜处理。
  2. 小规模尝试:可基于 Cpython 使用 curl_cffi 配合动态住宅代理进行实验。
  3. 商业级生产线:自建爬虫团队的研发与代理维护成本远超想象。直接接入类似 Pangolinfo Amazon Review API的托管数据采集解决方案,能够显著降低 TCO(总体拥有成本)并提升系统稳定性。
Python实现通过ASIN爬取亚马逊产品评论 Python实现爬取亚马逊产品评论 一、最近一直在研究爬取亚马逊评论相关的信息,亚马逊的反爬机制还是比较严格的,时不时就封cookie啊封ip啊啥的。而且他们的网页排版相对没有那么规则,所以对我们写爬虫的还是有点困扰的,经过一天的研究现在把成果及心得分享给大家 1.先是我们所需要的库,我们这里是用xpath进行内容匹配,将爬取的内容存入Mysql,所以以下就是我们所需要的库 import rand... 阅读详情

相关推荐

基于Python获取亚马逊的评论信息的处理

本次的亚马逊评论获取就是两个坑,一是评论信息通过的XHR请求方式,二是评论信息的处理。分析之后这次的数据获取还是非常简单的,找到正确的请求方式,稳定的IP代理让你事半功倍,找到信息的共同点进行处理,问题就迎刃而解了。

2301_80241064的博客 2406

带你一步步破解亚马逊 淘宝 京东的反爬虫机制!

事情是这样的 亚马逊是全球最大的购物平台 很多商品信息、用户评价等等都是最丰富的。 今天,手把手带大家,越过亚马逊的反爬虫机制 爬取你想要的商品、评论等等有用信息 反爬虫机制 但是,我们想用爬虫来爬取相关的数据信息时 像亚马逊、TBao、JD这些大型的购物商城 他们为了保护自己的数据信息,都是有一套完善的反爬虫机制的 先试试亚马逊的反爬机制 我们用不同的几个python爬虫模块,来一步步试探 最终,成功越过反爬机制。 一、urllib模块 代码如下: # -*-..

weixin_52994140的博客 6831

RPA-亚马逊商品评论采集。

需求来源:跨境电商客户需要对指定商品的评论进行监控,该应用为上述场景的自动化实现所属行业:电商。

m0_58330836的博客 887

用 Python 3 行代码批量抓取亚马逊review评论

本文介绍如何使用开源 Python SDK reveyes 快速抓取亚马逊商品评论。该工具只需 3 行核心代码即可启动抓取任务,支持全球 20 个亚马逊站点,适用于选品分析、差评监控等场景。文章详细讲解了安装方法、核心概念(异步任务和积分机制)、完整使用流程(提交任务、等待结果、获取数据)以及异常处理。SDK 提供自动翻页、多条件筛选等功能,帮助用户高效获取亚马逊评论数据。

mueam_ym的博客 718

基于Python获取亚马逊的评论

上次亚马逊的商品信息都获取到了,自然要看一下评论的部分。用户的评论能直观的反映当前商品值不值得购买,亚马逊的评分信息也能获取到做一个评分的权重。 亚马逊的评论区由用户ID,评分及评论标题,地区时间,评论正文这几个部分组成,本次获取的内容就是这些。 测试链接:https://www.amazon.it/product-reviews/B08GHGTGQ2/ref=cm_cr_arp_d_paging_btm_14?ie=UTF8&pageNumber=14&a...

CorGi_8456的博客 5071

利用Python爬虫获取亚马逊商品评论的详细指南

通过上述步骤,我们可以构建一个基本的Python爬虫来获取亚马逊商品的评论数据。然而,由于亚马逊的反爬虫策略,实际应用中可能需要更复杂的技术来应对。此外,再次强调,任何数据抓取活动都应遵守相关法律法规和网站政策。希望本文能为你的数据抓取之旅提供一些启发和帮助。

2401_87849163的博客 3400

Amazon评论抓取器开源项目教程

Amazon评论抓取器开源项目教程 项目介绍 亚马逊评论抓取器是一款开源工具,旨在简化从Amazon产品页面抓取用户评论的过程。它允许开发者和市场分析师自动化收集宝贵的客户反馈数据,用于产品分析、市场研究及竞争对手分析。基于Python实现,这个项目由Philippe Remy维护,提供了一个便捷的方式来获取包括评论者姓名、评论文本、评分和日期等在内的详细信息,无需手动导出。 项目快速启动 首先,...

gitblog_01120的博客 971

Python爬虫从入门到实战详细版教程Char01:爬虫基础与核心技术

Python因其简洁语法、丰富库支持和活跃社区,成为网络爬虫开发的首选语言。知识要点:理解爬虫的定义、应用场景及法律边界,熟悉Python生态工具。思考题:如何判断一个网站是否允许爬虫抓取其数据?若爬虫抓取的数据涉及用户隐私,可能面临哪些法律风险?对比Requests和Scrapy的适用场景差异。此章节内容旨在为读者建立爬虫的全局认知,后续章节将逐步深入技术细节。

qq_37360300的博客 3651

【爬虫】基于 Selenium 的 Python 淘宝评论爬取

随着电子商务的发展,消费者评论已经成为购买决策中重要的参考因素之一。如何高效地抓取并分析大量的在线评论,成为了数据分析领域的重要课题。本文将探讨如何使用 Selenium 和 Python 自动化工具抓取网页中的评论数据,并结合技术实现分析过程。我们将详细介绍相关的抓取原理,如何利用 Selenium 库编写 Python 程序来实现这一目标,以及每段代码的详细解析。本篇文章不仅适合初学者学习如何使用 Selenium 进行网页抓取,也对有一定编程经验的读者提供了详细的技

2303_77200324的博客 5907

依靠爬虫获得亚马逊商品评论的实战指南

通过上述步骤,我们可以使用Python编写爬虫程序,从亚马逊网站获取商品评论数据。这个过程包括发送HTTP请求、解析HTML内容、处理分页评论以及异常处理。通过这些步骤,我们可以有效地从亚马逊网站获取商品评论数据,为业务决策提供支持。希望本文能帮助你快速掌握使用Python爬虫获取亚马逊商品评论的方法。在使用爬虫技术时,请务必遵守相关法律法规,合理使用数据。

2401_87195067的博客 1758

Python【爬虫实战】一起一步步分析亚马逊的反爬虫机制

亚马逊是全球最大的购物平台 很多商品信息、用户评价等等都是最丰富的。 今天,手把手带大家,越过亚马逊的反爬虫机制 爬取你想要的商品、评论等等有用信息 反爬虫机制 但是,我们想用爬虫来爬取相关的数据信息时 像亚马逊、TBao、JD这些大型的购物商城 他们为了保护自己的数据信息,都是有一套完善的反爬虫机制的 先试试亚马逊的反爬机制 我们用不同的几个python爬虫模块,来一步步试探 最终,成功越过反爬机制。 一、urllib模块 代码如下: # -*- coding:utf-8

Yuki1127918的博客 4644

这4个数据采集工具支持低代码爬虫

总得来说,对于代码能力不强的童鞋来说,现成的爬虫软件是比较好的选择,直接图形化界面点点点,能避免很多麻烦。而且要主要遵守各网站的规则协议,不能获取非合理数据,这个是底线。

分享Python、数据分析、人工智能前沿知识 2808

Python爬虫:如何抓取亚马逊商品评论和评分

通过本文的学习,您已经掌握了如何使用Selenium爬取亚马逊商品的评论数据,并处理反爬虫机制。特别是在亚马逊这样的大型电商平台,商品评论和评分不仅能够反映产品的质量和顾客的体验,还可以对商家进行竞争分析。通过爬取亚马逊的商品评论,您可以获得有价值的市场信息,如产品的优缺点、消费者的反馈等。通过查看源代码,您可以发现,亚马逊的商品评论和评分数据往往通过JavaScript动态加载,这也意味着在抓取时需要使用Selenium或Playwright等工具来模拟浏览器加载。亚马逊的评论页面支持分页加载。

2201_76125261的博客 1437

【愚公系列】《Python网络爬虫从入门到精通》001-初识网络爬虫

随着互联网的快速发展,数据的获取与处理变得愈发重要。在这个信息爆炸的时代,如何有效地收集和利用网络上的海量数据,成为了各行业面临的一大挑战。网络爬虫,作为一种自动化获取网页信息的技术,正逐渐成为数据分析、市场研究、竞争对手监控等领域不可或缺的工具。本文将带领读者初步了解网络爬虫的基本概念、工作原理以及常见应用场景。我们将探讨爬虫的构建过程,包括如何发送请求、解析网页、存储数据等关键步骤。同时,还会涉及一些爬虫开发中的注意事项,如如何遵循网站的robots.txt协议、避免被封禁等。

愚公智库 12万+

亚马逊爬虫

参数类型描述示例limitinteger限制每个输入返回的结果数量。limit=10boolean在输出中包含错误报告以便排查问题。notifyurl数据收集完成后发送通知的 URL。formatenum数据交付的格式。支持的格式:JSON、NDJSON、JSONL、CSV。💡数据可以通过Webhook或API提供。

亮数据 Bright Data 的博客 2077

SPD5 集线器协议内容解析

​ 若不同SPD5 Hub后面的本地侧设备同时发送请求,则是22和23、24的混合过程,先通过LID裁决,再通过HID裁决,这里的LID是本地设备的,若LID一致,则看HID,由于SPD5 Hub的本地侧设备HID均为111,因此实际上是比较SPD5 Hub的HID,这个过程在前文提到,SPD5 Hub会转换HID。​ 若MR27[4]=1且MR27[3:0]=1,如果MR51[3:0]=1时,发送IBI,并且MR48[7]置1,将GETSTATUS CCC的待处理中断位[3:0]更新为0001。

weixin_50591344的博客 3860

Amazon评论数据采集终极指南:技术选型、代码实现、代理配置与合规性分析

通过本文的深入分析,我们可以看到Amazon评论爬虫技术正在经历重要的演进过程。传统的Python爬取亚马逊评论方法虽然仍有一定价值,但面临着越来越多的技术和政策挑战。传统方法的局限性总结:技术壁垒日益提高:亚马逊的反爬虫机制不断升级,包括更复杂的验证码系统、行为分析算法和IP封禁策略。数据获取限制加强:完整评论数据需要登录访问,匿名用户只能获取有限的评论信息。维护成本持续上升:自建爬虫系统需要不断更新以应对平台政策变化,技术维护成本高昂。合规风险增加。

devnullcoffee的博客 2566

Abaqus SIGTERM/SIGINT中断问题深度解析与实战解决方案

本文深度解析Abaqus仿真计算中因SIGTERM或SIGINT信号导致作业意外终止的常见问题。核心原因常为许可证管理器因网络通信延迟误判进程空闲而强制断开,或系统资源监控工具的误杀。文章提供了从命令行参数调优(如使用int、ask_delete=OFF)、计算环境隔离到编写自动化容错脚本的完整实战解决方案,帮助用户彻底规避此类中断,确保长时间仿真任务的稳定运行。

weixin_29279101的博客 410

【MOOC昊天】Python网络爬虫与信息提取 课件+代码(全)

@TOC 【第O周】网络爬虫之前奏 【第一周】网络爬虫之规则 单元1:Requests库入门 import requests r = requests.get("http://www.baidu.com") print( r.status_code, #请求状态码,200访问成功, type(r), r.headers, sep='\n') 200 <class ‘requests.models.Response’> {‘Cache-Con

algae 9157

SOUL.md 人格定制的 7 个高阶技巧:Hermes Agent 精准控制 AI 行为模式

揭示 SOUL.md 的本质是行为契约而非人格设定,介绍7个围绕边界约束的高阶技巧,包括用上下文锚点(INPUT SCOPE/OUTPUT TARGET/CONSTRAINTS)替代角色描述、动态渲染锚点适配CI流程等,显著降低token消耗与人工review耗时。

weixin_42520239的博客 251

《Autosar_MCAL高阶配置》总目录_培训教程持续更新中...

《Autosar_MCAL高阶配置》总目录_培训教程持续更新中...

「汽车电子助手」的博客 1万+
上一篇: 亚马逊差评数据分析实战:用 Python 从 8,600 条竞品差评中挖掘选品机会
下一篇: 亚马逊 Top Reviewer 数据采集技术详解:badge 字段识别、reviewer_rank 提取与加权分析 Python 实战
devnullcoffee
博客等级 码龄1年 165粉丝 107原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值