ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

MediaCrawler 跨平台社交媒体数据采集指南:小红书抖音B站微博快手一次配置跑通

MediaCrawler 跨平台社交媒体数据采集指南:小红书抖音B站微博快手一次配置跑通

MediaCrawler 跨平台社交媒体数据采集指南:小红书抖音B站微博快手一次配置跑通

【免费下载链接】MediaCrawler项目地址: https://gitcode.com/GitHub_Trending/mediacr/MediaCrawler

品牌团队想对比同一款产品在小红书、抖音、微博上的发帖量与评论表现时,通常需要为每个平台单独写一套采集脚本。MediaCrawler 是一个开源的跨平台社交媒体数据采集工具,覆盖小红书、抖音、快手、B 站、微博 5 个平台,面向运营人员、研究者和开发者,把关键词搜索、指定内容采集、评论抓取等任务统一到一个入口和一份配置中。

🧭 项目概览:五大平台的功能一览

一句话定位:MediaCrawler 用 Playwright 驱动真实浏览器采集五大社交平台数据,一套配置即可切换平台与采集任务。

功能作用适用时机
关键词搜索采集按关键词搜帖子,抓取帖子信息与评论日常话题监控、市场调研
指定 ID 采集按帖子/视频 ID 列表抓取内容与评论定向跟踪竞品或指定内容
创作者主页采集抓取指定创作者近期发布的帖子跟踪 KOL 的更新情况
三种登录方式二维码 / 手机号 / Cookie,登录状态自动缓存不同账号与复用场景
代理 IP 池自动拉取代理并缓存到 Redis,轮询切换长时间、批量采集任务
多格式数据输出保存为 CSV、JSON 或写入关系型数据库不同分析与数据积累需求

🔍 工作原理:不逆向加密是怎么做到的

MediaCrawler 基于 Playwright 浏览器自动化:程序驱动一个真实浏览器访问目标平台,登录成功后保留该浏览器上下文,再让页面内自带的 JS 代码生成接口所需的动态加密参数(例如抖音的 sign 函数由 libs/douyin.js 执行),从而省去逐个平台复现加密算法的逆向工作,维护成本也随之下降。libs/stealth.min.js 用于抹掉浏览器自动化特征,降低被风控识别的概率。

各平台的具体实现位于 media_platform/ 目录(xhs、douyin、kuaishou、bilibili、weibo 各自独立),采集结果经统一的数据模型转换后,由 store/ 目录下的存储模块写入文件或数据库。

🚀 安装与首次运行:三步跑通采集

第一步:环境准备。克隆仓库并安装依赖:

git clone https://gitcode.com/GitHub_Trending/mediacr/MediaCrawler cd MediaCrawler python3 -m venv venv && source venv/bin/activate pip install -r requirements.txt playwright install

第二步:最小配置。打开 config/base_config.py,只改这几项即可:

PLATFORM = "xhs" # 目标平台:xhs/dy/ks/bili/wb KEYWORDS = "python,golang" # 搜索关键词,逗号分隔 CRAWLER_TYPE = "search" # 采集方式:search/detail/creator

第三步:运行采集。执行入口 main.py:

python main.py --platform xhs --lt qrcode --type search

程序会弹出二维码,用对应 App 扫码后开始采集,结果默认以 JSON 格式输出到 data/ 目录。

🧩 核心功能详解

代理 IP:代理池与密钥怎么配置

作用:启动时从代理服务商 API 拉取 IP,写入 Redis 缓存并记录过期时间,再创建代理池供请求轮询使用,IP 失效后自动补位。完整流程见 docs/代理使用.md。

跨平台数据采集代理IP获取与缓存流程图

使用时机:需要长时间运行采集、或本地 IP 频繁触发风控时。

配置步骤:在代理服务商后台生成 API 链接,取得 key 与 crypto 两个参数,按 proxy/proxy_ip_provider.py 中的位置写入环境变量,再把ENABLE_IP_PROXY置为True、IP_PROXY_POOL_COUNT设为 2~5。该功能依赖 Redis,地址与密码在 config/db_config.py 中配置。

登录方式:二维码、手机号、Cookie 怎么选

  • 二维码登录(qrcode):五个平台均支持,打开 App 扫码即可,首次使用最省事。
  • 手机号登录(phone):仅小红书和抖音支持,需借助短信转发服务接收验证码,说明见 docs/手机号登录说明.md,本地 HTTP 接口由 recv_sms_notification.py 提供。
  • Cookie 登录(cookie):五个平台均支持,适合已有登录 Cookie 的用户,把 Cookie 填入COOKIES即可。

