亚马逊多页评论爬取仅返回第一页数据问题求助
亚马逊德国站评论爬取后续页面无数据的原因及解决方法
可能原因
- 反爬机制升级:亚马逊近期大概率更新了反爬策略,之前的静态爬取方式不再适用。比如对请求头的完整性校验更严格,或者后续页面的评论改为AJAX异步加载,静态HTML中不再包含评论数据。
- 分页链接失效:你手动构造的第2-4页URL可能缺少亚马逊新增的临时验证参数(如会话ID、CSRF令牌),服务器直接拒绝返回有效内容。两个月前的分页规则已被废弃。
- 请求触发拦截:即使第一页请求成功,后续请求的频率或特征被判定为爬虫,服务器返回空数据作为拦截响应。
解决方法
- 完善请求头信息:模拟真实浏览器的请求头,从亚马逊德国站的浏览器请求中复制完整的
User-Agent、Accept、Accept-Language、Referer和Cookie字段,替换你当前的headers。示例代码:
import requests from bs4 import BeautifulSoup headers = { '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', 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8', 'Accept-Language': 'de-DE,de;q=0.8,en-US;q=0.5,en;q=0.3', 'Referer': 'https://www.amazon.de/dp/[你的产品ASIN]', 'Cookie': '从浏览器亚马逊站点请求中复制完整Cookie' } url = "https://www.amazon.de/dp/[你的产品ASIN]/ref=cm_cr_arp_d_viewopt_srt?ie=UTF8&reviewerType=all_reviews&sortBy=recent&pageNumber=2" response = requests.get(url, headers=headers) soup = BeautifulSoup(response.text, 'html.parser')
- 动态提取分页链接:不要手动构造分页URL,从第一页的HTML中解析出官方的下一页链接。比如查找包含"${Nächste Seite}"(德语“下一页”)文本的a标签,获取其
href属性拼接成完整URL,保证参数有效性。 - 控制请求频率:在每次请求后添加随机延迟(如
time.sleep(random.uniform(2, 5))),避免短时间内高频请求。如果仍被拦截,尝试使用代理IP轮换,分散请求来源。 - 改用动态渲染工具:如果评论是通过JavaScript动态加载的,使用Selenium或Playwright模拟完整浏览器环境,等待页面渲染完成后再提取评论数据。
- 考虑官方API:如果业务允许,使用亚马逊Product Advertising API合法获取评论数据,从根源上规避反爬限制。
内容的提问来源于stack exchange,提问作者Leon Ranke
相关产品推荐
相关产品推荐

