亚马逊获取商品评论的API接口

简介: 本文详细介绍如何通过亚马逊Product Advertising API(PAAPI)获取商品评论数据,涵盖API配置、认证签名、Python调用示例及响应解析。适用于开发价格比较、口碑分析等应用,强调合规使用与频率限制。


大家好!今天我将详细介绍如何通过亚马逊的API接口获取商品评论数据。作为一名开发人员,你可能需要这些数据来构建价格比较工具、分析产品口碑或开发推荐系统。亚马逊提供了Product Advertising API (PAAPI) 作为主要接口,支持获取商品信息,包括评论。但请注意,API有严格的使用限制(如频率限制和认证要求),开发者需遵守亚马逊的条款,避免滥用。下面我将逐步指导你完成整个过程,确保内容真实可靠。

  1. API概述
    亚马逊的Product Advertising API (PAAPI) 允许开发者通过RESTful请求获取商品数据。对于评论,PAAPI v5版本支持返回评论摘要、评分和链接,但无法直接获取所有原始评论内容(亚马逊为保护用户隐私,限制了详细数据的访问)。关键功能包括:

操作类型:使用GetItems或SearchItems操作,设置参数来请求评论数据。
响应格式:返回JSON数据,包含评论数、平均评分等。
限制:免费账户每天有少量调用配额(例如5000次),超出需付费;且必须通过认证(AWS签名)。
如果涉及分页计算(如处理大量评论),可用公式表示页数。设总评论数为$n$,每页显示$k$条评论,则总页数$p$为: $$ p = \left\lceil \frac{n}{k} \right\rceil $$ 其中$\lceil \cdot \rceil$表示向上取整函数。实际API调用中,需使用ItemPage参数控制分页。

  1. 前提条件
    在调用API前,需完成以下步骤:

注册开发者账户:
访问亚马逊开发者中心。
创建账户并登录,进入“Product Advertising API”控制台。
获取安全凭证:
生成Access Key ID和Secret Access Key(保存好,勿泄露)。
绑定AWS IAM角色(用于签名认证)。
了解API文档:
参考官方文档:PAAPI v5指南,重点查看ReviewInfo响应组。

  1. 调用API示例(Python代码)
    下面使用Python和requests库演示如何调用API获取商品评论。示例中,我们将获取商品ASIN(亚马逊标准识别号)为B08N5WRWNW(示例商品)的评论摘要。代码包括:

生成AWS签名(基于HMAC-SHA256)。
设置请求参数,如PartnerTag(你的联盟ID)和Resources(指定返回评论字段)。
处理JSON响应。
import requests
import datetime
import hmac
import hashlib
import urllib.parse

配置参数 - 替换为你的凭证

access_key = 'YOUR_ACCESS_KEY'
secret_key = 'YOUR_SECRET_KEY'
partner_tag = 'YOUR_PARTNER_TAG' # 联盟ID
region = 'us-east-1' # API区域
host = 'webservices.amazon.com'
endpoint = '/paapi5/getitems'

生成签名

def generate_signature():

# 生成时间戳和请求参数
amz_date = datetime.datetime.utcnow().strftime('%Y%m%dT%H%M%SZ')
params = {
    'Operation': 'GetItems',
    'ItemIds': ['B08N5WRWNW'],  # 商品ASIN
    'Resources': ['CustomerReviews.Count', 'CustomerReviews.StarRating'],  # 请求评论数据
    'PartnerTag': partner_tag,
    'PartnerType': 'Associates',
    'Marketplace': 'www.amazon.com'
}
# 构建规范请求
canonical_querystring = urllib.parse.urlencode(params, doseq=True)
canonical_request = f'POST\n{endpoint}\n\nhost:{host}\nx-amz-date:{amz_date}\n\nhost;x-amz-date\n{hashlib.sha256(canonical_querystring.encode()).hexdigest()}'
# 计算签名
string_to_sign = f'AWS4-HMAC-SHA256\n{amz_date}\n{datetime.datetime.utcnow().strftime("%Y%m%d")}/{region}/ProductAdvertisingAPI/aws4_request\n{hashlib.sha256(canonical_request.encode()).hexdigest()}'
signing_key = hmac.new(('AWS4' + secret_key).encode(), datetime.datetime.utcnow().strftime("%Y%m%d").encode(), hashlib.sha256).digest()
signing_key = hmac.new(signing_key, region.encode(), hashlib.sha256).digest()
signing_key = hmac.new(signing_key, 'ProductAdvertisingAPI'.encode(), hashlib.sha256).digest()
signing_key = hmac.new(signing_key, 'aws4_request'.encode(), hashlib.sha256).digest()
signature = hmac.new(signing_key, string_to_sign.encode(), hashlib.sha256).hexdigest()
return amz_date, signature, params

发送请求

def get_reviews():
amz_date, signature, params = generate_signature()
headers = {
'Host': host,
'X-Amz-Date': amz_date,
'Authorization': f'AWS4-HMAC-SHA256 Credential={access_key}/{datetime.datetime.utcnow().strftime("%Y%m%d")}/{region}/ProductAdvertisingAPI/aws4_request, SignedHeaders=host;x-amz-date, Signature={signature}',
'Content-Type': 'application/json'
}
url = f'https://{host}{endpoint}'
response = requests.post(url, headers=headers, json=params)
if response.status_code == 200:
return response.json()
else:
raise Exception(f'API调用失败: {response.status_code}, {response.text}')

主函数

if name == 'main':
data = get_reviews()
print("API响应数据:")
print(data)

  1. 解析响应数据
    API响应为JSON格式。关键字段在ItemsResult下:

