在电商运营和产品管理中,及时了解用户对商品的评价是优化产品和提升用户体验的关键。本文将详细介绍如何构建一个完整的淘宝评论监控系统,包括 API 接口开发和实时数据采集功能。
一、系统架构设计
淘宝评论监控系统采用模块化设计,主要包含以下几个核心组件:
- API 客户端:负责与淘宝 API 进行通信,处理认证、请求签名和响应解析
- 数据采集模块:定期从淘宝 API 获取商品评论数据
- 数据存储模块:将采集到的评论数据存储到数据库中
- 情感分析模块:对评论内容进行情感分析,识别积极和消极评价
- 定时任务模块:调度和执行定期监控任务
- API 服务接口:提供外部访问系统功能的 RESTful API
系统整体架构采用 Python 语言实现,使用 SQLite 作为数据库存储评论数据,Flask 框架提供 API 服务。
二、淘宝 API 接入与认证
要接入淘宝 API,首先需要注册账号,创建应用并获取 ApiKey 和 ApiSecret。系统使用 OAuth 2.0 协议进行认证授权:
- 获取授权 URL:引导用户访问淘宝授权页面
- 获取授权码:用户授权后,淘宝会将授权码返回给回调 URL
- 换取访问令牌:使用授权码换取访问令牌和刷新令牌
- 使用访问令牌调用 API:在请求中携带访问令牌
以下是获取授权 URL 和访问令牌的 API 接口实现:
@app.route('/api/auth/url', methods=['GET'])
def get_auth_url():
auth_url = monitor_system.authenticate()
return jsonify({"auth_url": auth_url})
@app.route('/api/auth/token', methods=['POST'])
def get_access_token():
auth_code = request.json.get('auth_code')
if not auth_code:
return jsonify({"error": "缺少auth_code参数"}), 400
token_info = monitor_system.authenticate(auth_code)
if token_info:
return jsonify({"success": True, "token_info": token_info})
else:
return jsonify({"error": "获取令牌失败"}), 500
三、评论数据采集与存储
系统通过定时任务定期从淘宝 API 获取商品评论数据,并将其存储到数据库中。主要实现步骤如下:
- 配置监控任务:添加需要监控的商品 ID 和监控频率
- 获取评论数据:调用淘宝 API 获取商品评论
- 解析评论数据:将 API 返回的 JSON 数据解析为系统内部数据结构
- 存储评论数据:将解析后的评论数据存储到数据库中
- 更新任务状态:记录任务执行时间,为下一次执行做准备
以下是添加监控任务和检查新评论的核心代码:
def add_monitor_item(self, item_id, item_title, interval=60):
return self.db_service.add_monitor_task(item_id, item_title, interval)
def check_new_comments(self, task):
logger.info(f"开始检查商品 {task.item_id} 的新评论")
# 获取该商品的最新评论
comments = self.comment_service.get_all_comments(task.item_id, task.item_title)
if not comments:
logger.info(f"商品 {task.item_id} 没有新评论")
return 0
# 保存新评论到数据库
saved_count = self.db_service.save_comments(comments)
logger.info(f"成功保存 {saved_count} 条新评论")
# 更新任务运行时间
self.db_service.update_task_run_time(task.id)
# 如果有新评论,进行情感分析
if saved_count > 0:
self.analyze_and_notify(task.item_id, comments[:saved_count])
return saved_count
四、评论情感分析
系统实现了简单的评论情感分析功能,通过关键词匹配和评分相结合的方式判断评论的情感倾向:
- 加载情感词典:包含积极和消极词汇的词典
- 关键词匹配:统计评论中积极和消极关键词的出现次数
- 结合评分:将关键词匹配结果与评分相结合,判断情感倾向
- 提取高频关键词:分析评论中的高频词汇,了解用户关注点
以下是情感分析的核心代码:
class SentimentAnalysisService:
def __init__(self):
# 加载情感词典
self.positive_words = set(["好", "不错", "满意", "值得", "推荐", "优秀", "棒", "快", "赞", "完美"])
self.negative_words = set(["差", "不好", "失望", "垃圾", "慢", "贵", "后悔", "退", "难用", "劣质"])
def analyze(self, comments):
if not comments:
return {"positive": 0, "negative": 0, "neutral": 0, "keywords": []}
positive_count = 0
negative_count = 0
neutral_count = 0
all_words = []
for comment in comments:
content = comment.get('content', '')
score = int(comment.get('score', 5))
# 简单情感分析:基于关键词和评分
positive_matches = sum(1 for word in self.positive_words if word in content)
negative_matches = sum(1 for word in self.negative_words if word in content)
if score >= 4 and positive_matches > negative_matches:
positive_count += 1
elif score <= 2 and negative_matches > positive_matches:
negative_count += 1
else:
neutral_count += 1
# 提取关键词
words = jieba.cut(content)
all_words.extend([word for word in words if len(word) > 1 and word not in self.positive_words and word not in self.negative_words])
# 统计高频关键词
word_counts = Counter(all_words)
top_keywords = word_counts.most_common(10)
return {
"positive": positive_count,
"negative": negative_count,
"neutral": neutral_count,
"total": len(comments),
"positive_percentage": positive_count / len(comments) * 100,
"negative_percentage": negative_count / len(comments) * 100,
"neutral_percentage": neutral_count / len(comments) * 100,
"keywords": top_keywords
}
五、API 接口设计与实现
系统提供了一系列 RESTful API 接口,允许外部系统访问和控制系统功能:
- 认证接口:获取授权 URL 和访问令牌
- 监控管理接口:添加、删除和查询监控任务
- 评论数据接口:获取最新评论和历史评论
- 分析结果接口:获取评论情感分析结果
以下是部分 API 接口的实现示例:
@app.route('/api/comments/latest', methods=['GET'])
def get_latest_comments():
item_id = request.args.get('item_id')
limit = int(request.args.get('limit', 10))
if not item_id:
return jsonify({"error": "缺少item_id参数"}), 400
# 从数据库查询最新评论
session = monitor_system.db_service.session
comments = session.query(Comment).filter(Comment.item_id == item_id).order_by(Comment.rate_date.desc()).limit(limit).all()
result = []
for comment in comments:
result.append({
"comment_id": comment.comment_id,
"user_nick": comment.user_nick,
"content": comment.content,
"score": comment.score,
"rate_date": comment.rate_date.strftime("%Y-%m-%d %H:%M:%S") if comment.rate_date else None,
"append_content": comment.append_content,
"append_date": comment.append_date.strftime("%Y-%m-%d %H:%M:%S") if comment.append_date else None
})
return jsonify({"comments": result})
@app.route('/api/comments/analysis', methods=['GET'])
def get_comments_analysis():
item_id = request.args.get('item_id')
if not item_id:
return jsonify({"error": "缺少item_id参数"}), 400
# 从数据库查询评论
session = monitor_system.db_service.session
comments = session.query(Comment).filter(Comment.item_id == item_id).all()
if not comments:
return jsonify({"error": "没有找到该商品的评论"}), 404
# 转换为字典列表
comment_list = []
for comment in comments:
comment_dict = {
"content": comment.content,
"score": comment.score
}
comment_list.append(comment_dict)
# 进行情感分析
analysis_result = monitor_system.sentiment_service.analyze(comment_list)
return jsonify(analysis_result)
六、系统部署与使用
系统的部署和使用步骤如下:
- 环境准备:安装 Python 3.7 + 环境和所需依赖库
- 配置信息:在配置文件中设置 AppKey、AppSecret 等信息
- 数据库初始化:运行程序自动创建 SQLite 数据库和表
- 获取授权:通过 API 获取授权 URL,完成淘宝 API 授权
- 添加监控任务:通过 API 添加需要监控的商品
- 启动系统:启动 Flask 服务和定时监控任务
使用该系统,您可以:
- 实时监控淘宝商品评论
- 及时获取负面评价通知
- 分析用户评价情感倾向
- 了解用户关注的产品特点
- 为产品优化和运营决策提供数据支持
通过本文介绍的淘宝评论监控系统,开发者可以快速搭建一个功能完善的评论监控平台,实现对淘宝商品评论的实时采集、分析和管理。系统设计灵活,易于扩展,可以根据实际需求添加更多功能,如数据可视化、多平台支持等。