惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

L
LangChain Blog
Martin Fowler
Martin Fowler
P
Palo Alto Networks Blog
MongoDB | Blog
MongoDB | Blog
A
About on SuperTechFans
Google DeepMind News
Google DeepMind News
博客园_首页
量子位
小众软件
小众软件
F
Full Disclosure
Vercel News
Vercel News
爱范儿
爱范儿
Engineering at Meta
Engineering at Meta
F
Fortinet All Blogs
博客园 - 聂微东
V
V2EX
Blog — PlanetScale
Blog — PlanetScale
罗磊的独立博客
WordPress大学
WordPress大学
D
Darknet – Hacking Tools, Hacker News & Cyber Security
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
T
Tor Project blog
Google DeepMind News
Google DeepMind News
M
MIT News - Artificial intelligence
L
Lohrmann on Cybersecurity
H
Hacker News: Front Page
Spread Privacy
Spread Privacy
AI
AI
C
Cyber Attacks, Cyber Crime and Cyber Security
C
CERT Recently Published Vulnerability Notes
D
Docker
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
Recorded Future
Recorded Future
L
LINUX DO - 热门话题
Microsoft Azure Blog
Microsoft Azure Blog
Recent Commits to openclaw:main
Recent Commits to openclaw:main
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
Latest news
Latest news
W
WeLiveSecurity
Application and Cybersecurity Blog
Application and Cybersecurity Blog
博客园 - 司徒正美
博客园 - 叶小钗
T
Threat Research - Cisco Blogs
P
Privacy International News Feed
O
OpenAI News
Help Net Security
Help Net Security
aimingoo的专栏
aimingoo的专栏
宝玉的分享
宝玉的分享
博客园 - Franky

BlogFinder

