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

如何用Python和Beautiful Soup抓取亚马逊商品的总客户评论数?

修复亚马逊评论数抓取问题

代码中的明显错误

你代码里有个笔误:sototal_review1应该是total_review1,这个拼写错误会直接引发AttributeError,导致函数返回空值。

调整选择器与抓取逻辑

亚马逊页面结构经常变动,直接依赖class或data-hook的嵌套可能不稳定。推荐两种更可靠的方式:

方式1:直接定位评论数标签

大部分亚马逊商品页面的总评论数会放在带有data-hook="total-review-count"的元素里,直接抓取这个元素的文本即可:

import re

def get_total_review(soup):
    try:
        # 定位总评论数元素
        review_elem = soup.find("span", attrs={'data-hook': 'total-review-count'})
        if not review_elem:
            # 适配中国站页面结构
            review_elem = soup.find("div", attrs={'id': 'averageCustomerReviews'}).find("span", class_="a-size-base a-color-secondary")
        
        # 提取文本并清理非数字字符
        review_text = review_elem.get_text(strip=True)
        # 匹配数字(兼容逗号分隔的格式)
        total_review = re.search(r'[\d,]+', review_text).group().replace(',', '')
    except (AttributeError, ValueError):
        total_review = ""
    return total_review

方式2:从筛选信息区提取

如果仍要从cr-filter-info-section里提取,注意不要用.string(仅当标签无嵌套子元素时有效),改用.get_text()后用正则提取数字:

import re

def get_total_review(soup):
    try:
        filter_section = soup.find("div", attrs={'data-hook': 'cr-filter-info-section'})
        if not filter_section:
            filter_section = soup.find("div", attrs={'id': 'filter-info-section'})
        
        section_text = filter_section.get_text(strip=True)
        # 匹配类似"3,432 条评论"中的数字部分
        total_review = re.search(r'[\d,]+', section_text).group().replace(',', '')
    except (AttributeError, ValueError):
        total_review = ""
    return total_review

额外提示

  • 亚马逊不同站点(美亚、中亚等)的页面结构有差异,建议用浏览器开发者工具(F12)查看目标页面的实际HTML结构,调整选择器。
  • 如果页面是动态加载的(比如滚动后才加载评论区),单纯用BeautifulSoup静态抓取可能无法获取内容,这时候需要结合Selenium等工具模拟浏览器渲染。

内容的提问来源于stack exchange,提问作者Anonymous

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 04:01:41