一、前言:电商人做竞品口碑的痛点
做淘宝、天猫运营、产品调研、竞品分析的从业者,几乎每天都要面对商品评价数据:
- 手动采集效率极低:竞品多、商品量大,人工翻页复制评论,一天只能处理 2-3 款产品,数据严重滞后;
- 平台风控限制爬虫:自研 Selenium、异步爬取极易被限制访问,还要维护代理池、Cookie,维护成本极高;
- 数据无结构化:复制下来的评论杂乱无章,无法快速区分好评、差评、追评、图文评价,难以做批量统计;
- 缺少实时监控能力:新品差评爆发、批量负面反馈出现后,商家往往滞后数天才发现,错失售后补救、产品优化时机。
本文给大家一套轻量化落地方案,借助 OpenClaw 数据采集能力,零复杂爬虫开发,仅通过几十行 Python 代码,实现商品评价全量自动拉取、定时增量监控、文本情感分析、痛点关键词提取完整流程,数据可落地存储 Excel/MySQL,适合个人运营、中小商家、数据分析师直接复用。
二、方案核心优势
- 无需自研爬虫,规避平台反拦截 底层封装成熟数据通道,不用处理页面动态渲染、滑块验证、访问限流,输入商品 ID 即可稳定拉取全维度评价数据,包含评价正文、星级、购买 SKU、晒图、追评、评价时间、买家昵称等完整字段。
- 支持增量实时监控 可自定义定时轮询周期(小时 / 天),只抓取新增评价,避免重复拉取历史数据,7×24 小时监控竞品口碑异动。
- 一站式数据清洗 + 智能分析 配套文本处理逻辑,自动过滤刷单无效评价、空白内容,结合文本情感库自动区分正向 / 负向评价,统计差评高频问题,输出可视化口碑报表。
- 低开发门槛 Python 基础语法即可运行,配置专属访问密钥后直接调用,支持批量商品同时监控,适配选品调研、店铺舆情、竞品对标等多场景。
三、前期准备工作
1. 工具账号开通
注册 完成实名后获取专属访问密钥(后续代码中替换KEY参数),支持海外手机号注册登录,无国内号码也可正常使用。
2. 环境依赖安装
本地 Python3.8 及以上环境,执行命令安装所需第三方库:
pip install requests snownlp pandas openpyxl apscheduler
- requests:网络请求拉取评价数据
- snownlp:中文评论情感分析
- pandas:数据清洗、导出 Excel 报表
- apscheduler:定时任务,实现自动化监控
- openpyxl:Excel 文件读写依赖
3. 获取目标商品 ID
打开淘宝商品详情页,链接中id=后一串纯数字即为商品编号,例如item.taobao.com/item.htm?id=723456123456,商品 ID 为723456123456。
四、完整实战代码实现
4.1 全局配置与基础请求封装
新建review_monitor.py文件,封装基础数据拉取函数,统一处理分页、异常重试、数据格式化:
import requests
import json
import time
import pandas as pd
from snownlp import SnowNLP
from apscheduler.schedulers.background import BackgroundScheduler
# ===================== 配置区(自行修改) =====================
# OpenClaw后台获取的专属密钥
ACCESS_KEY = "你的专属密钥"
# 需要监控的商品ID列表,可批量添加多个商品
MONITOR_ITEM_IDS = ["723456123456", "698765432100"]
# 单次请求每页数据条数
PAGE_SIZE = 20
# 定时监控间隔,单位:小时(每2小时抓取一次新增评价)
MONITOR_INTERVAL = 2
# 本地存储文件路径
SAVE_EXCEL_PATH = "./商品评价监控报表.xlsx"
# ===========================================================
# 全局请求会话,自动重试
session = requests.Session()
retry_strategy = requests.adapters.Retry(
total=3, backoff_factor=1, status_forcelist=[500, 502, 503, 429]
)
session.mount("https://", requests.adapters.HTTPAdapter(max_retries=retry_strategy))
def fetch_item_review(item_id: str, page: int = 1):
"""
拉取单页商品评价数据
:param item_id: 商品数字ID
:param page: 分页页码
:return: 结构化评价列表、总评价数量
"""
params = {
"key": ACCESS_KEY,
"item_id": item_id,
"page": page,
"page_size": PAGE_SIZE,
"sort": "create_time_desc" # 按评价时间倒序,优先获取最新评价
}
# 底层数据请求地址
base_url = "对应数据服务地址"
try:
resp = session.get(base_url, params=params, timeout=15)
resp_data = resp.json()
if resp_data.get("code") != 200:
print(f"商品{item_id}第{page}页请求失败:{resp_data.get('msg')}")
return [], 0
review_list = resp_data.get("data", {}).get("review_list", [])
total_count = resp_data.get("data", {}).get("total", 0)
return review_list, total_count
except Exception as e:
print(f"网络请求异常:{str(e)}")
return [], 0
4.2 数据清洗 + 情感分析函数
对原始评价文本做清洗、情感打分,自动标记好评 / 中评 / 差评:
def text_sentiment_analysis(content: str):
"""评论情感分析,返回情感标签、情感分数"""
if not content or len(content.strip()) < 2:
return "无效评价", 0.5
s = SnowNLP(content)
score = s.sentiments
if score >= 0.7:
label = "好评"
elif score >= 0.4:
label = "中评"
else:
label = "差评"
return label, round(score, 2)
def parse_raw_review(raw_list: list, item_id: str):
"""原始数据结构化清洗"""
clean_data = []
for item in raw_list:
content = item.get("content", "")
sentiment_label, sentiment_score = text_sentiment_analysis(content)
row = {
"商品ID": item_id,
"评价ID": item.get("review_id", ""),
"评价时间": item.get("create_time", ""),
"买家昵称": item.get("nick", ""),
"购买规格SKU": item.get("sku_name", ""),
"评价正文": content,
"星级评分": item.get("rate", 5),
"是否晒图": 1 if item.get("pic_urls") else 0,
"是否追评": 1 if item.get("add_review") else 0,
"情感标签": sentiment_label,
"情感分数": sentiment_score
}
clean_data.append(row)
return clean_data
4.3 全量拉取 + 本地存储核心逻辑
循环分页抓取所有评价,合并历史数据去重,导出 Excel 报表:
def crawl_all_reviews(item_id: str):
"""单商品全量评价抓取"""
all_clean_reviews = []
page = 1
while True:
raw_data, total = fetch_item_review(item_id, page)
if not raw_data:
break
clean_rows = parse_raw_review(raw_data, item_id)
all_clean_reviews.extend(clean_rows)
# 当前页数据不足分页大小,说明已抓取完毕
if len(raw_data) < PAGE_SIZE:
break
page += 1
time.sleep(1) # 分页间隔防限流
print(f"商品{item_id}抓取完成,本次获取{len(all_clean_reviews)}条评价")
return all_clean_reviews
def save_to_excel(new_data: list):
"""合并新旧数据,去重后保存Excel"""
new_df = pd.DataFrame(new_data)
try:
# 读取历史报表
old_df = pd.read_excel(SAVE_EXCEL_PATH)
merge_df = pd.concat([old_df, new_df], ignore_index=True)
# 根据评价ID去重,保留最新数据
merge_df = merge_df.drop_duplicates(subset=["评价ID"], keep="last")
except FileNotFoundError:
# 文件不存在则新建
merge_df = new_df
# 按评价时间倒序排序
merge_df = merge_df.sort_values(by="评价时间", ascending=False)
merge_df.to_excel(SAVE_EXCEL_PATH, index=False)
print(f"数据已更新至本地报表,当前总数据量:{len(merge_df)}条")
4.4 定时监控任务入口
开启后台定时任务,自动循环监控所有目标商品:
def monitor_task():
"""定时执行的监控任务"""
total_new_data = []
for goods_id in MONITOR_ITEM_IDS:
review_data = crawl_all_reviews(goods_id)
total_new_data.extend(review_data)
if total_new_data:
save_to_excel(total_new_data)
# 简易预警:检测新增差评,打印提醒
bad_comments = [i for i in total_new_data if i["情感标签"] == "差评"]
if bad_comments:
print(f"⚠️ 检测到新增{len(bad_comments)}条差评,请及时查看!")
for bad in bad_comments[:3]:
print(f"【差评预警】{bad['评价时间']} | {bad['评价正文'][:60]}")
if __name__ == "__main__":
# 首次运行立即抓取一次全量数据
monitor_task()
# 启动定时调度器
scheduler = BackgroundScheduler()
scheduler.add_job(monitor_task, "interval", hours=MONITOR_INTERVAL)
scheduler.start()
print(f"自动监控已启动,每{MONITOR_INTERVAL}小时自动抓取一次评价数据...")
try:
while True:
time.sleep(3600)
except KeyboardInterrupt:
scheduler.shutdown()
print("监控任务已停止")
五、代码功能拆解与业务落地说明
1. 增量监控与去重机制
每次抓取完成后,脚本会读取本地历史 Excel 文件,通过评价ID唯一标识自动剔除重复数据,仅保留最新新增评价,大幅减少重复存储、重复分析的资源消耗。
2. 差评自动预警逻辑
每次抓取结束自动筛选新增差评并打印控制台提醒,可二次扩展:接入钉钉 / 企业微信机器人,差评实时推送工作群,实现舆情快速响应。
3. 多维度数据分析扩展思路
基于导出的 Excel 结构化数据,可快速完成以下分析工作:
- 痛点词统计:使用 jieba 分词拆分差评文本,统计 "发货慢""材质差""尺寸不符" 等高频负面词汇,指导产品优化;
- 竞品口碑对标:多商品同时监控,对比同款产品好评率、差评类型,找到自身差异化优势;
- 时间趋势分析:按日期分组统计每日评价数量、差评占比,判断活动、上新后的口碑波动;
- 图文评价专项分析:筛选带晒图评价,分析买家实拍反馈,优化商品主图、详情页。
4. 数据库存储改造(进阶)
如果需要长期海量存储,可替换save_to_excel函数,接入 MySQL 存储数据,示例核心写入逻辑:
import pymysql
def save_to_mysql(data_list):
conn = pymysql.connect(host="127.0.0.1", user="root", password="数据库密码", database="taobao_review")
cursor = conn.cursor()
insert_sql = """
INSERT INTO goods_review (item_id, review_id, create_time, nick, sku, content, rate, has_pic, is_add, sentiment, score)
VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s)
ON DUPLICATE KEY UPDATE content=VALUES(content)
"""
for row in data_list:
cursor.execute(insert_sql, (
row["商品ID"], row["评价ID"], row["评价时间"], row["买家昵称"],
row["购买规格SKU"], row["评价正文"], row["星级评分"],
row["是否晒图"], row["是否追评"], row["情感标签"], row["情感分数"]
))
conn.commit()
cursor.close()
conn.close()
六、实战避坑指南
- 密钥权限问题 密钥仅绑定个人账号,不要泄露,若请求返回权限不足提示,重新登录后台核对密钥,海外注册账号同样支持正常调取数据。
- 抓取频率控制 代码内置分页 1 秒延迟,定时任务建议最低 1 小时抓取一次,短时间高频请求会触发访问限制,导致数据拉取失败。
- 情感分析误差优化 SnowNLP 基础分词对电商口语、网络梗识别存在少量偏差,高精度需求可替换哈工大 LTP、百度 AI 文本情感接口,提升正负向判断准确率。
- 大批量商品监控优化 同时监控 10 款以上商品时,可改用异步
httpx并发请求,缩短整体抓取耗时。
七、总结
传统自研爬虫做商品评价监控,要解决反爬、代理、数据结构化、定时调度等多重难题,开发和维护成本极高。借助 OpenClaw 标准化数据采集能力,仅用百行 Python 代码即可搭建一套完整口碑监控系统,实现自动采集 - 清洗 - 分析 - 存储 - 预警全流程自动化。
无论是店铺运营实时盯自己商品差评,还是竞品调研批量对标用户反馈,这套方案都能大幅降低人工成本,把零散的评价转化为可量化、可落地的产品优化、运营决策数据,新手复制代码修改配置即可直接投入使用。