前言
小红书作为内容种草与舆情监测的核心场景,评论数据是用户情绪、需求痛点、竞品反馈的黄金来源。手动复制粘贴效率低、无法批量、难以接入 BI / 自动化流程。
本文带你用Python + FastAPI ,把小红书评论采集逻辑封装成标准化 RESTful API,支持一键调用、批量获取、结构化输出,直接对接数据分析、报表生成、监控告警系统。
声明:本文仅用于学习与技术交流 ,所有操作请遵守小红书《用户协议》与《个人信息保护法》,仅对公开数据、自有账号内容进行合规使用,禁止商用、恶意爬取与数据泄露。
一、整体方案设计
目标:把 "小红书评论抓取" 封装成可调用、可扩展、稳定的 API 服务。
整体流程:
- 数据获取:通过公开接口 / 合法渠道获取评论 JSON
- 数据清洗:结构化、去重、脱敏
- 服务封装:FastAPI 打包为 HTTP API
- 自动化分析:词云、情感、关键词统计
- 部署上线:本地 / 服务器稳定运行
二、环境准备
安装依赖:
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
}
七、可直接落地的自动化场景
- 竞品监控:定时拉取评论 → 入库 → 预警负面
- 内容优化:高频关键词 → 优化标题 / 文案
- 选品决策:用户真实需求 → 提炼卖点
- BI 报表:API 对接 Tableau、DataEase
- 私域 SOP:自动提取疑问 → 客服回复
八、合规与反爬建议(非常重要)
- 必须使用自己账号的 Cookie,禁止共享、爬取他人数据
- 延时 ≥1 秒,禁止高并发
- 不存储隐私:手机号、位置等敏感信息立即脱敏
- 仅供学习 ,商用请走小红书开放平台官方 API
九、总结
本文完成了三件事:
- 小红书评论结构化采集
- 封装为标准化 API
- 内置自动化分析(关键词 + 情感)
你可以直接把这套代码部署到服务器,给业务端、数据分析、前端提供稳定的数据服务。