如何将小红书评论数据封装到API实现自动化分析?测试API实战指南

前言

小红书作为内容种草与舆情监测的核心场景,评论数据是用户情绪、需求痛点、竞品反馈的黄金来源。手动复制粘贴效率低、无法批量、难以接入 BI / 自动化流程。

本文带你用Python + FastAPI ,把小红书评论采集逻辑封装成标准化 RESTful API,支持一键调用、批量获取、结构化输出,直接对接数据分析、报表生成、监控告警系统。

声明:本文仅用于学习与技术交流 ,所有操作请遵守小红书《用户协议》与《个人信息保护法》,仅对公开数据、自有账号内容进行合规使用,禁止商用、恶意爬取与数据泄露。


一、整体方案设计

目标:把 "小红书评论抓取" 封装成可调用、可扩展、稳定的 API 服务。

整体流程:

  1. 数据获取:通过公开接口 / 合法渠道获取评论 JSON
  2. 数据清洗:结构化、去重、脱敏
  3. 服务封装:FastAPI 打包为 HTTP API
  4. 自动化分析:词云、情感、关键词统计
  5. 部署上线:本地 / 服务器稳定运行

二、环境准备

安装依赖:

复制代码
fastapi
uvicorn
requests
pandas
jieba
snownlp(情感分析)
python-multipart

一键安装:

bash

复制代码
pip install fastapi uvicorn requests pandas jieba snownlp

三、核心:小红书评论数据采集(封装成函数)

这里提供标准可复用采集模板,你只需替换合法请求头 / 参数即可使用。

python

复制代码
import requests
import time

def get_xiaohongshu_comments(note_id: str, limit: int = 20):
    """
    小红书评论获取函数(模板)
    :param note_id: 笔记ID
    :param limit: 最大获取条数
    :return: 结构化评论列表
    """
    headers = {
        "User-Agent": "Mozilla/5.0 ...",  # 你的浏览器UA
        "Cookie": "你的合法Cookie",        # 仅自用账号
        "Referer": "https://www.xiaohongshu.com/"
    }

    # 评论接口(示例,以实际抓包为准)
    url = f"https://edith.xiaohongshu.com/api/sns/web/v1/comment/list"
    params = {
        "note_id": note_id,
        "cursor": "",
        "top_comment_id": "",
        "type": "all"
    }

    comments = []
    has_more = True
    page = 0

    try:
        while has_more and page * 20 < limit:
            res = requests.get(url, headers=headers, params=params, timeout=10)
            data = res.json()

            if data.get("code") != 0:
                return {"code": -1, "msg": "获取失败", "data": []}

            comment_list = data.get("data", {}).get("comments", [])
            for c in comment_list:
                comments.append({
                    "comment_id": c.get("id"),
                    "nickname": c.get("user_info", {}).get("nickname"),
                    "content": c.get("content"),
                    "like_count": c.get("like_count"),
                    "time": c.get("create_time"),
                    "ip_location": c.get("ip_location", "")
                })

            # 翻页控制
            has_more = data.get("data", {}).get("has_more", False)
            params["cursor"] = data.get("data", {}).get("cursor", "")
            page += 1
            time.sleep(1)  # 必须加延时,合规防封

        return {
            "code": 0,
            "msg": "success",
            "total": len(comments),
            "data": comments
        }

    except Exception as e:
        return {"code": -1, "msg": str(e), "data": []}

四、API 封装(FastAPI)

直接把上面的函数暴露为HTTP 接口,支持 GET/POST 调用。

python

复制代码
from fastapi import FastAPI
import pandas as pd
import jieba
from snownlp import SnowNLP

app = FastAPI(title="小红书评论自动化分析API", version="1.0")

# 1. 获取评论原始数据
@app.get("/api/comments/get")
def api_get_comments(note_id: str, limit: int = 20):
    return get_xiaohongshu_comments(note_id, limit)