日常漫步 Vol.24 之漫步前山河 - 雅余 周报 #1-聊聊本周的收获 - Edwin's Blog 我的OpenCode必装插件与Skill Write Something 掌中之物未必在掌握之中 · CRIVU PiliNara,一个更顺手的 PiliPlus 分支 「NekoEcho」:做一个必有回响的猫娘主题博客 2026-05 书影音总结 简化博客主题 - 安迪 你要加油呐 我第一次发布 npm 包 拾花小记#45:中考前的二三事 – 小改学习志 黛西花园5月游 #18 枇杷又熟了的五月月报 一些奇奇怪怪的需求?word仿方正书版的几个小操作 - Xiobb's Blog 0419 御温泉之旅 修复了一些bug,网站基本上趋于稳定了 - 新锐博客 又回到四十年前 如何定义成功 迷鹿屋2026已重新上线 科技冰火两重天+一周回顾 ${title} 热度退了,我反而用得更深了-咕咚同学 我到底该不该换个域名? 随身WIFI折腾记 - 安迪 博客撰写体验提升——hexo pro插件 为什么不用相机把屏幕上的接关密码拍下来? 国清寺与天台山 – Ouroboros ★★★★☆《挽救计划》——久违的经济上行感 - Davidの3号基地 删除右键“打开方式”里多余选项 第三周刊_No.53|一切都会被支付两次 安卓APP通话记录与录音上传踩坑记录 - 子舒的博客 天量下跌 inBox 笔记 2.3.8,把工具栏交给了你-咕咚同学 我把小龙虾搬到了微信-咕咚同学 安好 - 响石潭 Compound Engineering Plugin:让每个工程单元都比上一个更容易 MOSS-TTS Family:开源高质量语音与声音生成模型家族深度解析 Crawl4AI:专为 LLM 设计的开源 Web 爬虫与数据抓取工具 Build Your Own X:从零实现你最喜欢的技术——程序员进阶的终极资源清单 Anthropic Skills:用文件夹教 Claude 专业技能的开源框架 1年的去月球(下) - 梅之夏 欢迎回来。 简单讲讲 ASN.1 与 OID DTV - 直播聚合客户端 5.22-5.27 – 不兴江 还没去过鸭川 – 不兴江 张晶晶同学三刷林志颖 关于我 – 不兴江 爱与嫉妒 – 不兴江 港股被持续做空 备案码花了四百块-咕咚同学 一句话生成封面:我给公众号做了4种风格的AI封面生成技能 「官」方認證 再谈费曼学习法 2026-05-28T00:34:11+08:00 2026-05-28T00:28:45+08:00 离谱的英语学习指南:基于AI的英语进阶系统方法论 iii:零集成架构的后端统一运行时 Claude Code Harness:让 Claude Code 工作有迹可循的工程化框架 Heretic:全自动移除大语言模型审查机制的开源工具 MarkItDown:微软开源的万能文档转 Markdown 利器 Harness:让 Claude Code 秒变多智能体协作工厂 这段时间尽折腾AI Agent了,确实极大地提高了效率 近期动态:两个新站点正式上线啦 误判解除!zhouayuan.com 腾讯安全申诉成功 - 周阿源|玩具设计・插画日常・生活随笔 Ralph:让 AI 编码工具自主循环跑完所有 PRD 任务的量产神器 全都违法 – 个人工作记录 关于zhouayuan.com被误判 “含违规信息” 的说明与申诉记录 - 周阿源|玩具设计・插画日常・生活随笔 小米 MiMo v2.5 Pro 白嫖 最大的人间清醒,兜里有钱,但是不花。 夜晚靓歌(12):于文文现场solo - 王志勇的Blog 今日插画:风扬起的倔强 - 周阿源|玩具设计・插画日常・生活随笔 回门习俗 独立网卡 - 忘记了回忆 500亿入股人工智能企业 从命令行到桌面智能体-咕咚同学 第一性原理读书笔记 行者微评论223-加班の守株待兔-博客|政治与时事-风雨行者 ZOZO开源物理接触求解器:GPU加速的可扩展仿真引擎 OpenStock:开源股票市场交易平台技术深度解析 MoneyPrinterTurbo:基于AI的全自动短视频生成工具深度解析 Claude-Mem:为 Claude Code 构建的持久化记忆压缩系统 Twenty:可代码化定制的企业级开源 CRM 平台技术深度解析 2026-05-26T22:59:17+08:00 企业级开源大模型部署平台 GPUStack 实战教程 1年的去月球(上) - 梅之夏 Sevalla - 静态网站托管服务 不用翻墙、不用注册、不用月费,普通人也能用上 Claude Code 装修灯具要注意⚠️ 黄梅天先锋 - 游子微博 公安备案顺利办结,站点备案全部完成 - 周阿源|玩具设计・插画日常・生活随笔 第三次兑换天猫超市卡了宗宗酱-三维狐少儿编程 Don't think, feel. - Rolen's Blog 人这一辈子,到底图个什么 博客迁移 - Edwin's Blog 情感赛道写作模板 再现本轮行情的典型特征 裁员与平常心-咕咚同学 别让“偷懒”,成为隐私泄露的破绽
MediaCrawler:多平台自媒体数据采集利器,一键爬取小红书、抖音、B站
Cheman · 2026-06-26 · via BlogFinder

今天在 GitHub Trending 上看到一个有意思的项目:MediaCrawler,一个支持小红书、抖音、快手、B站、微博、贴吧、知乎七大平台的多功能自媒体数据采集工具,核心亮点是基于 Playwright 浏览器自动化实现登录态复用,无需 JS 逆向即可获取签名参数,大幅降低了技术门槛。

一、项目概述

MediaCrawler 由开发者 NanmiCoder 维护,是一个非商业学习许可证下的开源项目(NON-COMMERCIAL LEARNING LICENSE)。其定位是帮助研究者和学习者探索网络数据采集技术,而非用于大规模商业爬虫。

