小红书评论爬虫 — 社交媒体数据采集与 AI 分析系统
Python
爬虫
AI
数据分析
Playwright
发布于: 2026-06-02
小红书评论爬虫 — 社交媒体数据采集与 AI 分析系统
GitHub:dr4g00n/scan-bot-alarm/xhs-crawler
技术栈:Python 3.10+ / Playwright / httpx / SQLite / Claude API
项目概述
这是一个面向小红书的评论数据采集与分析系统。不同于市面上通用的爬虫工具,本项目聚焦于评论内容的深度分析:不仅抓取文字,还通过 AI 进行情感分析、主题提取和关键词挖掘,将原始评论转化为可操作的洞察。
项目采用双模式爬取策略(API + 浏览器模拟),配合多层反检测机制,在合规采集的同时保证数据完整性。
核心功能
1. 双模式爬取
| 模式 | 适用场景 | 特点 |
|---|---|---|
| API 模式 | 大规模批量采集 | 速度快,需有效 Cookie |
| 浏览器模式 | 反爬严格的内容 | 模拟真实用户,稳定性高 |
两种模式共享同一套数据解析逻辑,采集结果格式完全一致。当 API 受限时,自动回退到浏览器模式。
2. 反检测机制
浏览器指纹伪装
- 模拟 iPhone 移动设备(User-Agent + Viewport)
- 禁用自动化控制特征(
--disable-blink-features=AutomationControlled)
签名算法
- x-t:毫秒级时间戳(13位)
- x-s:HMAC-SHA512 签名,基于请求路径+参数+Cookie
- x-s-common:MD5 设备指纹签名
行为模拟
- 随机滚动操作
- 请求间隔 3-5 秒(可配置
CRAWL_DELAY) - 模拟真实用户浏览模式
3. AI 深度分析
采集的评论数据自动送入 AI 处理流程:
# 1. 分批处理(默认 50 条/批)
batches = create_batches(comments, batch_size=50)
# 2. 格式化数据(符合 API 接口规范)
formatted_data = formatter.format_batch(batches)
# 3. 发送到 AI 服务
ai_result = await client.send_batch(formatted_data)
# 4. 保存分析结果(SQLite + JSON)
result_handler.process_result(ai_result)
AI 分析维度:
- 情感分析:正面 / 负面 / 中性比例
- 主题提取:评论涉及的主要话题
- 关键词挖掘:高频关键词和关联词
- 用户画像:评论者的地域、活跃时间分布
4. 数据存储
- JSON 文件:原始评论数据,便于查看和分享
- SQLite 数据库:AI 分析结果,支持 SQL 查询
- 结构化日志:loguru 记录完整操作日志
技术架构
┌─────────────────────────────────────────────┐
│ 小红书平台 │
│ ┌─────────┐ ┌─────────┐ ┌─────────┐ │
│ │ 笔记页面 │ │ 评论 API │ │ 反爬系统 │ │
│ └────┬────┘ └────┬────┘ └────┬────┘ │
└───────┼────────────┼────────────┼────────┘
│ │ │
└────────────┼────────────┘
▼
┌─────────────────────────────────────────────┐
│ 爬虫引擎 │
│ ┌─────────┐ ┌─────────┐ ┌─────────┐ │
│ │ Spider │ │ Signer │ │ URL Parser│ │
│ │(API/浏览器)│ │(签名生成) │ │(链接解析) │ │
│ └────┬────┘ └─────────┘ └─────────┘ │
└───────┼────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────┐
│ AI 处理层 │
│ ┌─────────┐ ┌─────────┐ ┌─────────┐ │
│ │Formatter│ │ Service │ │ Result │ │
│ │(数据清洗) │ │ Client │ │ Handler │ │
│ └─────────┘ └─────────┘ └─────────┘ │
└───────┼────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────┐
│ 存储层 │
│ ┌─────────┐ ┌─────────┐ ┌─────────┐ │
│ │ JSON │ │ SQLite │ │ Logs │ │
│ │ Files │ │ DB │ │ │ │
│ └─────────┘ └─────────┘ └─────────┘ │
└─────────────────────────────────────────────┘
关键技术栈
| 技术 | 版本 | 用途 |
|---|---|---|
| Python | ≥3.10 | 开发语言 |
| Playwright | ≥1.40 | 浏览器自动化(Chromium) |
| httpx | ≥2.31 | 异步 HTTP 请求 |
| requests | ≥2.31 | 同步 HTTP 请求 |
| SQLAlchemy | ≥2.0 | ORM 数据库操作 |
| Pydantic | ≥2.5 | 数据验证 |
| loguru | ≥0.7 | 结构化日志 |
| tenacity | ≥8.2 | 重试机制 |
数据格式
原始评论数据
{
"user_name": "国富民强",
"content": "有三百万在国内生活不香吗",
"create_time": "5天前",
"ip_location": "浙江",
"like_count": 6,
"sub_comment_count": 1
}
AI 分析请求格式
{
"batch_id": "batch_xxx_20251216",
"source": "xhs_crawler_v1.0",
"note_info": {
"note_id": "...",
"note_title": "...",
"total_comments": 50
},
"messages": [
{
"message_id": "comment_001",
"role": "user",
"content": "评论内容",
"metadata": {
"user_info": {"user_id": "...", "user_name": "..."},
"interaction": {"like_count": 10, "reply_count": 3},
"location": {"country": "中国", "city": null}
}
}
]
}
快速开始
git clone https://github.com/dr4g00n/scan-bot-alarm
cd xhs-crawler
# 创建虚拟环境
python -m venv xhs-crawler-env
source xhs-crawler-env/bin/activate
# 安装依赖
pip install -r requirements.txt
playwright install chromium
# 配置环境变量
cp .env.example .env
# 编辑 .env 填入 XHS_COOKIE(a1=xxx; web_session=xxx;)
# 运行基础爬虫
python run_crawler.py
# 运行爬虫 + AI 分析
python run_with_ai.py
# 运行可行性测试
python test_crawler.py
应用场景
场景 A:品牌舆情监控
- 监控品牌相关笔记的评论情感倾向
- 及时发现负面舆情,快速响应
场景 B:竞品分析
- 采集竞品笔记下的用户反馈
- 分析用户痛点和需求,指导产品优化
场景 C:市场调研
- 特定话题下的用户讨论热点
- 地域分布、人群特征分析
场景 D:内容创作辅助
- 分析高互动笔记的评论特征
- 挖掘用户关注的话题和表达方式
项目状态与限制
当前状态:
- 测试通过率:80%(4/5项)
- AI 服务集成:已成功
- 浏览器模式:可用,需有效 Cookie
已知限制:
1. 需要有效的登录 Cookie 才能访问内容
2. 小红书安全策略持续更新,签名算法需维护
3. 建议用于小规模数据采集,不建议大规模商业爬取
项目意义
xhs-crawler 展示了数据采集 + AI 分析的完整 pipeline:从原始网页到结构化洞察,全程自动化。这不仅是一个爬虫工具,更是一个"社交媒体情报系统"的雏形——让机器帮你"读"懂互联网上的声音。
结合 Agora AgentHub 的框架,未来的演进方向是:让 AI Agent 自主决定采集什么、如何分析、何时汇报——从被动工具进化为主动情报员。