构建淘宝评论监控系统:API 接口开发与实时数据采集教程

5 阅读6分钟

在电商运营和产品管理中,及时了解用户对商品的评价是优化产品和提升用户体验的关键。本文将详细介绍如何构建一个完整的淘宝评论监控系统,包括 API 接口开发和实时数据采集功能。

一、系统架构设计

淘宝评论监控系统采用模块化设计,主要包含以下几个核心组件:

  1. API 客户端:负责与淘宝 API 进行通信,处理认证、请求签名和响应解析
  2. 数据采集模块:定期从淘宝 API 获取商品评论数据
  3. 数据存储模块:将采集到的评论数据存储到数据库中
  4. 情感分析模块:对评论内容进行情感分析,识别积极和消极评价
  5. 定时任务模块:调度和执行定期监控任务
  6. API 服务接口:提供外部访问系统功能的 RESTful API

系统整体架构采用 Python 语言实现,使用 SQLite 作为数据库存储评论数据,Flask 框架提供 API 服务。

二、淘宝 API 接入与认证

要接入淘宝 API,首先需要注册账号,创建应用并获取 ApiKey 和 ApiSecret。系统使用 OAuth 2.0 协议进行认证授权:

  1. 获取授权 URL:引导用户访问淘宝授权页面
  2. 获取授权码:用户授权后,淘宝会将授权码返回给回调 URL
  3. 换取访问令牌:使用授权码换取访问令牌和刷新令牌
  4. 使用访问令牌调用 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 获取商品评论数据,并将其存储到数据库中。主要实现步骤如下:

  1. 配置监控任务:添加需要监控的商品 ID 和监控频率
  2. 获取评论数据:调用淘宝 API 获取商品评论
  3. 解析评论数据:将 API 返回的 JSON 数据解析为系统内部数据结构
  4. 存储评论数据:将解析后的评论数据存储到数据库中
  5. 更新任务状态:记录任务执行时间,为下一次执行做准备

以下是添加监控任务和检查新评论的核心代码:

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

 

四、评论情感分析

系统实现了简单的评论情感分析功能,通过关键词匹配和评分相结合的方式判断评论的情感倾向:

  1. 加载情感词典:包含积极和消极词汇的词典
  2. 关键词匹配:统计评论中积极和消极关键词的出现次数
  3. 结合评分:将关键词匹配结果与评分相结合,判断情感倾向
  4. 提取高频关键词:分析评论中的高频词汇,了解用户关注点

 

以下是情感分析的核心代码:

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 接口,允许外部系统访问和控制系统功能:

  1. 认证接口:获取授权 URL 和访问令牌
  2. 监控管理接口:添加、删除和查询监控任务
  3. 评论数据接口:获取最新评论和历史评论
  4. 分析结果接口:获取评论情感分析结果

以下是部分 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)

 

六、系统部署与使用

系统的部署和使用步骤如下:

  1. 环境准备:安装 Python 3.7 + 环境和所需依赖库
  2. 配置信息:在配置文件中设置 AppKey、AppSecret 等信息
  3. 数据库初始化:运行程序自动创建 SQLite 数据库和表
  4. 获取授权:通过 API 获取授权 URL,完成淘宝 API 授权
  5. 添加监控任务:通过 API 添加需要监控的商品
  6. 启动系统:启动 Flask 服务和定时监控任务

使用该系统,您可以:

  • 实时监控淘宝商品评论
  • 及时获取负面评价通知
  • 分析用户评价情感倾向
  • 了解用户关注的产品特点
  • 为产品优化和运营决策提供数据支持

通过本文介绍的淘宝评论监控系统,开发者可以快速搭建一个功能完善的评论监控平台,实现对淘宝商品评论的实时采集、分析和管理。系统设计灵活,易于扩展,可以根据实际需求添加更多功能,如数据可视化、多平台支持等。