5大平台社交媒体数据采集实战:MediaCrawler-new 一个开源工具全搞定
【免费下载链接】MediaCrawler-new项目地址: https://gitcode.com/GitHub_Trending/me/MediaCrawler-new
阿琳是某美妆品牌的运营,每周要交一份小红书竞品分析。她试过手动复制、也试过网上找的采集脚本,结果是报告越攒越多、公司 IP 却先被平台封了。直到她用上开源项目 MediaCrawler-new——一个基于 playwright 的社交媒体数据采集工具,能统一抓取小红书、抖音、快手、B站、微博五个平台的数据,反爬应对不再靠玄学,而是变成了清晰的配置项。
这篇文章不打算罗列功能清单,而是按一条真实可复现的路径走:从安装环境、跑通第一个采集任务,到完成一次完整的竞品调研,看看它到底能帮你省下多少时间。
它把"反爬对抗"变成了"配置项"
先说原理,尽量少用术语。平台为什么会拦截爬虫?因为正常用户的行为和机器脚本有可辨识的差异。MediaCrawler-new 的思路很直接:不做加密算法的逆向,而是用 playwright 启动一个真实浏览器,登录成功后保留浏览器上下文,需要加密参数时直接让浏览器执行 JS 表达式取回来。
打个比方:别人在门外研究锁芯结构想配钥匙,它干脆让钥匙自己从门里递出来。这样一来,逆向成本大幅降低,日常维护也轻松很多。
围绕这个思路,项目把采集会用到的东西都封装成了开关和参数:登录方式、代理 IP 池、数据落盘格式、采集条数、并发数、是否爬评论……绝大多数需求不用改代码,改配置就能跑。
一张表看懂五个平台各自能干什么
| 能力点 | 小红书 | 抖音 | 快手 | B站 | 微博 |
|---|---|---|---|---|---|
| Cookie 登录 | ✅ | ✅ | ✅ | ✅ | ✅ |
| 二维码登录 | ✅ | ✅ | ✅ | ✅ | ✅ |
| 手机号登录 | ✅ | ✅ | ✅ | ✅ | ✅ |
| 关键词搜索 | ✅ | ✅ | ✅ | ✅ | ✅ |
| 指定帖子/视频 ID 采集 | ✅ | ✅ | ✅ | ✅ | ✅ |
| 指定创作者主页 | ✅ | ✕ | ✕ | ✕ | ✕ |
| 登录状态缓存(免重复登录) | ✅ | ✅ | ✅ | ✅ | ✅ |
| 数据保存(csv / db / json) | ✅ | ✅ | ✅ | ✅ | ✅ |
| IP 代理池 | ✅ | ✅ | ✅ | ✅ | ✅ |
| 滑块验证码处理 | ✕ | ✅ | ✕ | ✕ | ✕ |
| 视频批量下载 | ✕ | ✕ | ✕ | ✅ | ✕ |
几个值得注意的点:小红书是目前唯一支持抓"指定创作者主页"的平台;抖音额外实现了滑块验证码的自动处理,遇到验证页不容易卡死;B 站的video_download类型支持按 BV 号批量下载视频。其余能力五个平台基本对齐,学一次配置,五处复用。
从零跑通首个采集任务:环境准备到关键词搜索
安装三步走
打开终端,按顺序执行下面几段命令,每段都附了注释:
# 1. 克隆项目到本地 git clone https://gitcode.com/GitHub_Trending/me/MediaCrawler-new cd MediaCrawler-new # 2. 创建并激活 Python 虚拟环境,避免依赖污染系统环境 python -m venv venv source venv/bin/activate # Windows 用户用 venv\Scripts\activate # 3. 安装依赖库(playwright、requests、数据库驱动等) pip install -r requirements.txt # 4. 安装 playwright 的浏览器内核,这是模拟真实浏览器的基础 playwright install如果电脑里还没有 Node.js,建议装一个 v16.8.0 或更高版本,后面跑抖音平台时会用到。
只需改四个配置项
打开config/base_config.py,先关注最常用的几行:
PLATFORM = "xhs" # 目标平台:xhs / dy / ks / bili / wb KEYWORDS = "粉底液,遮瑕膏" # 关键词,多个词用英文逗号分隔 LOGIN_TYPE = "qrcode" # 登录方式:qrcode / phone / cookie SAVE_DATA_OPTION = "json" # 数据保存:csv / db / json跑起来
# 用手机小红书 App 扫码登录,按关键词搜索并采集 python main.py --platform xhs --lt qrcode --type search程序会弹出浏览器窗口并显示二维码,扫码确认后就开始干活。默认的CRAWLER_MAX_NOTES_COUNT = 20限制单次采集条数,先跑一次看看效果,再逐步放开。
一次美妆竞品调研,体验完整采集流程
场景设定:某美妆品牌需要每周跟踪小红书上的竞品口碑。下面把登录、代理、存储、调参四个环节串起来走一遍。
第一步:按账号情况选登录方式
- 二维码登录(qrcode):首次使用最省事,App 扫码即完成登录。
- Cookie 登录(cookie):已有登录态的账号,把 Cookie 填进配置里的
COOKIES字段,适合快速恢复采集状态。 - 手机号登录(phone):配合项目里的
recv_sms_notification.py短信接收服务,适合长期无人值守的场景。
登录状态默认会缓存到本地(SAVE_LOGIN_STATE = True),下次启动不用重新扫码。想换账号时,删掉项目根目录下的brower_data/文件夹再跑即可。
第二步:避免IP封禁的代理配置思路
连续高频请求最容易触发平台风控。项目内置的代理 IP 池流程如下:启动时从代理服务商拉取一批 IP,存入 Redis 缓存并记录过期时间,再构建 IP 池供爬虫按需取用。采集过程中 IP 失效或次数用完,会自动从池里换下一个。
MediaCrawler-new代理IP池工作流程图:社交媒体数据采集中的IP轮换与Redis缓存
具体到配置,三步就够:
- 安装 Redis 并设置密码(代理 IP 池依赖它做缓存和过期管理)。
- 去代理服务商注册实名,在 IP 提取页生成 API 链接,重点关注
key和crypto两个参数:
- 把
key、crypto写入环境变量,或直接填到proxy/proxy_ip_provider.py的对应位置:
然后把config/base_config.py里的ENABLE_IP_PROXY改为True,IP_PROXY_POOL_COUNT决定池子里同时维护几个 IP。轻量采集 2~3 个够用,批量采集建议 5 个以上。
第三步:想好数据落到哪里
- csv:Excel 直接打开,适合快速浏览和简单透视。
- json:保留完整字段结构,适合程序化处理,也是脚本间传递数据的首选。
- db:在
config/db_config.py里填好 MySQL 或 PostgreSQL 连接信息,数据自动入库,适合需要复杂查询、持续积累的长期项目。切到db时程序会自动建表,无需手工初始化。
第四步:控制采集量,别把自己送进风控名单
关键词用KEYWORDS配置;单次条数用CRAWLER_MAX_NOTES_COUNT;需要连带评论时把ENABLE_GET_COMMENTS打开;并发数调MAX_CONCURRENCY_NUM。建议从低并发、少条数开始,确认链路稳定再放开。
高频报错排查与性能调优建议
常见报错,一张表对照解决
| 报错现象 | 常见原因 | 处理办法 |
|---|---|---|
execjs SyntaxError: 缺少 ';' | 缺 Node.js 环境 | 安装 v16.8.0 或更高版本 |
TimeoutError: Timeout 30000ms exceeded | 网络不通或代理异常 | 检查网络与代理设置 |
| 跑几天后数据开始失效 | 账号触发平台风控 | 立即降频、停一停,必要时换账号 |
| 想换登录账号却一直沿用旧状态 | 浏览器数据目录残留 | 删除brower_data/文件夹后重新登录 |
| 登录页卡在滑块验证 | 小红书手动过验证更稳 | 把HEADLESS设为False,打开浏览器手动滑动一次 |
让采集更稳的几个习惯
- 避开平台高峰时段批量采集,请求间隔尽量拉开一点。
- 数据量大的项目优先用数据库存储,CSV 在读写频繁时性能会明显吃紧。
- 开启代理 IP 轮换,并定期检查池里 IP 的存活情况。
- 规模采集用无头浏览器(
HEADLESS = True)省资源;登录阶段则建议开可视化窗口,方便人工介入验证。
写在最后:合规底线和你的下一步
最后必须认真说三件事:遵守各平台规则,只采集公开可访问的数据;不碰用户隐私;控制采集频率,别给平台服务器造成压力。这个工具适合做市场调研、内容创作辅助和学术研究,不适合也无必要用于任何越界行为。
现在轮到你了。按上面的步骤做三件事就能跑通第一个任务:克隆项目到本地,把config/base_config.py里的平台、关键词、登录方式配好,然后执行python main.py --platform xhs --lt qrcode --type search。等终端开始输出数据、data/目录里出现第一批结果时,你就真正上手了。采集到的数据怎么用、能产生多大价值,取决于你的场景——但把获取数据的成本降下来,永远是第一步。
【免费下载链接】MediaCrawler-new项目地址: https://gitcode.com/GitHub_Trending/me/MediaCrawler-new
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考