登录状态默认缓存到浏览器数据目录(SAVE_LOGIN_STATE = True),下次运行无需重复登录;更换账号时删除项目根目录的 browser_data/ 目录再重新登录。

数据输出:CSV、JSON、数据库怎么存

由SAVE_DATA_OPTION控制,共三种取值:csv和json输出到 data/ 目录,前者适合直接导入 Excel,后者便于程序二次处理;db写入关系型数据库,MySQL、PostgreSQL 的连接串在 config/db_config.py 配置。长期积累数据建议选db。

数据过滤:评论关键词与指定 ID 采集

COMMENT_KEYWORDS只保留包含指定关键词的评论,适合口碑与舆情分析;各平台还提供*_SPECIFIED_ID_LIST配置项(如XHS_SPECIFIED_ID_LIST),配合--type detail可只采集列表内的帖子;CRAWLER_MAX_NOTES_COUNT(默认 20)用于控制单次采集的帖子数量上限。

并发与频率:MAX_CONCURRENCY_NUM 怎么设

MAX_CONCURRENCY_NUM(默认 4)控制并发采集任务数。数值越高速度越快,但触发平台风控的概率也越高,建议保持在 3~5 之间,并按后文稳定性建议调整。

📊 实战案例:竞品舆情监控怎么落地

业务背景。某消费品团队需要每周跟踪竞品在小红书和微博上的内容表现,并统计用户评论中的正面与负面反馈比例。

怎么配。将PLATFORM设为xhs,KEYWORDS填竞品品牌词,CRAWLER_TYPE用search;把COMMENT_KEYWORDS填为"好用、避雷、回购"等意见词,过滤掉无关闲聊评论;CRAWLER_MAX_NOTES_COUNT设为 50 控制单次规模;SAVE_DATA_OPTION设为db,数据落到 MySQL 便于按周对比。微博任务只需把平台参数换成wb再跑一遍。

拿到什么数据。帖子正文、点赞/评论/收藏数、作者信息与评论文本,各平台字段经过统一模型转换,结构一致。

数据怎么用。用 crontab 在每周一早间自动执行采集命令,数据入库后按品牌关键词做跨平台统计,对比发帖量与评论情感占比,形成周报。

⚙️ 稳定性实践:采集参数建议

项目建议值说明
并发数MAX_CONCURRENCY_NUM3~4并发越高越易触发风控,小规模任务取低值
单次采集量CRAWLER_MAX_NOTES_COUNT20~50先用小值试跑,确认稳定后再调大
代理池IP_PROXY_POOL_COUNT2~5需要代理时启用ENABLE_IP_PROXY,大批量任务适当加量
存储SAVE_DATA_OPTION小数据量 csv/json,大数据量 db长期积累建议 MySQL/PostgreSQL
重试机制最多 20 次,间隔 1 秒登录等关键环节内置 tenacity 重试,无需额外配置

❓ 常见问题

Q:采集时频繁出现验证码或风控?

  • 开启代理 IP(ENABLE_IP_PROXY = True),让请求分散到不同 IP
  • 调低MAX_CONCURRENCY_NUM,减少单次采集的帖子数量
  • 更换账号:删除项目根目录的 browser_data/ 目录后重新登录

Q:如何只采集指定的帖子或视频?

  • 把内容 ID 填入对应平台的*_SPECIFIED_ID_LIST(如小红书用XHS_SPECIFIED_ID_LIST)
  • 运行命令中改用--type detail

Q:抖音报错execjs ... 缺少 ';'怎么办?

  • 这是缺少 Node.js 环境,安装 Node.js(v16.8.0 及以上)后重新运行

Q:登录状态失效后需要重新扫码吗?

  • 登录状态缓存在浏览器数据目录,正常情况无需重复登录
  • 状态失效时重新扫码,或改用 Cookie 登录直接传入有效 Cookie

📌 总结与下一步

MediaCrawler 把五个平台的采集收敛到同一个命令行入口和一份配置文件,浏览器自动化的路线也避免了自行维护各平台加密逻辑的长期成本。上手门槛不高,先跑通search模式,再按需叠加代理与数据库存储即可覆盖多数场景。

后续入口:

  • 功能与平台支持矩阵:README.md
  • 代理 IP 使用详情:docs/代理使用.md
  • 运行报错 FAQ:docs/常见问题.md
  • 代码结构说明:docs/项目代码结构.md
  • 使用中的问题可在仓库 issue 区反馈,也欢迎提交 PR

【免费下载链接】MediaCrawler项目地址: https://gitcode.com/GitHub_Trending/mediacr/MediaCrawler

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进