MediaCrawler 是什么?

在数据驱动的时代,社交媒体平台蕴含着海量的用户洞察、内容趋势和舆情信息。然而,手动收集这些数据既低效又不可持续。MediaCrawler 正是为解决这一痛点而生的开源项目——它是一个功能强大的多平台自媒体数据采集工具,由开发者 NanmiCoder 维护,在 GitHub 上已获得数万 Star,是目前最全面的中文社交媒体爬虫框架。

MediaCrawler 的核心价值在于:一个工具覆盖 7 大主流平台,无需为每个平台单独开发爬虫。它基于 Python 异步架构,利用 Playwright 浏览器自动化处理登录态,再通过保留的 Cookie 环境调用平台 API 获取签名参数,完全无需逆向复杂的加密算法,大幅降低了技术门槛。

项目地址:github.com/NanmiCoder/MediaCrawler

适用场景

  • 舆情分析:监控品牌在各大平台的口碑和用户反馈
  • 内容趋势研究:追踪热门话题、爆款内容的共性特征
  • 竞品分析:采集竞品账号的发布频率、互动数据
  • 学术研究:社交媒体传播模式、用户行为分析
  • 数据可视化:将采集的数据生成词云图、趋势图表

支持的 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/              # 登录态缓存管理

工作流程

  1. 登录阶段:Playwright 打开浏览器,用户扫码/输入手机号,获取 Cookie
  2. 缓存阶段:Cookie 保存到本地(cache/{platform}_cookies.json
  3. 爬取阶段:复用 Cookie 环境,通过 JS 表达式获取签名参数,调用平台 API
  4. 存储阶段:将采集的数据写入 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.pyconfig/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 格式),直观展示评论热点。

合规性与法律风险

重要提示:爬虫技术的使用必须遵守法律法规和平台服务条款。

法律边界

根据《中华人民共和国网络安全法》《数据安全法》《个人信息保护法》以及 爬虫违法违规案件合集,以下行为可能触犯法律:

  • 未经授权采集个人信息:用户隐私数据(手机号、身份证、住址等)
  • 绕过技术保护措施:破解验证码、伪造身份绕过风控
  • 大规模采集并商业化:将采集数据用于商业目的
  • 干扰平台正常运营:高频请求导致服务器负载过高

合规建议

  1. 仅采集公开数据:不采集需要特殊权限才能访问的内容
  2. 控制采集频率:设置合理的请求间隔,避免对平台造成负担
  3. 不用于商业用途:MediaCrawler 采用 NON-COMMERCIAL LEARNING LICENSE,禁止商业使用
  4. 遵守 robots.txt:尊重平台的爬虫协议
  5. 保护用户隐私:不公开传播采集到的用户个人信息

免责声明

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 支持作者!

相关阅读: