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

Amazon商品爬虫数据异常求助(BeautifulSoup+Requests)

Amazon商品评论爬取问题排查与解决方案

问题原因

  1. 用户名抓取范围错误:a-profile-name类的span标签并非评论区专属,页面其他区域(如商品问答板块、顶部推荐用户栏)也会使用该类,再加上部分评论会重复显示用户名(比如评论头像旁和内容区),甚至包含页面加载的冗余元素,导致抓取到的数量偏多、出现重复和不存在的用户名。
  2. 评论标题抓取逻辑不全:部分评论可能没有标题,或者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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 11:57:28