如何用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
相关产品推荐
相关产品推荐

