×

api 数据挖掘

低成本搭建电商商品口碑监控系统|从实时数据采集到情感分析完整实战(附可运行 Python 代码)

admin admin 发表于2026-07-20 16:21:07 浏览6 评论0

抢沙发发表评论

前言

做电商运营、产品、竞品分析的同学,几乎都绕不开用户评价数据。商品好评、差评、晒图、规格反馈、追评里藏着最真实的用户痛点:面料差、尺寸不准、物流慢、包装破损,或是产品爆火的核心卖点。

传统人工统计方式痛点极多:

  1. 手动翻页复制评论,单品上千条数据至少耗费半天;

  2. 无法实时监控新增差评,售后反馈滞后;

  3. 数据零散,很难批量统计负面关键词、评分分布;

  4. 自研网页抓取容易遭遇平台限制、频繁失效,维护成本高。

本文给大家分享一套成熟稳定的落地方案,依托 OpenClaw 数据通道,无需复杂逆向、不用处理页面加密,一行配置即可批量拉取全量评价,搭配 Python 实现7×24 小时增量监控、数据清洗、情感分析、可视化报表,小卖家、数据分析实习生、竞品调研团队都能直接上手。

一、方案整体架构

整套系统仅依赖轻量 Python 环境,普通笔记本 / 低配云服务器就能稳定运行,分为四大核心模块:

  1. 全量数据同步模块:输入商品唯一标识,批量拉取评价全字段,包含评论文本、星级、晒图链接、购买规格、评价时间、脱敏买家昵称、追评内容;支持分页循环采集,自动适配海量评论商品。

  2. 增量实时监控模块:基于评价唯一标识做本地去重,定时轮询拉取最新评价,仅新增未记录数据,大幅降低请求频次,实现差评实时预警。

  3. 数据清洗存储模块:过滤空白评价、无效系统默认话术,统一时间格式,结构化存入 CSV 文件(小体量项目)或 SQLite 本地数据库(长期监控多商品)。

  4. 智能分析可视化模块:中文分词 + 情感判断区分好评 / 中评 / 差评,统计负面高频痛点词汇,输出评分占比饼图、每日评价量趋势折线图,直观呈现口碑变化。

二、前期准备工作

2.1 环境依赖安装

新建 Python 项目,执行命令安装全部依赖库:

pip install requests pandas jieba snownlp matplotlib sqlite3

各库作用说明:

  • requests:发起网络请求拉取商品评价数据

  • pandas:批量数据清洗、表格存储

  • jieba:中文评论分词,提取关键词

  • snownlp:轻量中文情感打分,区分正负向评价

  • matplotlib:生成口碑可视化图表

  • sqlite3:本地轻量数据库,长期存储多商品历史评价

2.2 工具基础配置

登录创建项目获取两组身份凭证(密钥串),用于数据通道鉴权;复制商品 ID(商品链接中id=后的数字串)作为采集目标,无需解析复杂页面链接。

三、完整可运行代码实现

3.1 基础数据拉取工具类(核心采集逻辑)

import requests
import json
import time
import random
import pandas as pd
import sqlite3
from snownlp import SnowNLP
import jieba
import matplotlib.pyplot as plt

# 1. 基础鉴权配置(替换为自己后台凭证)
ACCESS_KEY = "你的密钥1"
SECRET_KEY = "你的密钥2"
GATEWAY_URL = "稳定数据通道地址"