# 2. 评论统计分析(自动)
@app.get("/api/comments/analysis")
def api_comments_analysis(note_id: str, limit: int = 20):
    res = get_xiaohongshu_comments(note_id, limit)
    if res["code"] != 0:
        return res

    df = pd.DataFrame(res["data"])
    contents = df["content"].tolist()

    # 关键词统计
    words = []
    for c in contents:
        words.extend(jieba.lcut(c))
    word_count = pd.Series(words).value_counts().head(10).to_dict()

    # 情感分析
    sentiments = []
    for c in contents:
        s = SnowNLP(c)
        sentiments.append(round(s.sentiments, 2))
    avg_sentiment = round(sum(sentiments) / len(sentiments), 2) if sentiments else 0

    return {
        "code": 0,
        "msg": "分析完成",
        "total": res["total"],
        "word_top10": word_count,
        "avg_sentiment_0_1": avg_sentiment,
        "comments": res["data"]
    }

# 3. 健康检查
@app.get("/")
def index():
    return {"status": "running", "msg": "小红书评论API服务正常"}

五、启动服务

bash

复制代码
uvicorn main:app --host 0.0.0.0 --port 8000 --reload

访问文档(自动生成):


六、接口调用示例

1. 获取评论

复制代码
GET http://127.0.0.1:8000/api/comments/get?note_id=xxx&limit=50

2. 自动分析(关键词 + 情感)

复制代码
GET http://127.0.0.1:8000/api/comments/analysis?note_id=xxx

返回示例:

复制代码
{
  "code": 0,
  "msg": "分析完成",
  "total": 32,
  "word_top10": { "好用":8, "推荐":5, "质感":4 ... },
  "avg_sentiment_0_1": 0.82
}

七、可直接落地的自动化场景

  1. 竞品监控:定时拉取评论 → 入库 → 预警负面
  2. 内容优化:高频关键词 → 优化标题 / 文案
  3. 选品决策:用户真实需求 → 提炼卖点
  4. BI 报表:API 对接 Tableau、DataEase
  5. 私域 SOP:自动提取疑问 → 客服回复

八、合规与反爬建议(非常重要)

  1. 必须使用自己账号的 Cookie,禁止共享、爬取他人数据
  2. 延时 ≥1 秒,禁止高并发
  3. 不存储隐私:手机号、位置等敏感信息立即脱敏
  4. 仅供学习 ,商用请走小红书开放平台官方 API

九、总结

本文完成了三件事:

  • 小红书评论结构化采集
  • 封装为标准化 API
  • 内置自动化分析(关键词 + 情感)

你可以直接把这套代码部署到服务器,给业务端、数据分析、前端提供稳定的数据服务。

相关推荐
梅孔立2 小时前
批量服务器操作实战:100台服务器一键管控(含脚本+避坑指南)
运维·服务器
~远在太平洋~2 小时前
debian系统已安装python3.12却无法执行python命令
chrome·python·debian
川trans2 小时前
云原生--Nginx
linux·运维·服务器·nginx·云原生
归叶再无青2 小时前
企业级web服务(Tomcat开源web应用服务器)
运维·前端·开源·tomcat·bash
Trouvaille ~2 小时前
【项目篇】从零手写高并发服务器(一):项目介绍与开发环境搭建
linux·运维·服务器·网络·c++·高并发·muduo库
China_Yanhy2 小时前
入职 Web3 运维日记 · 第 14 日:铸造无形钥匙 —— OIDC 与 CI/CD 施工实录
运维·web3
数智联AI团队2 小时前
AI搜索发布新一代智能体平台,以技术创新重塑自动化AI交互体验
运维·人工智能·自动化
上海合宙LuatOS2 小时前
LuatOS核心库API——【ioqueue】IO序列化操作
linux·运维·服务器·网络·嵌入式硬件·物联网·硬件工程
xcs194052 小时前
AI 自动化编程 trae 分析 包在那里引入
运维·自动化