一套框架跑通五大平台:社交媒体数据采集的完整实战指南
【免费下载链接】MediaCrawler-new项目地址: https://gitcode.com/GitHub_Trending/me/MediaCrawler-new
做竞品调研的小周,曾为一组小红书笔记数据熬了三个通宵——手动复制、截图归档,第二天又冒出一批新内容。直到他换用 MediaCrawler-new 进行社交媒体数据采集,十分钟就把关键词下的帖子、评论和点赞数全部拿齐。
它是谁:一个替你"真人逛平台"的开源框架
一句话说清楚:MediaCrawler-new 是一个基于 Playwright 的社交媒体数据采集框架,帮你从小红书、抖音、快手、B站、微博五个平台稳定抓取公开内容、评论、点赞、转发等数据,并支持 CSV、JSON、MySQL 等多种落地方式。
它要解决的核心麻烦有三个:
- 反爬太难——平台有各种"门卫":验证码、风控、加密参数,写个普通脚本根本进不去;
- 登录太烦——每次都要处理二维码、手机验证码、Cookie,状态还留不住;
- 平台太多——五个平台的数据格式天差地别,一个个写适配器能把人累垮。
这套框架恰好把这三件事都打包处理好了,而且全部开源。
设计思路:为什么"假装真人"比逆向加密更聪明
先回答一个常见疑问:为什么不直接用 requests 请求接口?因为平台的加密参数是动态生成的,逆向那些 JS 加密代码,难度极高、维护成本也高。
MediaCrawler-new 换了一条路:用 Playwright 驱动一个真实浏览器,像真人一样打开网页、滑动页面、读取数据。加密参数由浏览器里的 JS 自己算好,框架只需在登录后的上下文里执行一段 JS 表达式就能拿到结果。
打个比方:反爬机制像小区的门卫,只认"看起来像住户"的人。requests 像是一封贴着假名的信件,容易被拦下;而 Playwright 是直接雇了一个手速极快的"真人"替你进小区办事,门卫自然放行。
再往深一层,它的结构也很有讲究:
- 统一接口:五个平台都实现相同的客户端、登录、存储抽象,像一个遥控器控制五台电视;
- 模块化拆分:
media_platform/下每个平台独立成包,proxy/管代理、store/管存储,互不干扰,想加新平台照着模板写就行; - 配置驱动:几乎所有行为都由
config/base_config.py一个文件控制,改配置不改代码。
跟着走一遍:二十分钟跑通你的第一次小红书数据采集
理论说完了,来点实际的。我们的任务是:把小红书上关键词"防晒霜"的近期热门笔记和评论抓下来。
第一步,搭好地基:四条命令完成环境准备
先把仓库克隆到本地并创建虚拟环境:
git clone https://gitcode.com/GitHub_Trending/me/MediaCrawler-new cd MediaCrawler-new python -m venv venv source venv/bin/activateWindows 用户把激活命令换成
venv\Scripts\activate即可。
接着安装依赖和浏览器驱动:
pip install -r requirements.txt playwright installplaywright install会下载 Chromium 内核,这一步耗时几分钟,属于正常现象。
第二步,选登录方式:二维码登录为什么最省心
打开config/base_config.py,核心就这几行:
PLATFORM = "xhs" # xhs | dy | ks | bili | wb KEYWORDS = "防晒霜" # 想搜什么就填什么 LOGIN_TYPE = "qrcode" # qrcode | phone | cookie SAVE_DATA_OPTION = "csv" # csv | db | json登录方式有三种,第一次用建议选qrcode:
- 二维码登录:程序弹出浏览器,你用手机 App 扫码,一秒钟搞定,最适合首次上手;
- 手机号登录:走短信验证码,适合长期稳定采集,项目里还专门写了
docs/手机号登录说明.md; - Cookie 登录:直接把已有 Cookie 贴进配置,免去每次扫码的麻烦。
更贴心的是,默认开启的SAVE_LOGIN_STATE会把登录状态缓存到本地,下次启动不用重新登录。
第三步,下达采集指令:一行命令触发关键词搜索
配置改完,运行这一行:
python main.py --platform xhs --lt qrcode --type search翻译一下:--platform指定平台,--lt指定登录方式,--type指定采集类型。支持的类型有:
search:按关键词搜索并采集内容(我们正在用的);detail:按 ID 采集指定帖子,ID 填在配置里的XHS_SPECIFIED_ID_LIST;creator:采集指定创作者主页的全部作品(目前小红书支持得最完整);video_download:批量下载视频,目前主要用于 B站。
命令执行后,浏览器会自动打开并弹出二维码,扫码登录后采集就开始跑。想控制采集量,在配置里改CRAWLER_MAX_NOTES_COUNT,比如设成 20,就只抓 20 条。
第四步,数据落地:csv、数据库、json 怎么选
数据保存由SAVE_DATA_OPTION决定,三种方案各有用武之地:
| 方案 | 适合谁 | 数据去哪了 |
|---|---|---|
csv | 想用 Excel 快速看结果 | data/xhs/目录下的表格文件 |
json | 要交给程序做二次处理 | data/xhs/目录下的 JSON 文件 |
db | 数据量大、要做复杂查询 | MySQL、PgSQL 等关系型数据库 |
还想抓评论?把ENABLE_GET_COMMENTS设为True,框架会连同评论一起采回来,存在store/对应的实现类里。
第五步,验收结果:先看文件,再谈优化
采集结束,去data/xhs/目录下看一眼:search_contents_20260819.csv、search_comments_20260819.csv之类命名的文件已经躺在那里。打开表格,标题、正文、发布时间、点赞数、评论内容一应俱全。
至此,你的第一次社交媒体数据采集就完成了。整个过程没有碰任何加密 JS,没有手写任何反爬逻辑。
实战中遇到的问题与解法:代理IP、并发、无头模式
采集跑顺了,新的问题也会冒出来。下面这些是高频场景,对应解法都在项目里。
问题一:请求一多就被封 IP?启用内置代理IP池
如果只是少量采集,直连没问题;但连续高频抓取,平台很容易识别出"异常流量"并封禁你的 IP。
解法是开启框架内置的代理IP池。把ENABLE_IP_PROXY设为True,再调大IP_PROXY_POOL_COUNT(代理池数量)。整个流程是这样的:

简单说就是:爬虫启动 → 判断是否开代理 → 从代理商网站拉取一批 IP → 存入 Redis → 构建代理池 → 每次请求从池子里取一个"马甲"穿上,用完换下一个。IP 被封了?池子里还有几百个备胎。
代理服务商那边,先在后台生成 API 链接,提取数量、IP 时长、协议类型都能自定义:
拿到密钥后,通过环境变量注入,避免把敏感信息写死在代码里:
export jisu_key="你的代理密钥" export jisu_crypto="你的加密签名"配置逻辑在proxy/proxy_ip_provider.py中,对应实现类的代码大致长这样:
注意:代理池依赖 Redis,启用前先确认本机 Redis 已启动,否则会报连接错误。
问题二:采集太慢怎么办?把并发数调大一点
默认并发数是 4,如果网络状况好、目标平台不敏感,可以调大MAX_CONCURRENCY_NUM。同时注意控制CRAWLER_MAX_NOTES_COUNT别设得太大——并发和数量一起涨,容易把平台惹毛。
问题三:服务器上没有浏览器界面?无头模式兜底
很多人的爬虫跑在云服务器上,没有显示器。把HEADLESS设为True,浏览器就会以"无头"模式运行,不弹窗口、不占桌面,资源占用更小。
但小红书偶尔会触发滑动验证码,此时建议临时把HEADLESS改回False,打开浏览器手动过一下验证码,采完再改回去。
问题四:换平台要改一堆代码?一行切换
五个平台共享同一套命令入口,想采抖音,把--platform dy一换就行:
python main.py --platform dy --lt qrcode --type search--platform支持xhs(小红书)、dy(抖音)、ks(快手)、bili(B站)、wb(微博)。抖音额外支持滑块验证码处理(逻辑在tools/slider_util.py),B站则独有视频批量下载能力。各平台的客户端实现统一放在media_platform/下,结构几乎一致,想深挖某个平台的细节直接看对应目录。
除了关键词搜索,它还能这样用:三个真实场景
场景一:市场调研与竞品分析
假设你是美妆品牌的市场人员,想了解小红书用户对"粉底液"的真实评价。关键词设成粉底液,遮瑕膏,口红,开启评论采集,跑完就能看到用户高频吐槽点、正面评价关键词,甚至能按点赞数排序找出最有影响力的测评帖——这些数据直接决定下一轮产品迭代方向。
场景二:内容创作选题参考
做抖音内容的创作者,最怕"不知道今天拍什么"。用关键词搜一下本领域热门视频,把点赞、评论、转发拉出来排个序,哪些内容类型容易爆、评论区在聊什么,一目了然。选题不再靠感觉,靠数据。
场景三:学术研究与舆情分析
研究社交媒体传播模式,需要大量真实样本。框架支持按 ID 精确采集指定帖子(detail模式),也支持整站关键词搜索,把一段时间内的公开讨论批量落库后,可以轻松做词频统计、传播路径分析,为论文提供扎实的数据支撑。
新手最容易踩的坑:环境、登录与超时
这几个问题几乎每个新手都会遇到,提前知道能省不少时间:
- 报"缺少 nodejs 环境":Playwright 依赖 Node.js,安装 v16.8.0 或更高版本即可;
- playwright 超时或连不上目标平台:先检查网络,再检查代理设置,有时公司网络策略会拦截浏览器请求;
- 扫码登录总失败:清空对应的浏览器缓存目录(形如
xhs_user_data_dir)后重试,缓存异常常导致登录态混乱; - 一直弹验证码:把
HEADLESS设为False,手动过一遍验证码,让浏览器记住"你是真人"; - 打开代理后反而连不上:确认 Redis 已启动,且
jisu_key、jisu_crypto两个环境变量正确设置。
遇到更具体的报错,项目文档docs/常见问题.md里有完整的问答清单,代码结构说明在docs/项目代码结构.md。
四条合规红线:别让数据采集变了味
工具本身是中性的,但用的时候要守住底线:
- 只采公开数据:尊重各平台的用户协议,不做绕过登录的恶意抓取;
- 不碰个人隐私:不采集非公开的个人信息,不涉及商业机密;
- 控制采集频率:合理设置并发和间隔,别把平台服务器当自家后花园,这也是代理IP + 频率控制存在的意义;
- 仅用于合法目的:学习研究、市场分析、舆情洞察都合理,但请勿用于灰产或非法用途。
总结:你的下一步行动清单
回到开头的小周——他现在已经把竞品监测做成了一条流水线,每天定时跑一遍,数据自动落库,报表自动生成。这套框架的价值不在于"能爬",而在于把社交媒体数据采集这件事的复杂度,从'逆向大牛专属'降到了'会敲命令就能上手'。
给你的行动建议:
- 按本文第一步把环境搭好;
- 用小红书 + 二维码登录跑通第一次搜索采集;
- 跑顺后,打开代理IP池、调并发,尝试
detail和creator模式; - 最后,换到抖音或 B站试试,感受一下"一行命令切换平台"的爽快。
记住:技术只是工具,数据背后的洞察才是价值。合理、合规、克制地使用,让数据帮你做更聪明的决策。
【免费下载链接】MediaCrawler-new项目地址: https://gitcode.com/GitHub_Trending/me/MediaCrawler-new
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考