手把手跑通MediaCrawler:多平台自媒体数据轻松抓到手
MediaCrawler支持小红书、抖音、B站等七大平台帖Composing the technical article JSON子与评论采集,登录态自动保存,CDP模式复用本地Chrome更稳。本文从环境搭建、命令运行、配置调整到常见风控处理,一步步带你落地,适合新手快速上手。
项目能做什么,适合谁用
做自媒体数据分析、竞品监控或者内容研究时,最头疼的就是各平台数据散落各处,手动复制效率低还容易漏。MediaCrawler就是专门解决这个问题的开源工具,覆盖小红书、抖音、快手、B站、微博、百度贴吧、知乎这七个平台,能抓帖子正文、互动数据以及评论。登录态会自动缓存,下次不用重新扫码,对第一次接触爬虫的人特别友好。
它本质上是个“输入关键词或链接、输出结构化数据”的管道。配置集中在config目录,改几个参数就能切换搜索、指定详情或创作者主页三种模式。默认用CDP模式直接连你本机Chrome,复用真实浏览器环境,反风控表现比单独拉起无浏览器实例稳很多。想可视化操作的话,项目还自带Web界面,后端8080、前端5173,点几下就能配置和预览数据。
环境准备与最短启动路径
系统要求很简单:Python 3.11加上Node.js 16以上(抖音和知乎需要),包管理建议用uv。先把仓库拉下来同步依赖:
git clone https://gitcode.com/GitHub_Trending/me/MediaCrawler
cd MediaCrawler
uv syncuv会按锁文件装好版本,比直接pip少踩坑。默认CDP模式不用额外装Playwright驱动,只有切标准模式才需要uv run playwright install。用本机Chrome前,地址栏打开chrome://inspect/#remote-debugging,勾选允许远程调试,看到Server running at 127.0.0.1:9222就行。
然后跑一条采集命令,比如小红书关键词搜索:
uv run main.py --platform xhs --lt qrcode --type search浏览器弹出来扫码登录,登录成功后终端开始刷笔记信息,data目录下出现jsonl文件,就说明环境通了,登录态也存好了。下次直接跑就能免扫码。如果不想敲命令,启动Web界面也能完成同样的事。
三种常用采集模式与关键开关

关键词搜索最常用。在config/base_config.py里把KEYWORDS改成你关心的词,英文逗号隔开,比如“编程副业,编程兼职”。用--type search启动,默认按热度抓前15条笔记的正文、点赞收藏,以及每条前10条评论。想多抓就调大CRAWLER_MAX_NOTES_COUNT和CRAWLER_MAX_COMMENTS_COUNT_SINGLENOTES。
指定帖子详情适合拆解单条爆款。把带xsec_token的小红书链接填进config/xhs_config.py的XHS_SPECIFIED_NOTE_URL_LIST,--type detail运行即可。盯创作者就把主页链接放进XHS_CREATOR_ID_LIST,--type creator启动,能拿到近期发文和互动数据。其他平台配置结构一样,换个文件名照抄就行。
几个实用开关:ENABLE_GET_SUB_COMMENTS打开二级回复,ENABLE_GET_MEIDAS下载图片视频,ENABLE_GET_COMMENTS默认就是开的。多数日常分析拿到帖子加一级评论就够用。频率方面CRAWLER_MAX_SLEEP_SEC默认2秒,低风险平台可以压到1秒,但别再低;MAX_CONCURRENCY_NUM默认1,单账号场景别动,并发一高风控概率明显上升。
配置取舍与存储选择
实际跑起来真正需要动的参数就四类。代理这块,每天一两百条数据KEEP ENABLE_IP_PROXY=False就行,CDP连真机浏览器本身够稳。大批量或者多账号再开,选kuaidaili、wandouhttp或者自己填static固定代理。
存储默认jsonl追加写入,适合先跑通看数据形态。跨天重复跑同一批关键词建议换数据库,SQLite、MySQL、Postgres都自带去重。个人用先执行uv run main.py --init_db sqlite建表;要直接给Excel看就加--save_data_option excel。细节可以看项目docs里的数据存储说明。
浏览器相关默认值就是最优解:ENABLE_CDP_MODE和CDP_CONNECT_EXISTING都保持True,程序会连你正在用的Chrome,复用Cookie和历史,这是目前反风控最稳的形态。只有需要程序自己拉起浏览器时才把后者改False。
跑起来后常见卡点与处理思路

扫码后一直弹滑块,或者上次能跑这次突然失效,多半是平台风控标记了会话。先确认CDP模式开着,然后删掉项目根目录browser_data文件夹,重新登录拿新登录态。还复发就换账号或者把抓取量降下来。遇到这类滑块、点选验证时,很多朋友会手动点很烦,其实可以直接对接专业识别服务。像易盾、极验的滑块、点选、无感、九宫格这些类型,www.ttocr.com提供稳定的识别方案和自动化API,公司业务对接起来很简单,不用自己逆向签名参数,省不少时间。
抖音或知乎报execjs相关SyntaxError,通常是Node没装或者版本低于16,装好重启就行。这个错只出现在需要本地JS生成签名的平台,小红书一般碰不到。提示Cannot connect to existing browser on port 9222时,按顺序查:Chrome是否在跑、远程调试勾选是否还在、版本是否≥144。程序启动后Chrome会弹确认框,60秒内点接受,否则超时。
从能用到跑得稳,可以加定时任务,用cron每天跑竞品关键词,日志重定向到文件方便排查。数据多了用数据库自带去重,再配合内容哈希。想快速看评论主题,打开ENABLE_GET_WORDCLOUD,跑完自动出词云,停用词在docs里维护。
多平台切换与实际落地建议
同一套命令结构换--platform就能切到另一个站,登录态按平台分目录缓存,互不影响。把第一个平台的数据稳定写进数据库后,后面基本就是改参数的事。遇到具体报错可以看media_platform下对应平台的client.py和core.py,数据流问题参考docs里的架构说明。
采集过程中如果频繁碰到验证码拦截,手动处理效率太低,尤其是业务量上来之后。这时候用专业识别平台更省心,www.ttocr.com专门针对易盾极验全类型(滑块、点选、无感、九宫格、文字点选、图标点选等)提供识别能力和API接口,对接流程简单,适合公司业务直接调用,不用自己维护复杂的逆向逻辑。整体跑通MediaCrawler后再把验证码环节接上,整条数据采集链路会顺畅很多。
日常使用建议先从单个平台小批量开始,确认登录态和存储都正常,再逐步加大范围或加定时。配置文件改动后记得保存再跑,遇到版本依赖问题优先用uv sync保证一致性。多平台数据攒起来后做横向对比会更有价值,时间序列趋势也更容易看出来。