项目核心特点:

  • 零 JS 逆向:利用保留登录态的浏览器上下文,通过 JS 表达式获取签名参数,避免了复杂的加密算法逆向
  • CDP 模式:默认通过 Chrome DevTools Protocol 连接用户已有浏览器,复用登录态、Cookie、扩展,显著降低平台风控风险
  • 多平台覆盖:支持小红书(xhs)、抖音(dy)、快手(ks)、B站(bili)、微博(wb)、贴吧、知乎七大平台
  • WebUI 可视化:提供基于 FastAPI + Uvicorn 的 Web 操作界面,无需命令行也可使用
  • 多种存储方式:支持 CSV、JSON、JSONL、Excel、SQLite、MySQL 等多种数据导出格式

二、技术原理

2.1 架构设计

项目采用工厂模式(Factory Pattern)管理多平台爬虫:

class CrawlerFactory:
    CRAWLERS: dict[str, Type[AbstractCrawler]] = {
        "xhs": XiaoHongShuCrawler,
        "dy": DouYinCrawler,
        "ks": KuaishouCrawler,
        "bili": BilibiliCrawler,
        "wb": WeiboCrawler,
        "tieba": TieBaCrawler,
        "zhihu": ZhihuCrawler,
    }

    @staticmethod
    def create_crawler(platform: str) -> AbstractCrawler:
        crawler_class = CrawlerFactory.CRAWLERS.get(platform)
        if not crawler_class:
            supported = ", ".join(sorted(CrawlerFactory.CRAWLERS))
            raise ValueError(f"Invalid media platform: {platform!r}. Supported: {supported}")
        return crawler_class()

每个平台的爬虫均继承自 AbstractCrawler 抽象基类,统一接口设计,扩展新平台只需实现对应类即可。

2.2 CDP 模式核心原理

MediaCrawler 默认使用 Chrome DevTools Protocol(CDP)模式,这是其区别于传统爬虫方案的关键:

  1. 浏览器复用:直接连接用户本机已打开的 Chrome 浏览器,无需启动独立浏览器实例
  2. 登录态保留:复用用户已在浏览器中登录各平台的账号状态,避免频繁验证码
  3. 签名参数获取:通过在浏览器上下文中注入 JS 表达式,直接从页面运行时环境读取加密签名,而非逆向加密算法

项目要求 Chrome 版本 >= 144,开启方式:在 Chrome 地址栏输入 chrome://inspect/#remote-debugging,勾选 “Allow remote debugging for this browser instance”。

2.3 技术栈一览

组件技术选型作用
浏览器自动化Playwright跨平台浏览器控制
HTTP 客户端httpx / requests异步/同步网络请求
数据库SQLite / MySQL / PostgreSQL结构化数据存储
Web 框架FastAPI + UvicornWebUI 服务端
数据处理Pandas + Jieba数据分析与中文分词
词云生成WordCloud + Matplotlib可视化评论分析
依赖管理uv极速 Python 包管理器

三、安装与快速开始

3.1 环境要求

  • Python: >= 3.11(项目使用 pyproject.toml 管理依赖,推荐使用 uv)
  • Node.js: >= 16.0.0(用于部分平台的签名处理)
  • Chrome 浏览器: 版本 >= 144

3.2 使用 uv 安装(推荐)

# 克隆项目
git clone https://github.com/NanmiCoder/MediaCrawler.git
cd MediaCrawler

# 使用 uv sync 安装依赖(自动锁定版本和环境)
uv sync

# 安装 Playwright 浏览器驱动(CDP 模式无需此步)
uv run playwright install

3.3 Chrome 浏览器配置(CDP 模式)

  1. 安装 Chrome(版本 >= 144)
  2. 在 Chrome 地址栏输入:chrome://inspect/#remote-debugging
  3. 勾选 “Allow remote debugging for this browser instance”
  4. 页面显示 Server running at: 127.0.0.1:9222 即表示就绪

3.4 最简运行示例

# 小红书关键词搜索模式
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 dy --lt qrcode --type search

# 查看所有可用命令
uv run main.py --help

运行时,程序会弹出 Chrome 浏览器窗口(如果使用 CDP 模式则复用已有浏览器),扫描对应平台 App 的二维码完成登录授权即可。

3.5 WebUI 模式

# 启动 API 服务器(默认端口 8080)
uv run uvicorn api.main:app --port 8080 --reload

# 然后访问 http://localhost:8080 打开可视化界面

WebUI 提供了可视化配置爬虫参数、实时查看运行状态、数据预览和导出等能力。

四、使用方法与实战

4.1 数据存储配置

config/base_config.py 中配置存储方式:

# 可选值: csv / json / jsonl / excel / db / sqlite / mysql
SAVE_DATA_OPTION = "json"

# 启用评论爬取
ENABLE_GET_COMMENTS = True

# 生成评论词云
ENABLE_GET_WORDCLOUD = True

4.2 二级评论与创作者主页爬取

除了一级帖文内容,MediaCrawler 还支持:

  • 二级评论:递归爬取帖子的子评论,获取完整的讨论树
  • 指定创作者主页:输入创作者 ID,抓取该创作者的所有帖子

config/base_config.py 中配置关键词列表即可启用相应功能。

4.3 IP 代理池支持

项目集成了代理池支持,可配置多个代理 IP 轮换使用,有效降低被平台封禁的风险。适用于需要持续、大量采集的场景。

4.4 断点续爬与 AI Agent 支持

进阶版 MediaCrawlerPro 提供了断点续爬功能,即使爬虫中断也能从上次位置继续,避免重复采集。同时还支持 OpenClaw、Claude Code、Cursor 等 AI Agent 一键调用,实现自动化数据采集。

五、常见问题与解决方案

Q1: 运行时报 playwright 相关错误

确保已安装 Playwright 和浏览器驱动(CDP 模式除外):

uv run playwright install chromium

Q2: 登录后仍然被平台风控拦截

这是正常现象。解决方案:

  • 使用 CDP 模式连接已有登录态的 Chrome 浏览器
  • 降低请求频率,在 config/base_config.py 中调整 REQUEST_INTERVAL
  • 启用 IP 代理池轮换 IP

Q3: Python 版本不兼容(报错 SyntaxErrorImportError

项目要求 Python >= 3.11。使用以下命令检查和切换版本:

python --version   # 查看当前版本
uv python list    # 查看已安装的 Python 版本
uv python pin 3.11  # 固定项目使用 3.11

Q4: 抖音/知乎爬虫无法获取数据

这两个平台需要提前安装 Node.js 环境(版本 >= 16),因为它们依赖 Node.js 执行 JS 签名逻辑。

Q5: 导出 Excel 格式数据为空

确保配置 SAVE_DATA_OPTION = "excel",爬虫运行结束后调用 ExcelStoreBase.flush_all() 保存文件。

Q6: 词云生成失败

词云依赖 jieba 中文分词和 wordcloud 库。确保这些依赖已安装,且评论数据为中文文本。

六、总结

MediaCrawler 是一个架构清晰、功能完善的多平台自媒体数据采集工具,CDP 模式的创新设计让它在无需 JS 逆向的前提下,依然能有效绕过平台签名验证,兼顾了技术易用性和采集成功率。

如果你对社交媒体数据分析、内容研究或推荐系统感兴趣,这个项目无论是作为学习素材还是研究工具,都值得一试。项目代码结构规整(工厂模式、异步架构、抽象基类),阅读源码本身也是一次不错的 Python 工程实践学习。

最后提醒:所有爬虫工具请仅用于学习和技术研究目的,遵守各平台服务条款和 robots.txt 规则,尊重数据隐私与版权。


📢 声明:本文内容基于 GitHub 开源项目 MediaCrawler 的公开信息整理,仅供技术学习参考,请勿用于任何非法或商业用途。