Amazon商品爬虫数据异常求助(BeautifulSoup+Requests)
Amazon商品评论爬取问题排查与解决方案
问题原因
- 用户名抓取范围错误:
a-profile-name类的span标签并非评论区专属,页面其他区域(如商品问答板块、顶部推荐用户栏)也会使用该类,再加上部分评论会重复显示用户名(比如评论头像旁和内容区),甚至包含页面加载的冗余元素,导致抓取到的数量偏多、出现重复和不存在的用户名。 - 评论标题抓取逻辑不全:部分评论可能没有标题,或者Amazon对无标题评论使用了
span而非a标签承载标题;另外直接用requests.get请求可能被Amazon反爬机制识别,返回不完整页面,也会导致标题缺失。
解决方案
核心思路
先定位到单个评论的独立容器,再在容器内抓取对应信息,同时添加请求头模拟浏览器访问,避免反爬拦截。
完整可运行代码
from bs4 import BeautifulSoup import requests product_url = 'https://www.amazon.com/Modern-Natural-Branch-Scratching-Lifestyle/dp/B07X1T4G5T/ref=cm_cr_arp_d_product_top?ie=UTF8&th=1' # 替换成你自己的浏览器User-Agent(可从浏览器F12开发者工具的Network面板获取) 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-Language': 'en-US,en;q=0.9' } response = requests.get(product_url, headers=headers) response.raise_for_status() # 确保请求成功,失败则抛出异常 soup = BeautifulSoup(response.text, 'html.parser') # 精准定位每条评论的容器,所有评论数据都在这个容器内 review_boxes = soup.find_all('div', {'data-hook': 'review'}) review_data = [] for box in review_boxes: # 抓取用户名:只取当前评论容器内的第一个a-profile-name username = box.find('span', class_='a-profile-name').text.strip() if box.find('span', class_='a-profile-name') else '匿名用户' # 抓取评论标题:兼容a标签和span标签的情况,处理无标题评论 title_tag = box.find('a', {'data-hook': 'review-title'}) or box.find('span', {'data-hook': 'review-title'}) title = title_tag.text.strip() if title_tag else '无标题' # 抓取评论描述 desc = box.find('span', {'data-hook': 'review-body'}).text.strip() if box.find('span', {'data-hook': 'review-body'}) else '无描述' review_data.append({ '用户名': username, '评论标题': title, '评论描述': desc }) # 输出结果 print(f"有效评论数:{len(review_data)}") for i, item in enumerate(review_data, 1): print(f"\n第{i}条:") print(f"用户名:{item['用户名']}") print(f"标题:{item['评论标题']}") print(f"描述:{item['评论描述']}")
关键优化点
- 限定抓取范围:通过
div[data-hook="review"]锁定单条评论的容器,确保所有元素都属于当前评论,彻底解决数据不一致问题。 - 兼容无标题场景:同时检查
a和span标签的data-hook="review-title",避免遗漏无标题评论。 - 反爬规避:添加真实的User-Agent,模拟正常浏览器访问,确保获取完整页面内容。
- 容错处理:对每个元素做存在性判断,避免因单个元素缺失导致代码崩溃。
内容的提问来源于stack exchange,提问作者ml ds
相关产品推荐
相关产品推荐