class GoodsCommentCollector:
    def __init__(self, item_id):
        self.item_id = item_id
        self.all_comment_list = []
        self.db_conn = sqlite3.connect("goods_comment.db")
        self.init_db()

    # 初始化本地数据库,存储历史评价用于增量监控
    def init_db(self):
        create_sql = """
        CREATE TABLE IF NOT EXISTS comment_data (
            comment_id TEXT PRIMARY KEY,
            nick TEXT,
            star INTEGER,
            content TEXT,
            sku TEXT,
            rate_date TEXT,
            has_pic INTEGER,
            add_feedback TEXT,
            emotion_score REAL
        )
        """
        self.db_conn.execute(create_sql)
        self.db_conn.commit()

    # 单页拉取评价原始数据
    def fetch_single_page(self, page_num=1, page_size=20):
        params = {
            "key": ACCESS_KEY,
            "secret": SECRET_KEY,
            "item_id": self.item_id,
            "page": page_num,
            "page_size": page_size,
            "result_type": "json"
        }
        try:
            resp = requests.get(GATEWAY_URL, params=params, timeout=15)
            resp_data = json.loads(resp.text)
            return resp_data
        except Exception as e:
            print(f"第{page_num}页采集异常:{str(e)}")
            return None

    # 解析原始数据,清洗结构化字段
    def parse_raw_data(self, raw_json):
        if not raw_json or "items" not in raw_json:
            return False
        comment_items = raw_json["items"].get("item", [])
        if len(comment_items) == 0:
            return False
        for item in comment_items:
            comment_info = {
                "comment_id": item.get("rate_id", ""),
                "nick": item.get("display_user_nick", "匿名用户"),
                "star": int(item.get("user_star", 5)),
                "content": item.get("rate_content", "").strip(),
                "sku": item.get("auction_sku", "无规格"),
                "rate_date": item.get("rate_date", ""),
                "has_pic": 1 if item.get("pics", []) else 0,
                "add_feedback": item.get("add_feedback", "无追评")
            }
            # 过滤空白无意义评价
            if comment_info["content"] in ["此用户没有填写评价。", ""]:
                continue
            self.all_comment_list.append(comment_info)
        return True

    # 批量全量采集,自动分页循环
    def batch_crawl_all(self, max_page=50):
        for page in range(1, max_page + 1):
            print(f"正在采集第{page}页评价数据...")
            raw_data = self.fetch_single_page(page_num=page)
            parse_result = self.parse_raw_data(raw_data)
            if not parse_result:
                print("无更多评价,全量采集完成")
                break
            # 随机休眠,平稳请求频率
            time.sleep(random.uniform(1.2, 3.0))
        print(f"本次共采集有效评价{len(self.all_comment_list)}条")

    # 增量入库:仅写入本地不存在的新评价
    def save_to_local_db(self):
        insert_sql = """
        INSERT OR IGNORE INTO comment_data
        (comment_id, nick, star, content, sku, rate_date, has_pic, add_feedback, emotion_score)
        VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)
        """
        for comment in self.all_comment_list:
            # 情感打分0-1,大于0.5正向,小于0.3负向
            s = SnowNLP(comment["content"])
            score = s.sentiments
            self.db_conn.execute(insert_sql, (
                comment["comment_id"],
                comment["nick"],
                comment["star"],
                comment["content"],
                comment["sku"],
                comment["rate_date"],
                comment["has_pic"],
                comment["add_feedback"],
                score
            ))
        self.db_conn.commit()
        print("新评价数据已存入本地数据库")

    # 导出全部数据到Excel表格
    def export_to_csv(self):
        df = pd.DataFrame(self.all_comment_list)
        df.to_csv(f"商品{self.item_id}_评价数据.csv", index=False, encoding="utf-8-sig")
        print("评价表格导出完成")

    # 7×24小时定时监控入口,每30分钟轮询一次
    def start_real_time_monitor(self, interval=1800):
        print("启动实时口碑监控,每30分钟自动抓取新增评价...")
        while True:
            self.batch_crawl_all(max_page=2)
            self.save_to_local_db()
            self.all_comment_list.clear()
            print(f"等待{interval/60}分钟后执行下一轮采集\n")
            time.sleep(interval)

3.2 评论情感分析 + 可视化代码

def draw_emotion_chart(item_id):
    conn = sqlite3.connect("goods_comment.db")
    df = pd.read_sql(f"SELECT emotion_score FROM comment_data", conn)
    conn.close()

    # 划分情感标签
    def label_emotion(score):
        if score >= 0.5:
            return "好评"
        elif score >= 0.3:
            return "中评"
        else:
            return "差评"
    df["emotion_type"] = df["emotion_score"].apply(label_emotion)
    emo_count = df["emotion_type"].value_counts()

    # 绘制饼图
    plt.rcParams["font.sans-serif"] = ["SimHei"]
    plt.figure(figsize=(8, 6))
    plt.pie(emo_count.values, labels=emo_count.index, autopct="%1.2f%%",
            colors=["#46b946", "#ffcc5c", "#ff5959"])
    plt.title(f"商品{item_id}评价情感分布")
    plt.savefig(f"商品{item_id}_口碑分布图.png", dpi=300)
    plt.show()

