1. MediaCrawler 是什么?
MediaCrawler 是目前最全面的中文社交媒体开源爬虫工具,GitHub 星标超过 64,000,由开发者 NanmiCoder 维护。它基于 Python + Playwright 浏览器自动化框架,通过保留登录态的方式直接调用平台 API,无需逆向复杂的 JS 加密算法,大幅降低了技术门槛。
核心定位:面向数据分析师、舆情研究人员和内容运营者的学习工具,支持一键采集 7 大中文社交平台的公开内容数据。
与 Crawl4AI 这类通用网页爬虫不同,MediaCrawler 专注于中文社交媒体平台,内置了各平台的签名逻辑和数据解析规则,开箱即用。如果你需要采集海外平台数据,可以看看 Wiseflow 深度解析。
2. 支持的 7 大平台与功能矩阵
| 平台 | 关键词搜索 | 指定帖子爬取 | 二级评论 | 创作者主页 | 登录态缓存 | IP 代理池 | 评论词云 |
|---|---|---|---|---|---|---|---|
| 小红书 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
| 抖音 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
| 快手 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
| B 站 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
| 微博 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
| 贴吧 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
| 知乎 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
七个平台的功能支持完全一致——这是 MediaCrawler 最大的架构优势:统一的接口设计,切换平台只需改一个参数。
3. 技术架构解析
MediaCrawler 的技术栈设计围绕「降低反检测风险」展开:
┌─────────────────────────────────────────────┐
│ MediaCrawler 架构 │
├─────────────────────────────────────────────┤
│ 用户层 CLI 命令行 / WebUI 可视化界面 │
├─────────────────────────────────────────────┤
│ 调度层 平台调度器 → 统一爬虫接口 │
├─────────────────────────────────────────────┤
│ 执行层 Playwright (CDP 模式) │
│ ├─ 登录态管理 (QR/Phone/Cookie) │
│ ├─ JS 签名计算 (复用浏览器上下文) │
│ └─ 反检测 (真实浏览器指纹) │
├─────────────────────────────────────────────┤
│ 数据层 CSV / JSON / JSONL / Excel │
│ SQLite / MySQL / PostgreSQL │
└─────────────────────────────────────────────┘
核心技术原理:
- CDP 模式(推荐):通过 Chrome DevTools Protocol 连接用户已有的 Chrome 浏览器,复用真实浏览器的 Cookie、扩展和浏览历史,反检测效果最佳
- 签名复用:利用保留登录态的浏览器上下文环境,通过 JS 表达式直接获取平台签名参数,无需逆向加密算法
- 登录态缓存:首次扫码登录后保存 Cookie,后续运行自动复用,避免重复登录
4. 安装与快速上手
4.1 环境准备
# 1. 安装 uv(推荐的 Python 包管理器)
curl -LsSf https://astral.sh/uv/install.sh | sh
# 2. 确认 Node.js >= 16(抖音和知乎签名需要)
node --version
# 3. 克隆项目
git clone https://github.com/NanmiCoder/MediaCrawler.git
cd MediaCrawler
# 4. 安装依赖(uv 自动处理 Python 版本和依赖)
uv sync
4.2 Chrome 浏览器配置(CDP 模式)
MediaCrawler 默认使用 CDP 模式,需要配置 Chrome:
- 安装 Chrome >= 144
- 地址栏输入
chrome://inspect/#remote-debugging - 勾选 "Allow remote debugging for this browser instance"
- 确认显示
Server running at: 127.0.0.1:9222
如果不想用 CDP 模式,在 config/base_config.py 中设置 ENABLE_CDP_MODE = False。
4.3 首次运行
# 小红书关键词搜索(默认爬取 15 条笔记)
uv run main.py --platform xhs --lt qrcode --type search
# 首次运行会弹出二维码,用小红书 APP 扫码登录
# 登录态自动缓存,后续无需重复扫码
5. 核心配置详解
config/base_config.py 是关键配置文件,以下是常用配置项:
# 目标平台:xhs | dy | ks | bili | wb | tieba | zhihu
PLATFORM = "xhs"
# 搜索关键词(英文逗号分隔)
KEYWORDS = "Python教程,编程副业,AI工具推荐"
# 登录方式:qrcode(扫码)| phone(手机)| cookie(手动填)
LOGIN_TYPE = "qrcode"
# 爬取类型:search(关键词搜索)| detail(指定帖子)| creator(创作者主页)
CRAWLER_TYPE = "search"
# 数据存储格式:csv | db | json | jsonl | sqlite | excel | postgres
SAVE_DATA_OPTION = "jsonl"
# 每个关键词最大爬取笔记数
CRAWLER_MAX_NOTES_COUNT = 15
# 并发数(建议保持 1,避免触发风控)
MAX_CONCURRENCY_NUM = 1
# 是否开启评论爬取
ENABLE_GET_COMMENTS = True
# 是否开启二级评论
ENABLE_GET_SUB_COMMENTS = False
# IP 代理配置
ENABLE_IP_PROXY = False
IP_PROXY_PROVIDER_NAME = "kuaidaili"
6. 各平台采集实战
6.1 小红书采集
# 关键词搜索笔记
uv run main.py --platform xhs --lt qrcode --type search
# 指定笔记 ID 爬取详情
uv run main.py --platform xhs --lt qrcode --type detail
# 爬取创作者主页所有笔记
uv run main.py --platform xhs --lt qrcode --type creator
小红书数据字段包括:笔记标题、正文内容、图片列表、点赞数、收藏数、评论数、作者信息、发布时间等。
6.2 抖音采集
# 搜索视频
uv run main.py --platform dy --lt qrcode --type search
# 指定视频 ID
uv run main.py --platform dy --lt qrcode --type detail
抖音采集需要 Node.js 环境用于签名计算,数据字段包括视频标题、播放地址、封面图、点赞数、评论数、分享数等。
6.3 B 站采集
# 搜索视频
uv run main.py --platform bili --lt qrcode --type search
# 指定视频(BV 号)
uv run main.py --platform bili --lt qrcode --type detail
B 站数据包含:视频标题、BV 号、播放量、弹幕数、点赞投币收藏数、UP 主信息等。
6.4 微博 / 贴吧 / 知乎 / 快手
# 微博
uv run main.py --platform wb --lt qrcode --type search
# 百度贴吧
uv run main.py --platform tieba --lt qrcode --type search
# 知乎
uv run main.py --platform zhihu --lt qrcode --type search
# 快手
uv run main.py --platform ks --lt qrcode --type search
所有平台命令格式一致,只需替换 --platform 参数。
7. 数据存储与导出
MediaCrawler 支持 7 种数据存储格式,数据默认保存在 data/ 目录下:
| 格式 | 适用场景 | 特点 |
|---|---|---|
| JSONL | 日常采集(默认) | 逐行写入,断点续采友好 |
| CSV | Excel 分析 | 表格软件直接打开 |
| JSON | 程序对接 | 标准格式,嵌套结构 |
| Excel | 报告输出 | 带格式的电子表格 |
| SQLite | 本地数据库 | 轻量查询,无需额外服务 |
| MySQL | 生产环境 | 支持去重,适合大规模数据 |
| PostgreSQL | 企业级 | 完整的关系型数据库支持 |
# 切换到 MySQL 存储
SAVE_DATA_OPTION = "db"
# 在 db_config.py 中配置连接信息
DB_HOST = "localhost"
DB_PORT = 3306
DB_USER = "root"
DB_PASSWORD = "your_password"
DB_NAME = "media_crawler"
8. 高级用法
8.1 WebUI 可视化操作
# 终端 1:启动后端 API
uv run uvicorn api.main:app --port 8080 --reload
# 终端 2:启动前端(开发模式)
cd webui && npm install && npm run dev
# 访问 http://localhost:5173/
# 或者构建生产版本
cd webui && npm install && npm run build
# 只需启动 API 服务器,访问 http://localhost:8080
WebUI 提供可视化配置界面,无需命令行即可操作爬虫。
8.2 IP 代理池配置
大规模采集时建议启用代理池:
ENABLE_IP_PROXY = True
IP_PROXY_POOL_COUNT = 2
IP_PROXY_PROVIDER_NAME = "kuaidaili" # 支持 kuaidaili | wandouhttp | static
# 静态代理配置
IP_PROXY_PROVIDER_NAME = "static"
STATIC_PROXY_URL = "http://user:password@your_proxy:port"
8.3 并发与频率控制
# 并发数(谨慎设置,过高易触发风控)
MAX_CONCURRENCY_NUM = 1
# 每个关键词最大采集数
CRAWLER_MAX_NOTES_COUNT = 50
# 翻页起始位置
START_PAGE = 1
8.4 评论词云生成
MediaCrawler 内置评论词云功能,可自动生成可视化词云图:
# 在 base_config.py 中开启
# 需要先安装 wordcloud 等依赖
ENABLE_WORD_CLOUD = True
9. 合规性与法律风险提示
重要提醒:使用 MediaCrawler 前请务必了解以下风险:
- 法律合规:遵守《网络安全法》《数据安全法》《个人信息保护法》,不得用于商业用途
- 平台规则:尊重各平台 robots.txt 和用户协议,避免大规模爬取
- 频率控制:合理控制请求频率,不要给平台造成负担
- 数据用途:仅限学习和研究目的,不得用于非法用途
- 隐私保护:不得爬取和传播他人个人隐私信息
参考:爬虫违法违规案件合集
10. 与其他工具对比
| 特性 | MediaCrawler | Snscrape | Tweepy | 自建爬虫 |
|---|---|---|---|---|
| 目标平台 | 7 大中文平台 | Twitter/X | Twitter/X | 任意平台 |
| 反检测 | CDP 真实浏览器 | 无 | API 官方 | 需自行实现 |
| 登录管理 | 扫码/手机/Cookie | 无需 | OAuth | 手动实现 |
| 数据存储 | 7 种格式 | 命令行输出 | JSON | 自行实现 |
| 上手难度 | 低(配置即用) | 低 | 中 | 高 |
| 评论抓取 | ✅ 含二级评论 | ❌ | ✅ | 需开发 |
| 维护状态 | 活跃(64K+ Stars) | 停滞 | 活跃 | 取决于自己 |
如果你需要通用网页爬取能力,推荐 Crawl4AI;如果需要信息流监控和 AI 摘要,推荐 Wiseflow。MediaCrawler 的独特价值在于对中文社交媒体的深度适配。
11. 常见问题 FAQ
MediaCrawler 支持哪些 Python 版本?
推荐使用 Python 3.11,这是项目依赖包的主要测试版本。使用 uv 安装时会自动匹配正确的 Python 版本。
扫码登录失败怎么办?
如果使用 CDP 模式,确保 Chrome 版本 >= 144 且已开启远程调试。如果反复要求扫码,关闭浏览器后重新开启远程调试。也可以尝试切换到 HEADLESS = False 手动通过滑动验证。
可以同时在多个平台爬取吗?
可以,但建议串行执行。每次运行指定一个 --platform 参数,完成后再切换下一个平台。并发多平台容易触发风控。
数据存储在哪里?
默认保存在项目根目录的 data/ 文件夹下,按平台名分子目录。可以通过 SAVE_DATA_PATH 自定义存储路径。
MediaCrawler 可以商用吗?
不可以。项目采用非商业学习许可证(NON-COMMERCIAL LEARNING LICENSE 1.1),明确禁止商业用途。如需商用,请联系作者获取授权。
12. 总结
MediaCrawler 是目前最完善的中文社交媒体数据采集开源工具,64,000+ GitHub Stars 证明了它的实用价值。它的核心优势在于:
- 覆盖面广:7 大平台统一接口,切换零成本
- 反检测强:CDP 模式复用真实浏览器环境
- 上手简单:uv 一键安装,配置即用
- 存储灵活:7 种数据格式适配不同场景
- 社区活跃:持续更新,问题响应快
对于数据分析师、舆情研究人员和内容运营者来说,MediaCrawler 是学习社交媒体数据采集技术的最佳起点。但请务必在合法合规的前提下使用,尊重平台规则和用户隐私。