
GitHub: https://github.com/nanmicoder/mediacrawler
中文社媒爬虫的事实标准——7 平台(小红书/抖音/B 站/快手/微博/知乎/贴吧)一站采集,靠「CDP 连用户真实 Chrome + monkey-patch 修补第三方签名库」绕过风控,靠「无 tag + 微信赞赏 + 付费课 Pro」跑通商业化。
playwright.connect_over_cdp 连用户真实 Chrome(而非启动新 Chromium),把「navigator.webdriver=true」这个老问题用架构层方式绕开。
— 配套 FastAPI WebUI(端口 8080),扫码登录 + 任务控制

— README 顶部 banner,对接 TikHub 签名 API 平台
维度 | 数据 |
|---|---|
GitHub | https://github.com/nanmicoder/mediacrawler |
Star / Fork | 52,728 / 10,918 |
代码行数 | 25,777(Python 74.2% / JSON 15.4% / HTML 6.3% / JavaScript 2.4% / GraphQL 1.5%) |
文件数量 | 206(Python 160) |
项目年龄 | 36.6 个月(2023-06 → 2026-06) |
开发阶段 | 稳定维护(近 90 天 26 commit,月均 ~7,仍持续 fix 平台接口) |
贡献模式 | 单人主导(主作者 78.3%,第二名 28 commit) |
热度定位 | 大众热门(5 万 star 中文社媒爬虫圈天花板) |
质量评级 | 代码良好 / 文档优秀 / 测试基本(17 文件但 0 平台核心单测) |
Release | 0 个 git tag,0 次 GitHub Release(commit 节奏代替版本号) |
「程序员阿江-Relakkes」(GitHub: NanmiCoder),深圳,账号 7.4 年,公开仓库 39 个。垂直聚焦「反爬对抗 + 浏览器自动化」,账号字段直接写「MediaCrawler」—— 项目即人设。
2023 年小红书 461 状态码、Verifytype 字段、抖音 webmsdk 升级把「裸 httpx 爬虫」挤到了死角;同期 CDP 协议 + Playwright connect_over_cdp 成熟,「接用户真实 Chrome」成为绕开 navigator.webdriver 的最优解。作者抓准这个时间窗口,把「扫码登录 + CDP 复用登录态」做成默认开箱体验。
config/base_config.py 中文注释暴露,README 显式声明「仅供学习请勿商用」作合规护城河。MAX_CONCURRENCY_NUM=1 默认)、不做 UI——主动让位给 Pro 版。ProxyRefreshMixin / ExcelStoreBase / XxxStoreFactory)整体移植到爬虫,把「被风控追着跑」的项目做出服务端工程的体感。Genuinely open,但 open-core 商业化: - 核心代码免费 NCAL 1.1 - Pro 版(断点续爬 / 多账号 / 企业架构)订阅 - 4 渠道变现:微信/支付宝/Buy Me a Coffee 打赏 + TikHub 签名 API 联运 + Atlas Cloud 云赞助 + B 站+公众号 私域引流 - 0 个 tag 是商业选择——发 tag 锁版本就断了「持续更新促打赏」的飞轮
创新 | 新颖度 | 实用性 | 可迁移性 |
|---|---|---|---|
CDP 连用户真实 Chrome(playwright.connect_over_cdp("ws://localhost:9222") 复用用户 Cookie/扩展/历史) | 4/5 | 5/5 | 5/5 |
monkey-patch 修补第三方签名库(xhshow 的 GET a3 hash bug 启动时热修补,POST 走原生) | 4/5 | 4/5 | 3/5 |
ExcelStoreBase 单例流式追加(类级 _instances: Dict + _lock 保证多 store 同一 workbook) | 3/5 | 5/5 | 5/5 |
comment 默认开、sub-comment 默认关(分级降速 + 降低法律风险) | 3/5 | 4/5 | 4/5 |
CrawlerFactory 字典派发 + ABC 最小抽象(7 平台扩展只需加 dict entry) | 2/5 | 4/5 | 4/5 |
ProxyRefreshMixin._refresh_proxy_if_expired() + asyncio.Semaphore(MAX_CONCURRENCY_NUM)。core.py 手写 - 问题:7 平台 init/launch/search/store 流程要可插拔 - 方案:CRAWLERS: dict + AbstractCrawler 三个 ABC 最小契约 - Trade-off:加平台简单(加 dict entry + 加文件),但平台间重复代码约 30% - 可迁移性:高 —— 多云 SDK / 多数据库驱动 / 多 IM 协议通杀
ENABLE_CDP_MODE=True 默认开启作反检测主防线 - 方案:tools/cdp_browser.py 535 行 + browser_launcher.py 291 行两层封装;CDP_CONNECT_EXISTING 复用用户浏览器,自动启动则注入 17 个反检测 flag - Trade-off:体验最像真人但需用户手动开远程调试;自动启动 flag 越多越可能被指纹库识别 - 可迁移性:高 —— 任何「既要登录态又要真人指纹」的爬虫/自动化项目
维度 | MediaCrawler | TikTokDownload | weiboSpider | Douyin_TikTok_Download_API | RedNoteTools 小 fork |
|---|---|---|---|---|---|
平台覆盖 | 7 平台 | 2(抖音/快手) | 1(微博) | 1(抖音/TikTok) | 1(小红书) |
核心数据 | 内容+评论+创作者 | 视频文件下载 | 微博+关系图 | REST API | WebUI 包装 |
反检测 | CDP 复用真实 Chrome | 单 flag | 老牌低强度 | 弱 | 不定 |
存储后端 | 8(CSV/JSON/SQL/MySQL/PG/Mongo/Excel) | 文件 | CSV | API 输出 | 不定 |
教学 | VitePress 17 篇 + B 站视频 | 单 README | 学术文档 | 简单 | 简单 |
维护 | 月均 21 commit | 中 | 慢 | 中 | 难 |
商业化 | 赞赏+Pro 订阅+联运赞助 | 单赞助 | 无 | SaaS | SaaS |
Stars | 52K | 6K | 4K | 6K | 几百到几千 |
中文社媒爬虫的「教学型 reference implementation」——新爬虫工程师从这里入门,进阶后转向 TikHub/SaaS 或 fork 出自己的 Pro 版。不是被低估的潜力股,而是已被广泛认可的实战教学项目。
test: 几乎为 0(1/776 = 0.13%),且 没有 CI 跑测试,重构无保护.flake8 / .ruff.toml / pyproject.toml [tool.ruff],pre-commit 声明了但没配tools/cdp_browser.py(535 行)—— CDP 反检测范式核心 2. media_platform/xhs/playwright_sign.py(monkey-patch 实战) 3. proxy/proxy_mixin.py(Mixin + 代理自动刷新) 4. store/excel_store_base.py(单例流式 Excel 写入器) 5. base/base_crawler.py(三个 ABC 最小契约)media_platform/<platform>/{core,client,login,field,help} 模板复制 + 在 main.py:51-67 的 CRAWLERS dict 注册launch_browser_with_cdp 从「每平台重写」抽到 base(30% 重复代码可消解)tests/ 接到 GitHub Actions(目前 0 CI)未收录