MediaCrawler 是什么?
在数据驱动的时代,社交媒体平台蕴含着海量的用户洞察、内容趋势和舆情信息。然而,手动收集这些数据既低效又不可持续。MediaCrawler 正是为解决这一痛点而生的开源项目——它是一个功能强大的多平台自媒体数据采集工具,由开发者 NanmiCoder 维护,在 GitHub 上已获得数万 Star,是目前最全面的中文社交媒体爬虫框架。
MediaCrawler 的核心价值在于:一个工具覆盖 7 大主流平台,无需为每个平台单独开发爬虫。它基于 Python 异步架构,利用 Playwright 浏览器自动化处理登录态,再通过保留的 Cookie 环境调用平台 API 获取签名参数,完全无需逆向复杂的加密算法,大幅降低了技术门槛。
适用场景
- 舆情分析:监控品牌在各大平台的口碑和用户反馈
- 内容趋势研究:追踪热门话题、爆款内容的共性特征
- 竞品分析:采集竞品账号的发布频率、互动数据
- 学术研究:社交媒体传播模式、用户行为分析
- 数据可视化:将采集的数据生成词云图、趋势图表
支持的 7 大平台与功能矩阵
MediaCrawler 目前支持以下平台,且每个平台的功能覆盖高度一致:
| 平台 | 代号 | 关键词搜索 | 指定帖子爬取 | 二级评论 | 创作者主页 | 登录缓存 | IP 代理 | 词云图 |
|---|---|---|---|---|---|---|---|---|
| 小红书 | xhs |
✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
| 抖音 | dy |
✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
| 快手 | ks |
✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
| B 站 | bili |
✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
| 微博 | wb |
✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
| 百度贴吧 | tieba |
✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
| 知乎 | zhihu |
✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
三种爬取模式:
- search:按关键词搜索并爬取相关帖子/视频
- detail:指定帖子 ID 或 URL,精确爬取详情和评论
- creator:爬取指定创作者主页的所有内容
三种登录方式:
- qrcode:扫描二维码登录(推荐,最安全)
- phone:手机号 + 验证码登录
- cookie:直接填入已有 Cookie
技术架构:Python + Playwright 的巧妙设计
MediaCrawler 的技术选型体现了实用主义哲学。它没有选择传统的 HTTP 请求 + 签名逆向路线,而是采用 Playwright 浏览器自动化来处理登录态,再通过保留的 Cookie 环境调用平台 API。这种设计的核心优势是:无需逆向复杂的加密算法。
核心架构分层
MediaCrawler
├── main.py # 程序入口,爬虫工厂
├── config/ # 配置管理(平台配置、基础配置)
├── media_platform/ # 7 大平台爬虫实现
│ ├── xhs/ # 小红书
│ ├── douyin/ # 抖音
│ ├── kuaishou/ # 快手
│ ├── bilibili/ # B站
│ ├── weibo/ # 微博
│ ├── tieba/ # 百度贴吧
│ └── zhihu/ # 知乎
├── store/ # 数据存储层(CSV/JSON/SQLite/MySQL/MongoDB)
├── proxy/ # IP 代理池管理
└── cache/ # 登录态缓存管理
工作流程
- 登录阶段:Playwright 打开浏览器,用户扫码/输入手机号,获取 Cookie
- 缓存阶段:Cookie 保存到本地(
cache/{platform}_cookies.json) - 爬取阶段:复用 Cookie 环境,通过 JS 表达式获取签名参数,调用平台 API
- 存储阶段:将采集的数据写入 CSV/JSON/数据库
CDP 模式:反检测的杀手锏
MediaCrawler 默认启用 CDP(Chrome DevTools Protocol)模式,连接用户已有的 Chrome 浏览器。相比 Playwright 的无头浏览器,CDP 模式的优势在于:
- 真实浏览器指纹:使用用户实际安装的 Chrome,包含所有扩展、插件和设置
- 更低的检测风险:浏览器行为模式更接近真实用户
- 继承登录状态:自动复用已有的 Cookie 和浏览历史
启用方式(config/base_config.py):
ENABLE_CDP_MODE = True # 启用 CDP 模式
CDP_CONNECT_EXISTING = True # 连接已有浏览器(推荐)
CDP_DEBUG_PORT = 9222 # 调试端口
使用前需在 Chrome 地址栏输入 chrome://inspect/#remote-debugging,勾选"Allow remote debugging for this browser instance"。
安装与快速上手
环境要求
- Python 3.11+
- Node.js 16+(抖音和知乎需要)
- Chrome 浏览器(推荐最新版)
方式一:uv 安装(推荐)
uv 是目前最快的 Python 包管理工具,依赖解析准确,推荐使用。
# 1. 克隆项目
git clone https://github.com/NanmiCoder/MediaCrawler.git
cd MediaCrawler
# 2. 安装依赖(自动创建虚拟环境)
uv sync
# 3. 运行爬虫(以小红书为例)
uv run main.py --platform xhs --lt qrcode --type search
方式二:传统 venv 安装
# 1. 创建虚拟环境
python -m venv venv
source venv/bin/activate # Linux/macOS
# venv\Scripts\activate # Windows
# 2. 安装依赖
pip install -r requirements.txt
# 3. 安装 Playwright 浏览器驱动(非 CDP 模式需要)
playwright install
# 4. 运行爬虫
python main.py --platform xhs --lt qrcode --type search
配置文件说明
核心配置在 config/base_config.py,常用参数:
# 平台选择:xhs | dy | ks | bili | wb | tieba | zhihu
PLATFORM = "xhs"
# 关键词搜索(英文逗号分隔)
KEYWORDS = "AI编程,Python教程"
# 登录方式:qrcode | phone | cookie
LOGIN_TYPE = "qrcode"
# 爬取模式:search | detail | creator
CRAWLER_TYPE = "search"
# 是否启用 IP 代理
ENABLE_IP_PROXY = False
# 是否启用评论爬取
ENABLE_GET_COMMENTS = True
# 是否启用二级评论
ENABLE_GET_SUB_COMMENTS = False
# 数据存储格式:csv | json | jsonl | sqlite | mysql | mongodb | excel
SAVE_DATA_OPTION = "jsonl"
# 单平台最大爬取数量
CRAWLER_MAX_NOTES_COUNT = 15
# 并发数
MAX_CONCURRENCY_NUM = 1
# 爬取间隔(秒)
CRAWLER_MAX_SLEEP_SEC = 2
平台特定配置在各平台专属文件中,如 config/xhs_config.py、config/dy_config.py 等。
各平台采集实战
MediaCrawler 的命令行接口统一且简洁,核心参数只有三个:--platform(平台)、--lt(登录方式)、--type(爬取模式)。下面以小红书为例,演示完整的采集流程。
小红书采集
1. 关键词搜索模式
# 修改 config/base_config.py
PLATFORM = "xhs"
KEYWORDS = "AI绘画,Stable Diffusion"
CRAWLER_TYPE = "search"
ENABLE_GET_COMMENTS = True # 开启评论采集
# 运行
uv run main.py --platform xhs --lt qrcode --type search
首次运行会弹出浏览器,用手机小红书扫码登录。登录成功后 Cookie 自动缓存,下次运行无需重复扫码。
2. 指定帖子详情模式
在 config/xhs_config.py 中配置目标帖子 URL:
XHS_SPECIFIED_NOTE_URL_LIST = [
"https://www.xiaohongshu.com/explore/xxxxx?xsec_token=xxx",
# 可添加多个
]
然后运行:
uv run main.py --platform xhs --lt qrcode --type detail
3. 创作者主页模式
在 config/xhs_config.py 中配置创作者主页 URL:
XHS_CREATOR_ID_LIST = [
"https://www.xiaohongshu.com/user/profile/xxxxx?xsec_token=xxx",
]
运行:
uv run main.py --platform xhs --lt qrcode --type creator
抖音采集
抖音需要 Node.js 环境(用于 JS 签名)。配置 config/dy_config.py:
# 关键词搜索
KEYWORDS = "Python教程,编程入门"
# 指定视频 URL
DOUYIN_SPECIFIED_NOTE_URL_LIST = [
"https://www.douyin.com/video/xxxxx",
]
运行命令:
uv run main.py --platform dy --lt qrcode --type search
抖音的登录流程与小红书类似,扫码后 Cookie 缓存到本地。
B 站采集
B 站是视频类平台的典型代表,配置 config/bilibili_config.py:
# 搜索关键词
KEYWORDS = "开源项目,GitHub"
# 指定视频 BV 号
BILIBILI_SPECIFIED_NOTE_URL_LIST = [
"https://www.bilibili.com/video/BVxxxxxx",
]
# UP 主主页
BILIBILI_CREATOR_ID_LIST = [
"https://space.bilibili.com/xxxxx",
]
运行:
uv run main.py --platform bili --lt qrcode --type search
B 站的数据结构相对规范,采集成功率较高。
微博、快手、贴吧、知乎
其他平台的配置方式类似,只需修改 config/ 下对应的配置文件,然后运行:
# 微博
uv run main.py --platform wb --lt qrcode --type search
# 快手
uv run main.py --platform ks --lt qrcode --type search
# 百度贴吧
uv run main.py --platform tieba --lt qrcode --type search
# 知乎
uv run main.py --platform zhihu --lt qrcode --type search
知乎和快手同样需要 Node.js 环境。
WebUI 可视化界面
如果不想用命令行,MediaCrawler 提供了 WebUI:
# 终端 1:启动后端
uv run uvicorn api.main:app --port 8080 --reload
# 终端 2:启动前端
cd webui
npm install
npm run dev
访问 http://localhost:5173/ 即可在浏览器中配置参数、查看日志、预览数据。
数据存储与导出
MediaCrawler 支持 7 种数据存储格式,通过 SAVE_DATA_OPTION 配置:
CSV / JSON / JSONL
最简单的文件存储方式,数据保存在 data/{platform}/ 目录下。
SAVE_DATA_OPTION = "csv" # 或 "json" / "jsonl"
CSV 适合用 Excel 打开查看,JSON/JSONL 适合程序处理。
SQLite
轻量级数据库,无需额外安装,适合单机使用。
SAVE_DATA_OPTION = "sqlite"
首次运行自动创建数据库和表结构,支持去重。
MySQL / PostgreSQL
生产环境推荐,支持大规模数据存储和查询。
SAVE_DATA_OPTION = "mysql" # 或 "postgres"
需要在 .env 文件配置数据库连接:
MYSQL_DB_HOST=localhost
MYSQL_DB_PORT=3306
MYSQL_DB_USER=root
MYSQL_DB_PWD=your_password
MYSQL_DB_NAME=media_crawler
MongoDB
文档型数据库,适合存储结构不固定的数据。
SAVE_DATA_OPTION = "mongodb"
配置 .env:
MONGODB_HOST=localhost
MONGODB_PORT=27017
MONGODB_DB_NAME=media_crawler
Excel
直接输出 .xlsx 文件,方便非技术人员查看。
SAVE_DATA_OPTION = "excel"
数据字段说明
以小红书为例,采集的数据包含:
- 笔记信息:标题、内容、点赞数、收藏数、评论数、发布时间、标签
- 评论信息:评论内容、用户昵称、点赞数、回复数、时间
- 创作者信息:昵称、粉丝数、获赞数、作品数
所有字段以 JSON 格式存储,便于后续分析。
高级用法
定时采集与增量更新
MediaCrawler 本身不包含定时调度功能,但可以配合 cron 或 APScheduler 实现:
# Linux crontab 示例:每天上午 10 点采集
0 10 * * * cd /path/to/MediaCrawler && uv run main.py --platform xhs --lt cookie --type search
增量更新的关键在于利用数据库去重。使用 SQLite 或 MySQL 存储时,MediaCrawler 会自动跳过已存在的记录(基于笔记 ID)。只需定期运行相同配置,即可只采集新增内容。
IP 代理池配置
大规模采集时,建议启用 IP 代理以避免触发平台风控:
# config/base_config.py
ENABLE_IP_PROXY = True
IP_PROXY_POOL_COUNT = 2 # 代理池数量
IP_PROXY_PROVIDER_NAME = "kuaidaili" # 支持 kuaidaili | wandouhttp | static
在 .env 文件配置代理服务商的密钥:
# 快代理配置
KDL_SECERT_ID=your_secret_id
KDL_SIGNATURE=your_signature
KDL_USER_NAME=your_username
KDL_USER_PWD=your_password
也可以使用静态代理:
IP_PROXY_PROVIDER_NAME = "static"
STATIC_PROXY_URL = "http://user:password@proxy.example.com:8080"
并发控制与请求间隔
# 并发数(建议 1-3,过高易触发风控)
MAX_CONCURRENCY_NUM = 1
# 请求间隔(秒,随机 1-2 秒)
CRAWLER_MAX_SLEEP_SEC = 2
# 单平台最大采集数量
CRAWLER_MAX_NOTES_COUNT = 15
建议从小规模开始测试,逐步增加采集量。过高的并发和频率会导致账号被限制或 IP 被封禁。
评论词云生成
MediaCrawler 内置了词云图生成功能,基于采集的评论数据:
# config/base_config.py
ENABLE_GET_WORDCLOUD = True
# 自定义词组(可选)
CUSTOM_WORDS = {
"AI绘画": "技术",
"Stable Diffusion": "工具",
}
# 停用词文件
STOP_WORDS_FILE = "./docs/hit_stopwords.txt"
运行后会在 data/ 目录生成词云图(PNG 格式),直观展示评论热点。
合规性与法律风险
重要提示:爬虫技术的使用必须遵守法律法规和平台服务条款。
法律边界
根据《中华人民共和国网络安全法》《数据安全法》《个人信息保护法》以及 爬虫违法违规案件合集,以下行为可能触犯法律:
- 未经授权采集个人信息:用户隐私数据(手机号、身份证、住址等)
- 绕过技术保护措施:破解验证码、伪造身份绕过风控
- 大规模采集并商业化:将采集数据用于商业目的
- 干扰平台正常运营:高频请求导致服务器负载过高
合规建议
- 仅采集公开数据:不采集需要特殊权限才能访问的内容
- 控制采集频率:设置合理的请求间隔,避免对平台造成负担
- 不用于商业用途:MediaCrawler 采用 NON-COMMERCIAL LEARNING LICENSE,禁止商业使用
- 遵守 robots.txt:尊重平台的爬虫协议
- 保护用户隐私:不公开传播采集到的用户个人信息
免责声明
MediaCrawler 项目仅供学习和研究目的。使用者应自行承担因使用本工具而产生的一切法律责任。作者不对任何违法行为负责。
与其他工具对比
| 工具 | 支持平台 | 技术栈 | 反检测能力 | 学习曲线 | 适用场景 |
|---|---|---|---|---|---|
| MediaCrawler | 7 大中文平台 | Python + Playwright | CDP 模式,强 | 中等 | 中文社交媒体数据采集 |
| Snscrape | Twitter/Instagram 等 | Python | 弱,易被封 | 低 | 海外平台轻量采集 |
| Tweepy | Twitter 专用 | Python | 依赖官方 API | 低 | Twitter 官方 API 开发 |
| Scrapy | 通用 | Python + Twisted | 需自行实现 | 高 | 大规模定制化爬虫 |
| Selenium | 通用 | Python + WebDriver | 中等 | 中等 | 需要交互的网页自动化 |
| Playwright | 通用 | Python/Node | 强 | 中等 | 现代网页自动化 |
MediaCrawler 的优势
- 一站式覆盖:一个工具支持 7 大中文平台,无需为每个平台单独开发
- 无需逆向:基于 Playwright + CDP 模式,绕过复杂的签名算法
- 开箱即用:配置文件清晰,命令行参数简洁
- 社区活跃:GitHub Star 数持续增长,问题响应及时
何时选择其他工具
- Snscrape/Tweepy:需要采集 Twitter/Instagram 等海外平台
- Scrapy:需要构建大规模、高并发的定制化爬虫
- Selenium/Playwright:需要通用的网页自动化能力,而非专门的社交媒体采集
常见问题 FAQ
1. MediaCrawler 采集数据是否合法?
MediaCrawler 本身是合法的学习工具,但使用方式决定合法性。仅采集公开数据、控制频率、不用于商业用途、遵守平台服务条款,一般不会有法律问题。但采集个人信息、绕过技术保护、大规模商业化使用可能触犯《数据安全法》《个人信息保护法》。建议参考 爬虫违法违规案件合集 了解法律边界。
2. 为什么扫码登录失败或频繁要求重新扫码?
常见原因: - Cookie 过期:平台会定期清理登录态,重新扫码即可 - 触发风控:频繁采集或异常行为导致账号被限制,建议降低采集频率 - 网络问题:代理 IP 不稳定或被平台标记,尝试切换 IP 或关闭代理 - 浏览器版本过低:CDP 模式需要 Chrome 144+,更新浏览器
3. 如何提高采集成功率?
- 启用 CDP 模式:使用真实浏览器环境,降低检测风险
- 控制采集频率:设置
CRAWLER_MAX_SLEEP_SEC = 2-5,避免高频请求 - 使用 IP 代理:大规模采集时启用代理池,分散请求来源
- 单账号单 IP:避免多账号共用一个 IP,容易触发关联风控
- 错峰采集:避开平台高峰期(如晚上 8-10 点)
4. 采集的数据可以用于商业分析吗?
不可以。MediaCrawler 采用 NON-COMMERCIAL LEARNING LICENSE 1.1,明确禁止商业用途。如果需要商业使用,建议: - 联系平台官方购买数据服务 - 使用平台提供的官方 API(如微博开放平台、B 站开放平台) - 咨询法律专家,确保数据采集和使用符合法规
5. 支持 Windows/Mac/Linux 吗?
完全支持。MediaCrawler 基于 Python,跨平台兼容。Windows 用户注意:
- 路径分隔符使用反斜杠 \
- 激活虚拟环境命令:venv\Scripts\activate
- Chrome 路径示例:C:\Program Files\Google\Chrome\Application\chrome.exe
Mac/Linux 用户:
- 激活虚拟环境命令:source venv/bin/activate
- Chrome 路径示例:/Applications/Google Chrome.app/Contents/MacOS/Google Chrome
总结
MediaCrawler 是目前最全面的中文社交媒体爬虫框架,一个工具覆盖小红书、抖音、快手、B 站、微博、贴吧、知乎 7 大平台。它的核心价值在于:
- 降低技术门槛:基于 Playwright + CDP 模式,无需逆向复杂的加密算法
- 一站式采集:统一的命令行接口,配置简单,开箱即用
- 灵活的存储:支持 CSV/JSON/SQLite/MySQL/MongoDB/Excel 7 种格式
- 反检测能力:CDP 模式 + IP 代理池,降低被封禁风险
但也要清醒认识到:
- 法律风险:必须遵守法律法规,仅用于学习和研究
- 平台风控:采集频率过高会被限制或封禁
- 非商业用途:LICENSE 明确禁止商业化使用
如果你是数据分析师、研究人员或开发者,需要采集中文社交媒体数据用于学习、研究或个人项目,MediaCrawler 是目前最值得尝试的工具。但请始终牢记:合规使用,尊重平台规则,保护用户隐私。
项目地址:github.com/NanmiCoder/MediaCrawler
如果觉得本文有帮助,欢迎给项目点个 Star 支持作者!
相关阅读: