MediaCrawler 项目深度分析

一、基本盘

维度 数据
Stars 59,510
Forks 11,724
创建时间 2023年6月9日
最近更新 2026年7月30日
总 Commits 794
Open Issues 185
许可证 自定义「非商业学习许可」(NON-COMMERCIAL LEARNING LICENSE 1.1)
主语言 Python (3.11)
维护模式 单人为主 (NanmiCoder)

Star 量在同领域(中文自媒体数据采集)排第一,且仍在活跃维护。


二、项目定位

一个多平台自媒体数据采集工具,覆盖国内 7 个主流社交媒体平台,支持关键词搜索、指定帖子详情、评论爬取、创作者主页采集等功能。

平台功能矩阵

平台 关键词搜索 指定帖子爬取 二级评论 创作者主页 登录态缓存 IP代理池 评论词云
小红书
抖音
快手
B站
微博
贴吧
知乎

三、技术架构

3.1 整体架构

复制代码
main.py (入口,工厂模式)
  ├── CrawlerFactory → 7个平台爬虫
  │     ├── XiaoHongShuCrawler / DouYinCrawler / KuaishouCrawler
  │     ├── BilibiliCrawler / WeiboCrawler / TieBaCrawler / ZhihuCrawler
  │     └── 全部继承 AbstractCrawler 基类
  ├── base/          --- 抽象基类、公共组件
  ├── store/         --- 多格式数据输出 (CSV/JSON/Excel/SQLite/MySQL/PostgreSQL)
  ├── proxy/         --- IP代理池管理
  ├── cache/         --- 缓存抽象 (支持 Redis)
  ├── database/      --- ORM 模型,支持自动建表
  ├── config/        --- 配置中心 (base_config.py)
  ├── api/           --- FastAPI 后端服务
  ├── webui/         --- Vite 前端界面
  ├── tools/         --- 工具函数、CDP 管理、异步文件写入
  └── constant/      --- 常量定义

3.2 目录结构

复制代码
MediaCrawler/
├── api/                  # FastAPI 后端服务
├── base/                 # 抽象基类
├── cache/                # 缓存层 (Redis支持)
├── cmd_arg/              # 命令行参数
├── config/               # 配置文件
├── constant/             # 常量定义
├── database/             # 数据库模型
├── docs/                 # VitePress 文档站
├── libs/                 # 第三方库
├── media_platform/       # 7个平台爬虫实现
│   ├── xhs/              # 小红书
│   ├── douyin/           # 抖音
│   ├── kuaishou/         # 快手
│   ├── bilibili/         # B站
│   ├── weibo/            # 微博
│   ├── tieba/            # 贴吧
│   └── zhihu/            # 知乎
├── model/                # 数据模型
├── proxy/                # 代理池
├── store/                # 数据存储层
├── test/ / tests/        # 测试
├── tools/                # 工具函数
├── webui/                # Web 前端 (Vite)
├── main.py               # 入口文件
├── pyproject.toml        # Python 项目配置
└── requirements.txt      # 依赖列表

3.3 设计模式

  • 工厂模式CrawlerFactory 通过平台标识(xhs/dy/bili 等)创建对应的爬虫实例
  • 模板方法模式AbstractCrawler 基类定义 start() 流程骨架,子类实现各平台特有逻辑
  • 策略模式:存储层支持 CSV/JSON/Excel/SQLite/MySQL/PostgreSQL 可插拔切换
  • 代理模式:代理池抽象,支持多代理提供者

四、核心技术原理 --- CDP 模式

这是 MediaCrawler 架构中最关键的技术创新。

4.1 什么是 CDP

Chrome DevTools Protocol --- Chrome 浏览器对外暴露的底层通信协议。你按 F12 打开的开发者工具就是通过 CDP 跟浏览器内核通信。任何程序都可以通过 WebSocket 连接 localhost:9222 来操控 Chrome 浏览器(查看 DOM、执行 JS、监控网络请求、截图等)。

Playwright 和 Puppeteer 底层走的也是 CDP。

4.2 MediaCrawler 的 CDP 做法

传统爬虫路径:

复制代码
Python脚本 → launch() 启动新Chrome → 无登录态 → 需要扫码登录 → 高风控风险

MediaCrawler CDP 路径:

复制代码
用户手动打开 Chrome(已登录各平台)
         ↕ WebSocket (localhost:9222)
Python脚本 → connect_over_cdp() 连上已有浏览器 → 复用Cookie/登录态 → 低风控风险

三步走

  1. 用户启动 Chrome 并开启远程调试:chrome://inspect/#remote-debugging
  2. Playwright 通过 CDP 连上:playwright.chromium.connect_over_cdp("http://localhost:9222")
  3. 在浏览器 JS 环境中执行签名函数:page.evaluate("window._webmsxyw()")

4.3 为什么这招聪明

传统的爬虫有两种路径:

路径 做法 痛点
逆向加密算法 反编译 App、分析混淆 JS、还原签名算法 成本极高,平台一更新就得重来
浏览器自动化 Playwright/Selenium 模拟点击 没登录态,风控检测高,容易被封

CDP 模式走了第三条路:不逆向加密,不模拟点击,直接在真人浏览器里调用平台自己的签名函数

复制代码
page.evaluate("window._webmsxyw()")  → 返回 { xs: "abc...", xt: "123..." }
                                          ↓
                          Python 拿着签名直接发 HTTP 请求

