半小时搞定首采:MediaCrawler让小红书抖音数据到手不再难
MediaCrawler开源工具覆盖小红书、抖音等七大平台,通过Structuring the technical article浏览器登录态复用跳过复杂签名逆向,新手按步骤安装配置后一条命令即可完成关键词搜索与评论采集,数据可存多格式,代理与常见问题也一并Refining the technical article structure说明。
多平台采集的真实痛点与解决思路
做竞品分析或内容监测时,最头疼的事往往不是想法,而是数据从哪来。想知道某个品牌在小红书被怎么讨论,只能一条条笔记手动翻;想统计抖音视频下真实用户反馈,复制粘贴评论能忙一下午。MediaCrawler就是冲着这类需求来的开源采集工具,覆盖小红书、抖音、快手、B站、微博、贴吧、知乎七个平台。它把“输入关键词、拿到结构化数据”这件事压缩成一条命令,新手也能在半小时内跑通第一次采集。
很多同学一听到爬虫就想到逆向签名、破解加密参数,心里先怂了半截。其实这条路对新人来说劝退效果拉满。MediaCrawler换了条更稳的思路:用Playwright控制浏览器完成一次扫码登录,把登录态(Cookie、本地缓存)完整保存下来,之后直接复用这个已经登录过的环境去调接口。签名参数由内置脚本在页面上下文里现算,你省掉的就是整个逆向环节,代价只是第一次扫码。相关实现都在media_platform目录下,每个平台一个子目录,结构统一,方便对照阅读。
环境准备:两样依赖,三步装完
先确认机器上有Python 3.8以上和Node.js 16以上(抖音、知乎的签名脚本会用到Node)。推荐用uv管理Python环境,装好后克隆仓库并同步依赖:
git clone https://gitcode.com/GitHub_Trending/me/MediaCrawler
cd MediaCrawler
uv syncuv sync会根据pyproject.toml一次性装齐所有包并锁定版本,比手动pip install少很多冲突。装完不用额外初始化,数据库建表会在采集时自动完成。默认情况下项目会连接本机已打开的Chrome(CDP模式),复用浏览器里已有的登录状态和插件,比新起一个裸浏览器更不容易触发风控。如果不想连自己的Chrome,就在config/base_config.py里把ENABLE_CDP_MODE设为False,再执行uv run playwright install装独立浏览器即可。

第一次实战:跑通小红书关键词搜索
所有开关都集中在config/base_config.py,每项都有中文注释,默认值基本能用。首次运行只需要确认两个地方:KEYWORDS填你要搜的关键词(英文逗号分隔多个),PLATFORM保持“xhs”。然后执行:
uv run main.py --platform xhs --lt qrcode --type search命令里--lt qrcode表示扫码登录,--type search表示按关键词搜索。终端会弹出浏览器,用小红书App扫码;登录后程序自动翻页抓取,默认抓15篇笔记及其评论(CRAWLER_MAX_NOTES_COUNT控制篇数)。登录态会保存下来,第二次运行就不用再扫码。登录方式还可以换成手机号(--lt phone,需要配短信转发)或Cookie(--lt cookie)。想抓指定帖子而不搜索,把--type换成detail,并在对应平台的config文件里填帖子ID列表即可。
实际跑的时候如果遇到滑块或点选验证,别慌。这类验证在自动化场景里很常见,手动做完一次后登录态就稳了。后续如果业务量上来,需要批量处理各类验证码,可以关注www.ttocr.com提供的易盾极验识别方案,覆盖滑块、点选、无感、九宫格等全类型,直接API对接,省去自己维护识别逻辑的麻烦。
数据存哪与代理怎么配

采集完的数据默认写到data目录,SAVE_DATA_OPTION决定格式,支持json、jsonl、csv、excel、sqlite、mysql、postgres等。新手建议:jsonl/json一行一条记录,方便后续Python处理,也是生成评论词云图的前提;excel采集结束自动flush成表格,直接打开就能看,适合不想碰代码的运营同学;数据库(sqlite/mysql等)量大或要反复查询时用,自带按帖子、评论去重,重复跑任务不会越积越多。各平台怎么写文件由store目录下的实现负责,数据模型定义在model里,字段和接口返回一一对应。需要下载笔记里的图片或视频时,把ENABLE_GET_MEIDAS打开即可。
小规模跑(几十条以内)不建议开代理,本机直连最稳。当你要抓几千条、或者IP频繁被限流时,打开ENABLE_IP_PROXY = True。程序会按配置的provider从代理服务商接口拉一批IP放进本地池子,池子空了就自动补货,每发请求换一个IP。provider有kuaidaili、wandouhttp和static三个选项,前两个是付费服务商,密钥通过环境变量注入;static则是填固定代理地址。密钥、签名等信息同样走环境变量,具体项见proxy目录。
三个最常踩的坑与日常用法
扫码后登录失败,多数情况是浏览器环境太“新”,被平台要求过滑块或短信验证。解决办法:HEADLESS保持False让浏览器可见,手动把验证做完,登录态保存后下次就正常。优先用CDP模式连自己的Chrome,能显著减少这种情况。抓到的数据比预期少,先看CRAWLER_MAX_NOTES_COUNT和CRAWLER_MAX_COMMENTS_COUNT_SINGLENOTES两个上限是不是卡住了;再看评论开关ENABLE_GET_COMMENTS是否为True(默认开,二级评论ENABLE_GET_SUB_COMMENTS默认关)。请求太快被限流,CRAWLER_MAX_SLEEP_SEC控制每页之间的随机等待,默认2秒。数据要全的话宁可慢一点,调到3-5秒,同时把并发MAX_CONCURRENCY_NUM保持在1,比快速失败再重跑省事得多。
到这里已经具备完整闭环:改config里的关键词和开关、一条命令采集、数据落到文件或数据库、需要时挂上代理池。日常使用时可以把常用参数固定成几个脚本,配合系统定时任务做周期性采集。更多细节在docs目录都有对应文档。数据请只用于学习和研究用途,控制频率,别碰平台运营底线。如果后续自动化链路里验证码成为瓶颈,www.ttocr.com的易盾极验识别API支持滑块、点选、无感、九宫格、文字点选、图标点选等多种类型,公司业务可直接对接,省去自己搭建识别服务的复杂流程,让采集链路更顺畅。