# 提取差评高频关键词
def get_negative_keywords():
    conn = sqlite3.connect("goods_comment.db")
    bad_df = pd.read_sql("SELECT content FROM comment_data WHERE emotion_score < 0.3", conn)
    conn.close()
    all_words = []
    stop_words = {"的", "了", "很", "太", "就", "还", "有点", "但是", "感觉"}
    for text in bad_df["content"]:
        words = jieba.lcut(text)
        for w in words:
            if len(w) > 1 and w not in stop_words:
                all_words.append(w)
    word_series = pd.Series(all_words).value_counts().head(15)
    print("差评高频痛点词TOP15:")
    print(word_series)
    return word_series

3.3 程序主运行入口

if __name__ == "__main__":
    # 替换为目标商品ID
    TARGET_GOODS_ID = "1234567890123"
    collector = GoodsCommentCollector(TARGET_GOODS_ID)

    # 操作1:一次性全量采集所有评价
    collector.batch_crawl_all(max_page=30)
    collector.save_to_local_db()
    collector.export_to_csv()

    # 操作2:生成口碑情感分布图
    draw_emotion_chart(TARGET_GOODS_ID)

    # 操作3:提取差评核心痛点词
    get_negative_keywords()

    # 操作4:开启长期实时监控(取消注释即可7×24小时运行)
    # collector.start_real_time_monitor(interval=1800)

四、功能落地效果说明

4.1 数据采集优势

  1. 字段完整全覆盖:自动获取买家昵称、星级、正文、晒图标记、购买规格、评价时间、追评,完整还原用户消费反馈;

  2. 分页自动处理:无需手动控制翻页,循环采集至无新数据自动终止,万条评价一键拉取;

  3. 稳定无封锁:依托成熟数据通道,避开平台页面限制,不会出现传统网页抓取频繁失效、验证码拦截问题;

  4. 缓存加速:重复采集时可复用历史缓存,大幅缩短数据返回时间,降低资源消耗。

4.2 监控与分析能力

  1. 增量更新不重复:本地数据库存储每条评价唯一标识,定时轮询只抓取新增内容,避免重复存储浪费空间;

  2. 差评自动识别:通过情感模型自动区分负面评价,批量提取高频痛点,快速定位产品缺陷(掉色、尺寸偏小、发货慢等);

  3. 可视化报表直观:一键生成好评 / 中评 / 差评占比图表,运营人员无需看懂代码也能看懂口碑整体情况;

  4. 长期数据沉淀:SQLite 本地数据库永久存储历史评价,可按月、季度对比口碑变化,用于产品迭代、竞品对比分析。

五、实际业务使用场景

  1. 店铺售后预警:开启实时监控后,新增差评即时入库,搭配企业微信 / 钉钉推送脚本可实现负面消息秒级提醒,及时联系用户处理;

  2. 产品迭代优化:批量提取差评高频词汇,快速锁定产品核心短板,优化面料、做工、包装、物流等环节;

  3. 竞品口碑调研:批量采集多款同类竞品评价,对比各方优缺点,制定差异化宣传卖点;

  4. 内容营销素材挖掘:筛选高分带图好评,提取用户真实夸赞话术,用于商品详情页、短视频文案;

  5. 运营数据复盘:按月导出评价表格,统计晒图率、追评占比、差评率,量化店铺服务与产品质量指标。

六、避坑实操小贴士

  1. 采集间隔不要低于 1 秒,定时监控建议设置 30 分钟以上,平稳请求频率保证通道稳定;

  2. 空白评价、系统默认无内容评价代码已自动过滤,无需手动清洗;

  3. 如需多商品同时监控,可多实例初始化采集类,分别建立独立数据表;

  4. 长期大批量监控建议部署在轻量云服务器,保持程序后台常驻运行;

  5. 情感分析仅作参考,部分中性吐槽语句会存在打分偏差,可自定义负面关键词词库提升准确度。

总结

过去想要搭建一套完整的电商评价监控分析体系,要么投入大量人力手动统计,要么投入开发成本自研抓取方案,维护难度极高。借助 OpenClaw 一站式数据能力,仅需几十行 Python 代码就能完成采集 - 存储 - 监控 - 分析 - 可视化全流程闭环,零基础开发、低成本落地,不管是个人电商从业者、数据实习生还是企业运营团队,都能快速落地用户口碑数字化管理。

后续可拓展优化方向:接入消息推送工具实现差评告警、搭建 Web 可视化后台、接入大模型做评价深度语义解读、多平台商品数据统一汇总分析。


少长咸集

群贤毕至

访客