CustomerReviews.Count:评论总数。
CustomerReviews.StarRating:平均星级(范围1-5)。
CustomerReviews.URL:评论页链接(用于获取详细内容)。
示例解析代码(接续上述Python脚本):

提取评论数据

def parse_reviews(data):
if 'ItemsResult' in data:
item = data['ItemsResult']['Items'][0] # 假设第一个商品
review_count = item.get('CustomerReviews', {}).get('Count', 0)
avg_rating = item.get('CustomerReviews', {}).get('StarRating', 0.0)
review_url = item.get('CustomerReviews', {}).get('URL', '')
print(f"评论总数: {review_count}")
print(f"平均评分: {avg_rating}")
print(f"评论页链接: {review_url}")
else:
print("未找到评论数据")

在main中调用

if name == 'main':
data = get_reviews()
parse_reviews(data)
输出示例:

评论总数: 120
平均评分: 4.5
评论页链接: https://www.amazon.com/product-reviews/B08N5WRWNW

  1. 注意事项
    频率限制:免费账户每日调用上限约5000次。超出可能导致封禁。建议使用指数退避策略重试,计算公式为$ \text{重试间隔} = \text{base} \times 2^{\text{attempt}} $秒(其中$\text{base}$为初始间隔)。
    数据限制:PAAPI不返回完整评论文本,只提供摘要和链接。要获取详细评论,需结合网页爬虫(但需注意robots.txt和政策)。
    认证安全:务必保护Access Key;使用环境变量存储凭证。
    错误处理:常见错误如InvalidParameter(参数错误)或RequestThrottled(超限)。检查响应中的__type字段。
    替代方案:如果PAAPI不满足需求,可考虑亚马逊MWS(针对卖家),但需额外权限。
    结语
    通过亚马逊PAAPI,你可以高效获取商品评论的核心数据,助力你的项目开发。记住,始终遵守API使用条款,并测试代码在沙盒环境。如果你有更多问题(如处理分页或优化请求),欢迎在评论区讨论!

相关文章
|
前端开发 Java 关系型数据库
Springboot公交车路线管理系统 毕业设计-附源码
Springboot公交车路线管理系统 毕业设计-附源码
|
3月前
|
JSON API 数据格式
京东商品评论API秘籍!轻松获取商品评论数据
京东商品评论API是京东开放平台提供的数据接口,支持按商品ID获取评论,具备分页、评分筛选、排序等功能,适用于电商数据分析与用户反馈收集。接口采用HTTPS请求,数据格式为JSON,具备高并发处理能力。附Python请求示例代码,便于开发者快速集成。
软著 | 新版软著申请教程(软著已拿到)
次申请软著是三年前的2020年了,那个时候还是纸质版本的软著申请,需要现在打印材料,然后寄到北京去,后面发现改版了,改成了电子材料上传即可,所以就有了这期教程啦!希望可以帮助到正在申请软著头疼的朋友们!今天刚刚才看到,我的软著申请下来了,还是电子版本的!
1675 1
软著 | 新版软著申请教程(软著已拿到)
|
7月前
|
人工智能 机器人 开发工具
Amazon Nova Act:网页操作全自动!亚马逊黑科技把浏览器变AI机器人,请假/订餐/写邮件一键搞定
Amazon Nova Act是亚马逊AGI实验室推出的通用AI代理系统,通过原子化分解网页操作任务并配合Playwright实现高可靠性浏览器自动化,其配套SDK支持开发者快速构建智能体应用原型。
383 13
Amazon Nova Act:网页操作全自动!亚马逊黑科技把浏览器变AI机器人,请假/订餐/写邮件一键搞定
|
4月前
|
JSON API 开发者
亚马逊商品 API接口,开发者详解与使用指南
亚马逊商品 API 是亚马逊平台为开发者提供的接口,支持获取商品信息、价格、库存、用户评价等数据。主要类型包括 Product Advertising API 和 Selling Partner API,适用于电商数据分析与管理。
|
数据采集 搜索推荐 算法
基于B站视频评论的文本分析,采用包括文本聚类分析、LDA主题分析、网络语义分析
本文通过Python爬虫技术采集B站视频评论数据,利用LDA主题分析、聚类分析和语义网络分析等方法,对评论进行深入的文本分析,挖掘用户评论的主题、情感倾向和语义结构,旨在为商业决策提供支持,优化内容创作和用户满意度。
2363 2
基于B站视频评论的文本分析,采用包括文本聚类分析、LDA主题分析、网络语义分析
|
数据可视化 安全 数据挖掘
streamlit (python构建web)之环境搭建
在微信订阅号中发现了一篇关于Streamlit的文章,激发了我的兴趣。Streamlit是一款专为数据科学家设计的开源Python库,能迅速将数据分析脚本转变为功能完备的Web应用。它简化了开发流程,支持轻松添加交互组件及动态展示图表、图像等,非常适合开发安全扫描工具。Streamlit基于Jupyter Notebook原理,通过Python脚本创建可视化和交互式的Web应用,易于部署分享。安装方法多样,可通过`pip install streamlit`快速安装,或通过Anaconda环境管理依赖。启动示例应用只需运行简单命令,即可体验自带的动画、绘图和数据展示等功能。
1358 1
streamlit (python构建web)之环境搭建
|
消息中间件 缓存 前端开发
Springboot 整合 WebSocket ,使用STOMP协议 ,前后端整合实战 (一)
Springboot 整合 WebSocket ,使用STOMP协议 ,前后端整合实战 (一)
3104 1
Springboot 整合 WebSocket ,使用STOMP协议 ,前后端整合实战 (一)