核心洞察:平台的 JS 源代码里一定包含签名算法,CDP 让你在浏览器运行环境里直接拿到计算结果------你不需要知道算法怎么算的,只需要知道函数名是什么。

4.4 CDP 模式的局限性

  1. 依赖平台暴露签名函数到 window 对象上。如果平台做严格的闭包隔离不暴露,这招就废了。
  2. 平台改前端 JS 时函数名可能变更,需要同步更新。不过改一两行 JS 表达式的成本远低于重新逆向。
  3. 需要 Chrome >= 144 且需要用户手动开启远程调试。
  4. 本质上仍是寄生,平台理论上可以通过检测 CDP 连接来反制。

五、优劣势分析

5.1 优势

优势点 说明
架构清晰 工厂模式 + 抽象基类,新增平台只需实现子类
CDP 模式 利用用户浏览器登录态,大幅降低风控风险
零逆向 不需要研究加密算法,通过浏览器 JS 上下文拿签名
7 平台全覆盖 国内主流自媒体平台全部支持
多格式存储 CSV/JSON/Excel/SQLite/MySQL/PostgreSQL 可插拔
WebUI FastAPI + Vite,非技术人员也能使用
文档完善 三语 README、VitePress 文档站
社区活跃 59k+ Stars,有赞助商生态(BrowserAct / TikHub / Atlas Cloud 等)
Pro 版 有商业版,支持断点续爬、多账号、去 Playwright 依赖等增强功能

5.2 风险与不足

风险点 说明
法律风险 数据爬取在国内法律灰色地带,README 明确声明仅限学习研究
单人维护 59k stars 项目基本一个人撑,长期维护有风险
签名依赖 平台改前端代码可能失效,需要跟进维护
版本耦合 CDP 模式要求 Chrome >= 144
开源版阉割 断点续爬、多账号、去 Playwright 等关键特性在 Pro 版,开源版实用性打折
抖音/知乎额外依赖 这两个平台需要 Node.js >= 16,增加部署复杂度

六、商业模型

组成部分 说明
开源版 免费,功能完整但缺断点续爬/多账号/去Playwright等增强特性
MediaCrawlerPro 付费增强版,含断点续爬、多账号IP池、去除Playwright依赖、Linux支持、AI Agent Skill
赞助商 BrowserAct(白金)、TikHub.io、Atlas Cloud、Bloome、NodeMaven
打赏 微信/支付宝/Buy Me a Coffee
社群 微信交流群 + B站账号引流

作者的商业化思路很清晰:开源版做流量和口碑,Pro 版做变现,赞助商做广告收入。这是一套成熟的独立开发者商业模式。


七、对现有项目的关联

7.1 与 SocialHub 的关系

SocialHub 做的是多平台社媒数据看板(热榜聚合 + 账号管理),数据来源是 URL 直抓(不涉及登录态和签名)。

MediaCrawler 做的是搜索/详情/评论爬取,数据维度不重叠但互补:

  • SocialHub 缺 搜索能力评论数据
  • MediaCrawler 缺 热榜聚合账号管理

未来整合方向:MediaCrawler 的 CDP 模式 + 平台爬虫架构可以作为 SocialHub 的深度数据采集层,但需要明确哪些数据走 URL 直抓、哪些走浏览器自动化。

7.2 技术学习价值

值得学习的架构模式:

  1. 工厂模式 + 抽象基类 的爬虫架构设计
  2. CDP 模式 的浏览器操控方式(比直接写 Playwright 脚本优雅得多)
  3. 代理池设计 --- 抽象层 + 多提供者支持
  4. 多格式存储层 --- 可插拔的数据输出
  5. 配置中心化 --- 所有开关集中在 config/base_config.py
  6. FastAPI + Vite 的 Web 管理界面架构

7.3 闲鱼变现可能

不能直接卖软件(开源且许可证禁止商业用途),但可以做:

  • 部署+定制服务:帮不会技术的人搭起来用(技术服务,非卖软件)
  • 场景化产品:基于此架构做「小红书舆情监控」「抖音竞品分析」等垂直工具
  • 需注意法律边界:仅限学习研究,不能商用

八、总体评价

维度 评分 说明
技术架构 ⭐⭐⭐⭐⭐ 清晰、可扩展、设计模式运用得当
实用性 ⭐⭐⭐⭐ 开源版功能够用,Pro版才完整
维护活跃度 ⭐⭐⭐⭐ 794 commits,近期仍在更新
代码质量 ⭐⭐⭐⭐ pre-commit + mypy + 英文注释,质量不低
法律风险 ⚠️ 需谨慎,仅限学习研究,不可商用

一句话总结:技术架构值得学,CDP 模式值得抄,但生产环境使用需要认真评估法律风险。作为爬虫架构参考和学习材料,质量很高。

相关推荐
Dxy12393102162 小时前
Python项目打包成EXE完整教程(PyInstaller实战避坑)
开发语言·python
bamb002 小时前
一个项目带你入门AI应用开发01
python
0566462 小时前
Python康复训练——常用标准库
开发语言·python·学习
昆曲之源_娄江河畔2 小时前
Python如何安装flask, pymssql
开发语言·python·flask·pymssql
0566463 小时前
Python康复训练——控制流与函数
开发语言·python·学习
天使day3 小时前
FastAPI快速入门
python·fastapi
databook3 小时前
用相关性分析消除“冗余特征”
python·机器学习·scikit-learn
幻想时空4 小时前
地图数据采集
python
梦想不只是梦与想4 小时前
Python 中的类型判断方法
python·type·isinstance