一句话介绍:MediaCrawler 是一个开源的多平台自媒体数据采集工具,支持小红书、抖音、快手、B 站、微博、贴吧、知乎等平台的公开帖子与评论采集,适合用来做内容研究、舆情观察和数据整理。
免责声明:本项目作者明确表示仅供学习和研究使用,禁止用于商业用途和非法用途。使用时请遵守当地法律法规与各平台的服务条款,不要采集非公开、隐私或付费内容,不要用于大规模爬取和绕过平台风控。
项目速览
- 项目地址:https://github.com/NanmiCoder/MediaCrawler
- 官方文档:https://nanmicoder.github.io/MediaCrawler/
- 开发语言:Python,配合 Node.js 使用
- 创建时间:2023 年 6 月
- 截至 2026 年 10 月 25 日核查:约 68,458 Star、13,037 Fork,累计 827 次提交,最新提交为 2026 年 10 月 15 日,项目仍在维护(Star 数会随时间变化,以仓库页面为准)
- 许可证说明:仓库标注为 NOASSERTION,使用前请以仓库内的 LICENSE 文件为准
它能做什么
MediaCrawler 的核心功能,是把多个平台的公开内容统一成结构化数据,而不是让你一个平台一个平台手动翻:
- 关键词搜索:按关键词搜索相关帖子
- 指定帖子采集:按帖子 ID 或链接采集指定内容
- 评论采集:支持一级评论和二级评论(默认不开启评论采集,需要手动开启)
- 创作者主页:采集指定创作者发布的内容
- 登录态缓存:登录一次后可以复用,减少重复扫码
- 代理池支持:可以在配置中使用 IP 代理池
- 评论词云图:可以生成评论词云图,用于快速了解讨论热点
- 媒体下载:可以下载封面、视频和图文图片(默认关闭)
- WebUI 界面:提供可视化操作界面,不用全程敲命令行
- 多种存储格式:支持 CSV、JSON、JSONL、Excel、SQLite、MySQL
支持的平台
| 平台 | 关键词搜索 | 指定帖子 | 二级评论 | 创作者主页 | 登录态缓存 | 词云图 |
|---|---|---|---|---|---|---|
| 小红书 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
| 抖音 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
| 快手 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
| B 站 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
| 微博 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
| 贴吧 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
| 知乎 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
媒体下载支持小红书、抖音、快手、B 站、微博;贴吧和知乎的数据结构中没有媒体字段,暂不支持媒体下载。
技术原理:为什么门槛相对低
很多自媒体平台的接口都有签名和加密,直接逆向非常麻烦。MediaCrawler 换了一个思路:
- 基于 Playwright 做浏览器自动化;
- 复用已经登录的浏览器上下文和登录态;
- 通过 JS 表达式获取所需的签名参数。
也就是说,它不去硬啃各家的加密算法,而是借助真实浏览器的登录状态完成采集。这也是它上手相对容易、又能覆盖多个平台的关键原因。
代价也很明显:它依赖登录态和平台页面结构,平台一旦改版或加强风控,采集就可能失效,需要等项目更新或自己调整。这类工具从来不是“一劳永逸”的。
安装部署
1. 准备环境
- uv(推荐的 Python 包管理工具)
- Node.js ≥ 16(抖音、知乎等平台需要)
- Chrome 浏览器 ≥ 144(使用 CDP 模式时推荐)
- Python:以仓库
pyproject.toml为准,官方示例使用 Python 3.11
先验证 uv 是否装好:
uv --version
2. 下载项目并安装依赖
git clone https://github.com/NanmiCoder/MediaCrawler.git
cd MediaCrawler
uv sync
uv sync 会按仓库的锁定文件对齐 Python 版本和依赖,比直接 pip install 更稳定。
如果不使用 Chrome CDP 模式,而是使用标准 Playwright 模式,还需要安装浏览器驱动:
uv run playwright install
3. 选择登录方式
项目默认使用 CDP 模式连接你已有的 Chrome 浏览器,可以复用浏览器已有的登录状态和 Cookie:
- 在 Chrome 地址栏输入
chrome://inspect/#remote-debugging; - 勾选“Allow remote debugging for this browser instance”;
- 页面显示
Server running at: 127.0.0.1:9222即表示已就绪; - 运行爬虫后,Chrome 会弹出确认对话框,60 秒内点“接受”即可。
如果不想用 CDP 模式,可以在 config/base_config.py 中设置:
ENABLE_CDP_MODE = False
切换为标准 Playwright 模式。
使用方法
1. 先改配置文件
主要配置都在 config/base_config.py,里面有中文注释,包括:
- 爬取平台
- 关键词或指定帖子 ID 列表
- 是否爬评论:
ENABLE_GET_COMMENTS - 是否下载媒体:
ENABLE_GET_MEDIA - 数据保存路径和格式
注意:项目默认不开启评论爬取模式,需要评论时要先把 ENABLE_GET_COMMENTS 改为开启;媒体下载默认也是关闭的。
2. 命令行使用
关键词搜索(以小红书为例,扫码登录):
uv run main.py --platform xhs --lt qrcode --type search
采集指定帖子:
uv run main.py --platform xhs --lt qrcode --type detail
查看所有平台和参数:
uv run main.py --help
--platform 后接平台代码,--type 区分搜索和指定帖子两种模式,具体可选值以 main.py --help 的输出为准。
3. 下载媒体(可选)
命令行方式:
uv run main.py --platform xhs --type detail --specified_id <帖子URL或ID> --get_media true
也可以在配置文件中设置 ENABLE_GET_MEDIA = True。
媒体默认按帖子聚合存放,例如:
data/xhs/media/{帖子ID}/
├── cover.jpg
├── video.mp4
└── 001.jpg
B 站视频默认走 DASH 路径,需要先安装 ffmpeg 才能拿到最高画质并合流;未安装时会自动降级为 mp4 直链。
4. WebUI 使用(不想敲命令时)
开发调试模式(推荐):
开两个终端,第一个起后端 API 服务:
uv run uvicorn api.main:app --port 8080 --reload
第二个进前端目录:
cd webui
npm install
npm run dev
然后打开 http://localhost:5173/ 即可使用。前端会把 /api 代理到 8080 的后端。首次打开会做环境检测(调用 /api/env/check),前提是后端已经启动;如果检测失败,可以点“跳过检测”临时进入。
WebUI 里可以做到:
- 可视化配置平台、登录方式、爬取类型等参数
- 实时查看运行状态和日志
- 预览和导出数据
只部署一次的生产模式:
cd webui
npm install
npm run build
构建产物会输出到 api/webui/,之后只需启动后端服务,打开 http://localhost:8080 即可。
5. 数据保存在哪里
默认情况下,数据落在项目下的 data/ 目录,支持 CSV、JSON、JSONL、Excel、SQLite、MySQL 等格式。媒体下载失败只会记录日志,不会中断整个爬取流程;已经下载过的文件会被跳过,需要重新下载时删除对应目录即可。
使用注意事项
这部分比安装步骤更重要,建议使用前先看完:
- 只做学习和研究用途:作者已明确禁止商业用途和非法用途,不要把采集到的数据直接商用、转卖或用于侵犯他人权益的场景。
- 只采公开内容:不要碰隐私信息、非公开内容和需要绕过付费墙的内容;转载他人内容时注意版权和出处。
- 不要用主号:项目走的是登录态,频率过高、量过大都可能触发平台风控,影响的是登录的那个账号。建议用不重要的账号、低频、小规模使用。
- 不要大规模爬取:限速、限量、按需采集;不要用它去冲击平台服务器,也不要把它当成稳定的生产采集服务。
- 平台会变,工具会失效:签名、页面结构、风控策略都可能随时调整,某天突然爬不动是正常现象,需要看项目更新和 Issue 区的反馈。
- 开源版有边界:开源版以单账号、小规模使用为主;断点续爬、多账号加代理池等更偏生产化的能力属于官方另行提供的 Pro 版本,评估前先分清自己到底需要哪一档。
适合谁,不适合谁
适合:
- 想研究某个话题在多个平台上的讨论和评论趋势的人
- 想做内容选题参考、舆情观察、公开数据整理的人
- 想学习 Playwright、登录态复用、多平台爬虫架构的开发者
不适合:
- 想批量搬运、洗稿、直接商用他人内容的人
- 需要 7×24 小时稳定、大规模采集的生产系统(这需要另外的架构、合规评估和运维投入)
- 不想折腾环境、遇到平台改版就希望“永远能用”的人
结语
MediaCrawler 的价值不在于“能爬”,而在于把多个平台的采集、登录态复用、结构化存储和 WebUI 操作打包成了一个现成的起点,省去了重复造轮子的时间。但它同时也把责任交给了使用者:采什么、采多少、怎么用,都需要自己把握分寸。
如果你只是偶尔查一个话题,先用公开搜索和手动整理就够了;如果你确实有持续的多平台研究需求,再按上面的步骤在本地小规模试跑一次,看数据质量和稳定性是否符合预期,再决定要不要长期使用。