B站小红书 Content Pipeline — URL to Markdown
Project description
Red Blue CP · 红蓝CP
自古红蓝出 CP —— B 站小红书 Content Pipeline
把 B 站和小红书的视频/图文内容转成纯文本,沉淀成本地 Markdown 知识库。
状态:v0.2.0,MIT 开源。P0 单篇闭环(B站/小红书 视频+图文 → Markdown,多人对谈自动说话人分离)+ P1 小红书博主全量下载 / 评论提取 / 扫码登录。
仓库 red-blue-cp | CLI rbcp | 输出默认 ~/transcript/
一、给用户(人)
把一个链接变成桌面上的一个 Markdown 文件。视频转文字、图文做识别、多人对谈分说话人。新版还能扫码登录后整个博主批量下、连评论一起存。
装 + 配
前置:Python 3.13、uv;ffmpeg(音频抽流兜底用);Chrome/Edge(仅评论/批量用)。
git clone <repo-url> && cd red-blue-cp
uv sync
cp .env.example .env # 填入百炼 DASHSCOPE_API_KEY(单篇公开笔记不需 cookie)
用
# 网页版:浏览器粘链接
uv run rbcp serve # http://0.0.0.0:8000
# 单篇(主要给人用)
uv run rbcp run "<B站 或 小红书 链接>" # 转录成 Markdown
uv run rbcp fetch "<小红书笔记链接>" --comments # 附带评论(含楼中楼)
# 博主全量 / 评论:先扫码登录一次(cookie 存本地复用)
uv run rbcp login # 弹浏览器→手机扫码→回终端按回车
uv run rbcp fetch "<博主主页链接>" --all # 先预览 X 篇,确认后逐条下
可选开关:--comments(带评论)/ --save-media(留原始媒体)/ --text-only(跳过转录只取正文)。
带评论 / 博主全量走浏览器抓接口,温和限频(实测清单 ~14、评论 ~4 请求·分钟⁻¹),不易触发风控。
二、给开发者
技术栈:FastAPI + Jinja2 + HTMX + typer + SQLite + asyncio + requests(REST/OpenAI 兼容 HTTP 直调百炼);博主全量/评论用 pydoll(CDP 连系统 Chrome 抓接口)。
结构:
app/
├── service/
│ ├── model.py # ModelProvider + DashscopeProvider(ASR/VLM/LLM)
│ ├── extractor.py # 编排:fetcher + model(含 --text-only/--save-media)
│ ├── fetcher.py # requests 爬 B站/小红书 API + 解析
│ ├── discover.py # P1 唯一碰浏览器处:pydoll 抓博主清单/评论 + rbcp login
│ ├── comments.py # 评论 → {note_id}.comments.md(楼中楼嵌套)
│ ├── markdown.py # frontmatter + sanitize + 原子写
│ └── storage.py # SQLite jobs
├── web/routes.py # WebUI + REST API
└── cli.py # rbcp 命令
开发:
uv run pytest # 全量测试
uv run rbcp serve # 本地起服务(单进程 uvicorn,禁 --workers)
部署:自部署工具,推荐国内 IP 机器(避海外风控);手机访问走 tailscale 或 frp。
文档导航:
| 文档 | 用途 |
|---|---|
| PRD.md | 产品需求:定位、五层架构、排期 |
| SPEC.md | 技术规格:架构、API、数据模型、决策 |
| PLAN.md | 里程碑、Checklist、风险、开放问题 |
| CLAUDE.md | 项目不变量、红线、协作规则 |
| LOG.md | 演进日志(决策/开发/经验,详情在 docs/devlog/) |
| docs/reference/xhs-api-notes.md | 小红书接口速查(字段/风控/cookie) |
三、给 Agent
定位:单篇给人用,博主批量为 Agent 设计——工具只列清单,按什么规则筛由 Agent 决定。
列清单(机器可读):
uv run rbcp list "<博主主页链接>" --json
返回固定结构(SPEC §4.3),关键是 complete 硬字段:
complete: true→ 拉全了,notes[]是全量complete: false→ 被风控/cookie 过期/网络中断截断,是半份,不得当全量,且退出码非 0
每条 note 给 note_id / title / type / liked_count / xsec_token(token 一次性会过期,拿到尽快用)。
典型工作流:list --json 拿清单 → 自己按关键词/类型筛出要的 → 对每条 fetch。或直接 fetch <博主url> --all --json --yes 整博主下,返回 {captured, downloaded, failed, results[]}。
uv run rbcp fetch "<笔记链接>" --comments --json # 单篇,结构化输出
uv run rbcp fetch "<博主url>" --all --json --yes # 整博主,逐条结果
注意:评论/博主全量需登录态(rbcp login 或 .env 配 XHS_COOKIE/RBCP_XHS_COOKIE_FILE);浏览器任务全局串行、温和限频;解析层契约与字段见 SPEC §4.4 和 小红书接口速查。
范围外
抖音 | MCP server(P2 按需)| Get 笔记历史迁移(独立项目)| 远期 LLM Wiki(本项目只产 Markdown 原料)。
License
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file red_blue_cp-0.3.0.tar.gz.
File metadata
- Download URL: red_blue_cp-0.3.0.tar.gz
- Upload date:
- Size: 2.7 MB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
4b92b60b1cda1ae2a44a24d7e7b9e2f6b13c56e996f38662e922817f5846e92a
|
|
| MD5 |
96badc1bc7fe4f1d168ec9e1b21253a8
|
|
| BLAKE2b-256 |
ecb483bdaf1aa0c88583663dd33c01d9ebb92f208abda70b07197c8b898ea405
|
Provenance
The following attestation bundles were made for red_blue_cp-0.3.0.tar.gz:
Publisher:
publish.yml on MuChengZJU/red-blue-cp
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
red_blue_cp-0.3.0.tar.gz -
Subject digest:
4b92b60b1cda1ae2a44a24d7e7b9e2f6b13c56e996f38662e922817f5846e92a - Sigstore transparency entry: 1708089851
- Sigstore integration time:
-
Permalink:
MuChengZJU/red-blue-cp@b84666380b02bfe369192f0b85ae384b7089b60f -
Branch / Tag:
refs/tags/v0.3.0 - Owner: https://github.com/MuChengZJU
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@b84666380b02bfe369192f0b85ae384b7089b60f -
Trigger Event:
push
-
Statement type:
File details
Details for the file red_blue_cp-0.3.0-py3-none-any.whl.
File metadata
- Download URL: red_blue_cp-0.3.0-py3-none-any.whl
- Upload date:
- Size: 52.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
3f7ec68e6f38a8dc9a09cd66a611f5f1393e43541fbc565289591e9279db99ad
|
|
| MD5 |
6d6c45a9f4d6aca91eab117cb5d46c4b
|
|
| BLAKE2b-256 |
99fca096ec55dd83a4e0b255138929de2dbcfb152a7b741a018766f0b50f9f5e
|
Provenance
The following attestation bundles were made for red_blue_cp-0.3.0-py3-none-any.whl:
Publisher:
publish.yml on MuChengZJU/red-blue-cp
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
red_blue_cp-0.3.0-py3-none-any.whl -
Subject digest:
3f7ec68e6f38a8dc9a09cd66a611f5f1393e43541fbc565289591e9279db99ad - Sigstore transparency entry: 1708089882
- Sigstore integration time:
-
Permalink:
MuChengZJU/red-blue-cp@b84666380b02bfe369192f0b85ae384b7089b60f -
Branch / Tag:
refs/tags/v0.3.0 - Owner: https://github.com/MuChengZJU
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@b84666380b02bfe369192f0b85ae384b7089b60f -
Trigger Event:
push
-
Statement type: