























今天在 GitHub Trending 上看到一个有意思的项目:MediaCrawler,一个支持小红书、抖音、快手、B站、微博、贴吧、知乎七大平台的多功能自媒体数据采集工具,核心亮点是基于 Playwright 浏览器自动化实现登录态复用,无需 JS 逆向即可获取签名参数,大幅降低了技术门槛。
MediaCrawler 由开发者 NanmiCoder 维护,是一个非商业学习许可证下的开源项目(NON-COMMERCIAL LEARNING LICENSE)。其定位是帮助研究者和学习者探索网络数据采集技术,而非用于大规模商业爬虫。
项目核心特点:
项目采用工厂模式(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 抽象基类,统一接口设计,扩展新平台只需实现对应类即可。
MediaCrawler 默认使用 Chrome DevTools Protocol(CDP)模式,这是其区别于传统爬虫方案的关键:
项目要求 Chrome 版本 >= 144,开启方式:在 Chrome 地址栏输入 chrome://inspect/#remote-debugging,勾选 “Allow remote debugging for this browser instance”。
| 组件 | 技术选型 | 作用 |
|---|---|---|
| 浏览器自动化 | Playwright | 跨平台浏览器控制 |
| HTTP 客户端 | httpx / requests | 异步/同步网络请求 |
| 数据库 | SQLite / MySQL / PostgreSQL | 结构化数据存储 |
| Web 框架 | FastAPI + Uvicorn | WebUI 服务端 |
| 数据处理 | Pandas + Jieba | 数据分析与中文分词 |
| 词云生成 | WordCloud + Matplotlib | 可视化评论分析 |
| 依赖管理 | uv | 极速 Python 包管理器 |
# 克隆项目
git clone https://github.com/NanmiCoder/MediaCrawler.git
cd MediaCrawler
# 使用 uv sync 安装依赖(自动锁定版本和环境)
uv sync
# 安装 Playwright 浏览器驱动(CDP 模式无需此步)
uv run playwright install
chrome://inspect/#remote-debuggingServer running at: 127.0.0.1:9222 即表示就绪# 小红书关键词搜索模式
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 的二维码完成登录授权即可。
# 启动 API 服务器(默认端口 8080)
uv run uvicorn api.main:app --port 8080 --reload
# 然后访问 http://localhost:8080 打开可视化界面
WebUI 提供了可视化配置爬虫参数、实时查看运行状态、数据预览和导出等能力。
在 config/base_config.py 中配置存储方式:
# 可选值: csv / json / jsonl / excel / db / sqlite / mysql
SAVE_DATA_OPTION = "json"
# 启用评论爬取
ENABLE_GET_COMMENTS = True
# 生成评论词云
ENABLE_GET_WORDCLOUD = True
除了一级帖文内容,MediaCrawler 还支持:
在 config/base_config.py 中配置关键词列表即可启用相应功能。
项目集成了代理池支持,可配置多个代理 IP 轮换使用,有效降低被平台封禁的风险。适用于需要持续、大量采集的场景。
进阶版 MediaCrawlerPro 提供了断点续爬功能,即使爬虫中断也能从上次位置继续,避免重复采集。同时还支持 OpenClaw、Claude Code、Cursor 等 AI Agent 一键调用,实现自动化数据采集。
playwright 相关错误确保已安装 Playwright 和浏览器驱动(CDP 模式除外):
uv run playwright install chromium
这是正常现象。解决方案:
config/base_config.py 中调整 REQUEST_INTERVALSyntaxError 或 ImportError)项目要求 Python >= 3.11。使用以下命令检查和切换版本:
python --version # 查看当前版本
uv python list # 查看已安装的 Python 版本
uv python pin 3.11 # 固定项目使用 3.11
这两个平台需要提前安装 Node.js 环境(版本 >= 16),因为它们依赖 Node.js 执行 JS 签名逻辑。
确保配置 SAVE_DATA_OPTION = "excel",爬虫运行结束后调用 ExcelStoreBase.flush_all() 保存文件。
词云依赖 jieba 中文分词和 wordcloud 库。确保这些依赖已安装,且评论数据为中文文本。
MediaCrawler 是一个架构清晰、功能完善的多平台自媒体数据采集工具,CDP 模式的创新设计让它在无需 JS 逆向的前提下,依然能有效绕过平台签名验证,兼顾了技术易用性和采集成功率。
如果你对社交媒体数据分析、内容研究或推荐系统感兴趣,这个项目无论是作为学习素材还是研究工具,都值得一试。项目代码结构规整(工厂模式、异步架构、抽象基类),阅读源码本身也是一次不错的 Python 工程实践学习。
最后提醒:所有爬虫工具请仅用于学习和技术研究目的,遵守各平台服务条款和 robots.txt 规则,尊重数据隐私与版权。
📢 声明:本文内容基于 GitHub 开源项目 MediaCrawler 的公开信息整理,仅供技术学习参考,请勿用于任何非法或商业用途。
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。