一个功能强大的小红书笔记爬取与管理工具,支持批量解析、预览、ZIP下载等功能。
- 可视化编辑小红书爆款图
- 支持多种布局和主题配色
- AI 智能识别图片文字
- 批量解析:支持一次性解析多个小红书笔记链接
- 实时进度:解析过程中显示「已解析 3/10」等流式进度(SSE)
- 解析历史:自动保存最近解析过的链接,可展开「解析历史」点击填入再次解析
- 失败重试:若上次有解析失败,可点击「重试失败链接」仅重试失败项
- 智能提取:粘贴文本时自动提取其中的链接(支持 Ctrl+V 和右键粘贴)
- 预览方块:上图下文展示,直观查看笔记内容(默认显示20个,支持查看更多)
- 预览弹窗:点击预览方块查看详细信息
- 左侧:图片轮播(支持滑动/箭头翻页,适配手机和电脑端)
- 右侧:标题、文字、标签;正文区域带「一键复制」,可复制整段文本到剪贴板
- 支持选择性下载图片(在底部缩略图区域选择)
- 下载旁有「同时下载文本」勾选框,取消后 ZIP 仅含图片
- ZIP下载:📦 自动打包成ZIP文件下载到本地
- 单个笔记下载:选择图片与是否含文本后点击下载,自动生成ZIP
- 批量下载:一键下载多个笔记,每个笔记一个ZIP;旁有「同时下载文本」勾选框
- ZIP内容:可选包含文本文件(标题+内容+标签+链接)和选中的图片
- 批量操作:
- 批量选中笔记
- 一键下载(自动打包成ZIP,可选是否含文本)
- 批量删除(移至回收站)
- 回收站:
- 查看已删除的笔记
- 批量恢复
- 批量永久删除(需确认)
- 前端:Next.js 16 + React 19 + TypeScript + Tailwind CSS
- 后端:FastAPI + Python + Playwright
- 存储:localStorage(前端本地存储)
# 前端依赖
npm install
# 后端依赖
cd backend
pip install -r requirements.txtcd backend
python main.py后端服务将在 http://127.0.0.1:8000 启动。
npm run dev前端服务将在 http://localhost:3000 启动。
- 主页(爆款图生成器):http://localhost:3000
- 爬取工具:http://localhost:3000/crawler
- 访问
/crawler页面 - 在输入框中粘贴小红书笔记链接(支持多个,每行一个)
- 支持 Ctrl+V 快捷键粘贴
- 支持 右键菜单粘贴
- 粘贴包含链接的文本时,会自动提取其中的链接
- 点击"开始解析"按钮
- 解析完成后,笔记会以预览方块的形式展示在预览区
- 点击预览方块可以查看详细信息并下载
- 点击预览方块打开预览弹窗
- 在底部缩略图区域点击图片进行选择/取消选择(默认全选)
- 点击"下载"按钮
- 浏览器会自动下载一个ZIP文件到本地下载文件夹
- ZIP文件包含:
笔记标题.txt- 包含标题、正文、标签、来源链接image_1.jpg- 第一张图片image_2.png- 第二张图片- ...(其他选中的图片)
- 点击"批量选中"按钮进入批量模式
- 点击预览方块进行选择(或点击"全选")
- 点击"一键下载"按钮
- 系统会依次下载多个ZIP文件(每个笔记一个ZIP)
- 批量下载时会在每个文件之间添加延迟,避免浏览器阻止多个下载
- 点击"批量选中"按钮进入批量模式
- 点击预览方块进行选择
- 选择完成后,可以:
- 点击"一键下载":自动打包成ZIP文件下载
- 点击"批量删除":将选中笔记移至回收站
- 切换到"回收站"标签页
- 可以批量恢复或永久删除笔记
xhs-factory/
├── backend/ # Python 后端
│ ├── main.py # FastAPI 主文件(包含ZIP下载接口)
│ ├── scraper.py # 爬虫核心逻辑
│ ├── requirements.txt # Python 依赖
│ └── Dockerfile # Fly.io 部署配置
├── src/
│ ├── app/
│ │ ├── page.tsx # 主页(爆款图生成器)
│ │ ├── crawler/
│ │ │ └── page.tsx # 爬取工具页面
│ │ ├── api/
│ │ │ ├── batch-parse/ # 批量解析 API(一次性)
│ │ │ ├── batch-parse-stream/ # 批量解析流式 API(SSE 实时进度)
│ │ │ ├── download-note/ # 下载 API(旧版)
│ │ │ └── browse-folder/ # 文件夹浏览 API
│ │ └── layout.tsx # 根布局(包含图标配置)
│ ├── components/
│ │ ├── EditorPanel.tsx # 编辑器面板
│ │ ├── CanvasPreview.tsx # 画布预览
│ │ └── NotePreviewModal.tsx # 笔记预览弹窗
│ ├── types.ts # TypeScript 类型定义
│ └── lib/
│ └── utils.ts # 工具函数
├── public/
│ ├── icon-option-1.svg # 图标选项1(已应用)
│ ├── icon-option-2.svg # 图标选项2
│ ├── ... # 其他图标选项
│ └── icon-preview.html # 图标预览页面
├── fly.toml # Fly.io 配置文件
├── FLY_DEPLOY.md # Fly.io 部署详细说明
├── ICON_SELECTION.md # 图标选择指南
└── package.json
POST /api/batch_parse- 批量解析笔记链接(一次性返回)POST /api/batch_parse_stream- 批量解析笔记链接(SSE 流式,实时进度)POST /api/download_zip- ZIP下载(推荐,直接下载到本地;支持include_text参数)POST /api/selective_download- 选择性下载(旧版,保存到服务器)POST /api/browse_folder- 浏览文件夹(用于选择保存路径)POST /api/generate- 生成爆款图内容(主页使用)
POST /api/batch-parse- 批量解析代理(一次性)POST /api/batch-parse-stream- 批量解析流式代理(SSE,用于实时进度)POST /api/download-note- 下载代理(旧版)POST /api/browse-folder- 文件夹浏览代理
BATCH_PARSE_CONCURRENCY- 批量解析并发数(默认5,范围 1~10)。目标站限流严时可调小。CRAWL_INTERVAL_MIN/CRAWL_INTERVAL_MAX- 每条笔记解析完成后的等待秒数(默认 2~5),减轻限流。IMAGE_DOWNLOAD_DELAY_MIN/IMAGE_DOWNLOAD_DELAY_MAX- ZIP 打包时每张图片之间的延迟秒数(默认 0.2~0.5)。PARSE_RETRY_TIMES- 单条笔记抓取失败时的重试次数(默认1,即最多共 2 次尝试);限流不重试。PARSE_RETRY_DELAY_MIN/PARSE_RETRY_DELAY_MAX- 重试前等待秒数(默认 1~2)。XHS_CRAWL_DEBUG- 设为1或true时输出极其详细的抓取步骤日志(goto、标题、state 等),便于排查解析失败。
-
启动后端:
cd backend python main.py后端服务将在
http://127.0.0.1:8000启动。 -
启动前端:
npm run dev
前端服务将在
http://localhost:3000启动。
- 将代码推送到 GitHub
- 在 Vercel 中导入项目
- 设置环境变量:
NEXT_PUBLIC_BACKEND_URL=https://your-fly-app.fly.dev
- 部署完成
详细部署步骤请参考:FLY_DEPLOY.md
快速部署:
# 1. 安装 flyctl(如果还没安装)
# Windows: 下载 https://github.com/superfly/flyctl/releases/latest
# 2. 登录
flyctl auth login
# 3. 部署
flyctl deploy部署后的URL:
- 后端地址:
https://xhs-factory-backend.fly.dev(或你自定义的app名称) - API文档:
https://your-app.fly.dev/docs
重要配置:
- ✅ 已配置自动停机(
min_machines_running = 0) - ✅ 空闲时自动停止,节省免费额度
- ✅ 有请求时自动启动(会有几秒冷启动延迟)
-
Playwright 环境:
- 本地开发:确保已安装 Playwright 浏览器驱动
playwright install chromium
- Fly.io 部署:Dockerfile 已自动安装,无需手动操作
- 本地开发:确保已安装 Playwright 浏览器驱动
-
后端地址配置:
- 本地开发:默认
http://127.0.0.1:8000 - 生产环境:在 Vercel 环境变量中设置
NEXT_PUBLIC_BACKEND_URL
- 本地开发:默认
-
数据存储:
- 笔记数据存储在浏览器的 localStorage 中,清除浏览器数据会丢失所有记录
- 下载的ZIP文件保存在本地下载文件夹,不会占用服务器存储
-
ZIP下载功能:
- 所有下载都会自动打包成ZIP文件
- 可选择「同时下载文本」;取消勾选时 ZIP 仅含图片
- 支持选择性下载(只下载选中的图片)
-
解析并发与限流:
- 后端通过环境变量
BATCH_PARSE_CONCURRENCY控制批量解析并发数(默认 5) - 若目标站限流较严,可在 backend 目录下设置该变量为较小值(如 3)
- 后端通过环境变量
-
Fly.io 免费额度:
- 免费额度有限,建议合理使用
- 已配置自动停机,空闲时不消耗资源
- 如果超出免费额度,服务会自动停止(需要升级账户才能继续使用)
项目提供了 8 个不同风格的图标供选择:
- 选项1-3:小红书风格(红色主题)
- 选项4-8:硅谷风格(简约大方,无XHS字样)
预览和选择图标:
- 启动开发服务器:
npm run dev - 访问:
http://localhost:3000/icon-preview.html - 选择喜欢的图标后告诉我,我会帮你应用到项目中
当前已应用:选项1(现代简约风格)
MIT