rednote-crawler
Enables AI assistants to search and collect data from Xiaohongshu/REDnote, including notes, comments, and user info, with dual-layer anti-detection and persistent login.
README
rednote-crawler
中文
小红书 (Xiaohongshu / REDnote) 数据采集框架 + MCP 服务。
基于 Playwright 实现真实浏览器自动化,具备双层反检测能力(playwright-stealth + browserforge)。通过 MCP 协议将采集能力暴露为标准工具,让 AI 助手(Claude Desktop / Code / Cursor)直接调用。
功能特性
- MCP 服务:AI 助手可直接搜索小红书、采集笔记详情和评论
- 多种 Transport:stdio(本地)/ SSE(远程部署)/ Streamable HTTP
- 关键词搜索采集(瀑布流自动滚动加载)
- 笔记详情采集(标题、正文、互动数据、标签、图片/视频)
- 评论采集(Top N 评论,含用户信息和 IP 属地)
- 双层反检测(playwright-stealth 环境级 + browserforge 指纹级)
- 登录状态持久化(扫码登录后自动保存,下次启动免登录)
- 数据输出:JSON(原始完整)+ Excel/xlsx(3 个 Sheet 结构化)
- 生产级稳定性:超时控制、浏览器崩溃自动恢复、登录态失效检测
环境要求
- Python 3.10+
- uv 包管理器
快速开始
# 1. 克隆仓库
git clone https://github.com/yangsijie666/xiaohongshu-crawler.git && cd xiaohongshu-crawler
# 2. 安装依赖
uv sync
# 3. 安装浏览器
uv run playwright install chromium
# 4. 首次登录(扫码)
uv run python scripts/verify_login.py
# 5. 运行采集
uv run python main.py
MCP 服务使用
方式一:stdio 模式(推荐,本地集成)
在 Claude Desktop 配置文件中添加(Mac: ~/Library/Application Support/Claude/claude_desktop_config.json):
{
"mcpServers": {
"rednote-crawler": {
"command": "uv",
"args": ["run", "--directory", "/path/to/rednote-crawler", "python", "mcp_server.py"],
"env": {}
}
}
}
方式二:SSE 模式(远程部署)
# 服务器端启动
uv run python mcp_server.py --transport sse --host 0.0.0.0 --port 8000
客户端配置:
{
"mcpServers": {
"rednote-crawler": {
"url": "http://your-server:8000/sse"
}
}
}
方式三:Streamable HTTP 模式
uv run python mcp_server.py --transport streamable-http --host 0.0.0.0 --port 8000
MCP 工具列表
| 工具 | 说明 | 耗时 |
|---|---|---|
check_login_status |
检查登录状态 | 5-10s |
search_notes |
关键词搜索笔记(max_count 1-50) | 30-90s |
get_note_detail |
采集笔记详情 + 评论 | 15-60s |
crawl_keyword |
完整流程:搜索→详情→评论→存储 | 2-15min |
get_saved_data |
查询本地已保存数据 | <1s |
命令参考
| 命令 | 说明 |
|---|---|
uv sync |
安装/同步项目依赖 |
uv run playwright install chromium |
安装 Chromium 浏览器 |
uv run python main.py |
运行完整采集流程 |
uv run python mcp_server.py |
启动 MCP 服务(stdio) |
uv run python mcp_server.py --transport sse |
启动 MCP 服务(SSE) |
uv run python scripts/verify_login.py |
验证/完成登录 |
uv run python scripts/verify_stealth.py |
验证反检测效果 |
uv run python scripts/verify_search.py |
验证搜索采集 |
uv run python scripts/verify_note.py |
验证笔记详情+评论采集 |
uv run pytest --cov |
运行测试 + 覆盖率 |
配置说明
编辑 config/settings.yaml:
| 配置项 | 默认值 | 说明 |
|---|---|---|
crawler.keywords |
["示例关键词"] |
搜索关键词列表 |
crawler.max_notes_per_keyword |
20 |
每个关键词最多采集笔记数 |
crawler.max_comments_per_note |
20 |
每条笔记最多采集评论数 |
crawler.scroll_pause |
1.5 |
滚动后等待时间(秒) |
crawler.page_load_timeout |
30 |
页面加载超时(秒) |
delay.between_notes |
[2, 5] |
笔记之间随机延迟范围(秒) |
delay.between_searches |
[3, 8] |
搜索之间随机延迟范围(秒) |
browser.headless |
false |
是否无头模式 |
storage.output_dir |
"data" |
输出目录 |
storage.save_raw_json |
true |
是否保存原始 JSON |
storage.save_xlsx |
true |
是否保存 Excel |
输出格式
data/
├── raw/
│ ├── {keyword}_{timestamp}.json # 搜索结果
│ └── notes_{keyword}_{timestamp}.json # 笔记详情+评论
└── processed/
└── {keyword}_{timestamp}.xlsx # Excel 工作簿
├── Sheet 1: 搜索结果 (8 列)
├── Sheet 2: 笔记详情 (13 列)
└── Sheet 3: 评论数据 (8 列)
项目结构
mcp_server.py # MCP 服务入口(支持 stdio / SSE / HTTP)
main.py # CLI 采集入口
src/
├── session.py # MCP 会话管理(浏览器生命周期 + 并发锁)
├── errors.py # 统一错误格式
├── stealth.py # 反检测配置(指纹生成 + stealth 注入)
├── browser.py # Playwright 浏览器生命周期管理
├── auth.py # 登录 & 会话管理
├── search.py # 搜索结果采集(瀑布流滚动)
├── note.py # 笔记详情采集(含重试逻辑)
├── comment.py # 评论采集(Top N)
├── parser.py # 页面数据解析
└── storage.py # 数据存储(JSON + Excel/xlsx)
scripts/ # 验证脚本
config/ # YAML 配置
tests/ # 测试套件
依赖
| 包 | 用途 |
|---|---|
| playwright | 浏览器自动化 (async API) |
| playwright-stealth | 反检测补丁 |
| browserforge | 真实浏览器指纹生成 |
| mcp[cli] | MCP 协议 SDK |
| uvicorn | ASGI 服务器(SSE/HTTP transport) |
| starlette | ASGI 框架(SSE/HTTP transport) |
| pyyaml | YAML 配置加载 |
| openpyxl | Excel 工作簿生成 |
许可证
MIT
English
Xiaohongshu (REDnote) data collection framework + MCP server.
Built on Playwright for real browser automation with dual-layer anti-detection (playwright-stealth + browserforge). Exposes collection capabilities as standard MCP tools for AI assistants (Claude Desktop / Code / Cursor).
Features
- MCP Server: AI assistants can directly search REDnote, collect note details and comments
- Multiple Transports: stdio (local) / SSE (remote) / Streamable HTTP
- Keyword search with infinite scroll auto-loading
- Note detail collection (title, content, engagement metrics, tags, images/videos)
- Comment collection (Top N comments with user info and IP location)
- Dual-layer anti-detection (environment-level + fingerprint-level)
- Persistent login state (auto-saved after QR code scan)
- Output: JSON (raw) + Excel/xlsx (3-sheet structured)
- Production-grade reliability: timeout control, browser crash auto-recovery, login expiry detection
Requirements
- Python 3.10+
- uv package manager
Quick Start
# 1. Clone
git clone <repo-url> && cd rednote-crawler
# 2. Install dependencies
uv sync
# 3. Install browser
uv run playwright install chromium
# 4. First login (QR code scan)
uv run python scripts/verify_login.py
# 5. Run collection
uv run python main.py
MCP Server Usage
Option A: stdio Mode (Recommended, Local Integration)
Add to Claude Desktop config (Mac: ~/Library/Application Support/Claude/claude_desktop_config.json):
{
"mcpServers": {
"rednote-crawler": {
"command": "uv",
"args": ["run", "--directory", "/path/to/rednote-crawler", "python", "mcp_server.py"],
"env": {}
}
}
}
Option B: SSE Mode (Remote Deployment)
# Start on server
uv run python mcp_server.py --transport sse --host 0.0.0.0 --port 8000
Client config:
{
"mcpServers": {
"rednote-crawler": {
"url": "http://your-server:8000/sse"
}
}
}
Option C: Streamable HTTP Mode
uv run python mcp_server.py --transport streamable-http --host 0.0.0.0 --port 8000
MCP Tools
| Tool | Description | Latency |
|---|---|---|
check_login_status |
Check login status | 5-10s |
search_notes |
Search notes by keyword (max_count 1-50) | 30-90s |
get_note_detail |
Collect note details + comments | 15-60s |
crawl_keyword |
Full pipeline: search → details → comments → save | 2-15min |
get_saved_data |
Query locally saved data files | <1s |
CLI Reference
| Command | Description |
|---|---|
uv run python mcp_server.py |
Start MCP server (stdio) |
uv run python mcp_server.py --transport sse |
Start MCP server (SSE) |
uv run python mcp_server.py --transport sse --host 0.0.0.0 --port 9090 |
SSE with custom host/port |
uv run python main.py |
Run full collection pipeline |
uv run python scripts/verify_login.py |
Login via QR code |
uv run pytest --cov |
Run tests with coverage |
Project Structure
mcp_server.py # MCP server entry (stdio / SSE / HTTP)
main.py # CLI collection entry
src/
├── session.py # MCP session (browser lifecycle + concurrency lock)
├── errors.py # Unified error format
├── stealth.py # Anti-detection (fingerprint + stealth injection)
├── browser.py # Playwright browser lifecycle
├── auth.py # Login & session management
├── search.py # Search collection (infinite scroll)
├── note.py # Note detail collection (with retry)
├── comment.py # Comment collection (Top N)
├── parser.py # Page data parsing
└── storage.py # Data storage (JSON + Excel/xlsx)
License
MIT
推荐服务器
Baidu Map
百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。
Playwright MCP Server
一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。
Magic Component Platform (MCP)
一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。
Audiense Insights MCP Server
通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。
VeyraX
一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。
graphlit-mcp-server
模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。
Kagi MCP Server
一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。
e2b-mcp-server
使用 MCP 通过 e2b 运行代码。
Neon MCP Server
用于与 Neon 管理 API 和数据库交互的 MCP 服务器
Exa MCP Server
模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。