MediaCrawler:5 平台社交媒体爬虫快速上手指南
【免费下载链接】MediaCrawler-new项目地址: https://gitcode.com/GitHub_Trending/me/MediaCrawler-new
你要为下周的竞品分析做一份小红书热门笔记汇总,手动翻 50 条帖子、复制文案和评论,一整个下午就没了。MediaCrawler 是一个覆盖 5 个社交平台的开源数据采集工具:指定关键词和数量,它自动完成登录、批量抓取视频、帖子、评论与互动数据,最后按你选的格式落盘。
覆盖 5 个平台的社交媒体数据采集
MediaCrawler 面向数据分析师、内容运营和学术研究者,支持小红书、抖音、快手、B站、微博五个平台。核心能力包括关键词搜索采集、指定帖子/视频 ID 定向抓取、创作者主页采集(小红书)、评论抓取,以及抖音滑块验证码的自动处理。
技术路线一句话概括:用 playwright 驱动真实 Chromium 浏览器,登录一次后缓存会话,后续请求都在已登录的浏览器上下文里执行,不需要你逆向任何加密接口。
基于 playwright 的浏览器会话采集
传统 requests 爬虫发的是"裸"HTTP 请求,缺少浏览器指纹和加密签名,平台风控很容易识别。MediaCrawler 换了个思路:
- 启动一个完整的 Chromium 实例,保留 cookie、localStorage 等全部登录态
- 需要加密参数(如抖音签名)时,直接在浏览器里执行 JS 表达式取回结果
- 配合
libs/stealth.min.js抹掉自动化特征,行为模式更接近真人
所以你不需要关心每个平台的签名算法,扫码登录一次,后续采集全走已登录的浏览器通道,触发风控的概率大幅降低。
三分钟跑通首次采集
环境准备
git clone https://gitcode.com/GitHub_Trending/me/MediaCrawler-new cd MediaCrawler-new python -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,数据分析" LOGIN_TYPE = "qrcode" # qrcode / phone / cookie SAVE_DATA_OPTION = "json" # json / csv / db CRAWLER_MAX_NOTES_COUNT = 50跑第一条命令
python main.py --platform xhs --lt qrcode --type search浏览器弹出后用手机小红书扫码,登录成功即开始采集,数据写入data/目录。--type还支持detail(指定 ID)和creator(创作者主页),完整参数用python main.py --help查看。
三种采集模式与多格式存储
🔍 搜索、定向与主页采集
- 关键词搜索:
KEYWORDS填多个词(逗号分隔),程序逐个搜索并汇总 - 指定 ID 定向抓取:把帖子/视频 ID 填入各平台的
*_SPECIFIED_ID_LIST,精确采集目标内容 - 创作者主页(仅小红书):填
XHS_CREATOR_ID_LIST,拉取指定博主的全部笔记
💬 评论与互动指标
ENABLE_GET_COMMENTS = True后,每条帖子/视频的评论列表随主数据一起落盘- 点赞、转发、收藏等互动指标默认随主数据保存
MAX_CONCURRENCY_NUM控制并发数,建议从小值开始
📦 存储与登录状态管理
- 数据写入JSON、CSV 或关系型数据库(MySQL / PgSQL),在
config/db_config.py中切换 SAVE_LOGIN_STATE = True时登录态持久化到browser_data/,下次运行免登录- 换账号只需删除
browser_data/目录后重新扫码
运营、分析师和研究者各取所需
内容运营:PLATFORM = "xhs",KEYWORDS填赛道核心词,每周跑一次search模式,拿到热门笔记的标题、点赞和评论,直接作为选题会素材。
市场分析师:用--type detail配合指定 ID 列表定向抓竞品帖子,SAVE_DATA_OPTION = "db"写入数据库后,用 SQL 做时间序列对比,观察竞品投放节奏和互动变化。
学术研究者:开启评论抓取,CRAWLER_MAX_NOTES_COUNT控制样本量,拿到结构化评论文本后直接接 NLP 管线做情感分析或话题建模。
一键配置 IP 代理池避免封禁
大规模采集时 IP 被封几乎是必然。MediaCrawler 内置IP 代理池,基于 Redis 缓存代理 IP 及其过期时间,自动从服务商拉取、轮询和续期。
MediaCrawler 代理IP采集工作流程图,展示从IP获取到数据采集的完整链路
开启方式:在config/base_config.py中设ENABLE_IP_PROXY = True,按需调IP_PROXY_POOL_COUNT(默认 2)。代理密钥通过环境变量jisu_key/jisu_crypto注入,完整步骤见 docs/代理使用.md。
合规使用要点
- 遵守平台规则:控制采集频率和批量大小,避免高频请求触发风控
- 保护用户隐私:数据中可能含个人信息,不对外传播、不用于商业骚扰
- 控制并发与数量:
CRAWLER_MAX_NOTES_COUNT和MAX_CONCURRENCY_NUM设小,模拟正常用户行为 - 数据用途合法:仅用于学习、研究和合规业务分析
常见问题速查
Q:抖音采集报execjs ProgramError: SyntaxError?装 Node.js v16.8.0 及以上版本,抖音签名依赖本地 JS 运行环境。
Q:跑着跑着数据突然拿不到了?大概率触发平台风控,降低采集频率或开启代理池分散 IP。
Q:想换登录账号?删除项目根目录下browser_data/文件夹,重新扫码即可。
Q:playwright TimeoutError: Timeout 30000ms exceeded?检查网络是否正常,浏览器启动阶段依赖网络加载资源。
Q:评论没抓到?确认ENABLE_GET_COMMENTS已设为True,该项默认关闭。
模块划分与新增平台扩展
media_platform/:各平台爬虫实现,按client.py(API 封装)→core.py(业务逻辑)→login.py(登录)→field.py(数据字段)分层store/:各平台数据存储,支持 JSON / CSV / DBbase/:抽象基类,定义统一爬虫接口proxy/:IP 代理池与账号代理池tools/:滑块处理、时间工具等通用函数
扩展新平台:在media_platform/下新建目录,继承AbstractCrawler并实现对应接口,最后在main.py的CRAWLERS字典中注册即可。完整结构说明见 docs/项目代码结构.md。
从第一条命令开始
去docs/目录翻一下常见问题和手机号登录说明,然后打开终端跑python main.py --help看看全部参数。第一条采集命令五分钟内就能出数据,剩下的就是调关键词和数量了。
【免费下载链接】MediaCrawler-new项目地址: https://gitcode.com/GitHub_Trending/me/MediaCrawler-new
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考