当前位置: 首页 > ds >正文

亚马逊商品评论爬取与情感分析:Python+BeautifulSoup实战(含防封策略)

一、数据爬取模块(Python示例)

import requests
from bs4 import BeautifulSoup
import pandas as pd
import timeheaders = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36','Accept-Language': 'en-US'
}def scrape_amazon_reviews(product_id, max_pages=5):base_url = f"https://www.amazon.com/product-reviews/{product_id}"reviews = []for page in range(1, max_pages + 1):url = f"{base_url}/?pageNumber={page}"response = requests.get(url, headers=headers)soup = BeautifulSoup(response.text, 'html.parser')for review in soup.find_all('div', {'data-hook': 'review'}):review_data = {'rating': float(review.find('i', {'data-hook': 'review-star-rating'}).text.split()[0]),'title': review.find('a', {'data-hook': 'review-title'}).text.strip(),'body': review.find('span', {'data-hook': 'review-body'}).text.strip(),'date': review.find('span', {'data-hook': 'review-date'}).text}reviews.append(review_data)time.sleep(2)  # 降低请求频率return pd.DataFrame(reviews)

关键点说明

  • 需替换product_id为目标商品ASIN码

  • 通过time.sleep()规避反爬机制

  • 使用data-hook属性精准定位评论元素


二、情感分析模块(NLP示例)

from textblob import TextBlobdef analyze_sentiment(review_text):analysis = TextBlob(review_text)return {'polarity': analysis.sentiment.polarity,  # 情感极性(-1到1)'subjectivity': analysis.sentiment.subjectivity  # 主观性(0到1)}

输出应用

  • 极性>0.3判定为积极评论

  • 极性<-0.3判定为消极评论


三、数据可视化(Matplotlib示例)

import matplotlib.pyplot as pltdef plot_rating_distribution(df):plt.figure(figsize=(8, 4))df['rating'].value_counts().sort_index().plot(kind='bar', color='#FF9900')plt.title('Amazon Review Rating Distribution')plt.xlabel('Star Rating')plt.ylabel('Count')plt.xticks(rotation=0)plt.show()

四、合规性注意事项

  1. 遵守亚马逊Robots协议(检查/robots.txt

  2. 单IP请求频率建议≤2次/秒

  3. 商业用途需申请官方API(MWS或SP-API)

http://www.xdnf.cn/news/10172.html

相关文章:

  • InnoDB引擎逻辑存储结构及架构
  • 【Netty系列】Reactor 模式 2
  • 奇异值分解(SVD):线性代数在AI大模型中的核心工具
  • 使用原生前端技术封装一个组件
  • 面试题 08.08. 有重复字符串的排列组合【 力扣(LeetCode) 】
  • Smith圆图知识学习笔记
  • Linux 文件 IO 性能监控与分析指南
  • QEMU/KVM课程大纲暨学习路线(1)
  • 榕壹云医疗服务系统:基于ThinkPHP+MySQL+UniApp的多门店医疗预约小程序解决方案
  • 算法打卡第11天
  • BKP(备份寄存器)和 RTC(实时时钟)
  • 飞牛fnNAS的Docker应用之迅雷篇
  • leetcode538.把二叉搜索树转换为累加树:反向中序遍历的数值累加之道
  • 半导体厂房设计建造流程、方案和技术要点-江苏泊苏系统集成有限公司
  • 跨平台浏览器集成库JxBrowser 支持 Chrome 扩展程序,高效赋能 Java 桌面应用
  • Apache SeaTunnel 引擎深度解析:原理、技术与高效实践
  • 【Linux 基础知识系列】第四篇-用户与权限管理
  • c/c++的opencv霍夫变换
  • 阻止H5页面中键盘收起的问题
  • CTFSHOW Pwn94 WP
  • [原创](Windows使用技巧): Windwos11如何设置局域网共享访问? (多图详解)
  • 在Linux上安装Docker并配置镜像加速器:从入门到实战
  • PostgreSQL 临时表空间
  • AWS API Gateway 配置WAF(中国区)
  • 《智慧医疗分级评价方法及标准(2025版)》征求意见函全面解读:人工智能医疗应用的评价体系与指南方向
  • 无线通信模块简介
  • 智能流体仿真软件AICFD 2025R1新版本功能介绍
  • 每日c/c++题 备战蓝桥杯(Cantor 表)
  • LangChain实战:MMR和相似性搜索技术应用
  • 【python深度学习】Day 40 训练和测试的规范写法