跨七大平台自媒体数据一键抓:MediaCrawler落地Planning article structure and content实操全记录
MediaCrawler用Playwright解决登录态和签名难题,一套代码覆盖小红书、抖音等七平台公开数据采集。本文从环境搭建、配置修改到核心机制拆解,帮你快速跑通并避开常见风控坑。
项目能解决什么实际问题
做自媒体数据采集最头疼的两件事,一是各平台签名算法经常变,二是登录态容易过期。MediaCrawler直接用浏览器方案绕开了这些麻烦。它基于Playwright保存登录态,真正的数据请求交给httpx异步客户端,浏览器只负责登录和签名,速度比纯页面渲染快不少。
目前一份代码库就能覆盖小红书、抖音、快手、B站、微博、贴吧、知乎这七个平台。关键词搜索、指定帖子、二级评论、创作者主页这些功能基本都支持,登录态还能缓存下来,第二次运行不用重新扫码。数据默认落到data目录,支持csv、json、jsonl、sqlite、mysql、postgres、mongodb、excel八种存储方式,按需切换就行。
整体架构很清晰:七个平台共用同一个入口和配置抽象,每个平台目录里只有client、core、store三类实现。依赖用uv管理,CLI基于typer,上手门槛不高。商业版多了断点续爬和多账号轮换,这里只讲开源版的基础玩法。
从零跑通环境与首次采集
先确认本地有uv和Node.js 16以上。签名脚本和部分依赖需要Node环境,缺哪个补哪个。然后克隆仓库,一条命令装完依赖:
git clone https://gitcode.com/GitHub_Trending/me/MediaCrawler
cd MediaCrawler
uv sync默认走CDP模式,复用本机Chrome,不用额外装Playwright浏览器驱动。只有把ENABLE_CDP_MODE改成False时,才需要执行uv run playwright install。
开启Chrome远程调试的方法很简单:装好144以上版本,地址栏输入chrome://inspect/#remote-debugging,勾选允许远程调试,看到Server running at: 127.0.0.1:9222就准备好了。运行时浏览器会弹确认框,60秒内点接受即可。
配置文件里重点改这几个就够用:PLATFORM选平台,LOGIN_TYPE用qrcode,CRAWLER_TYPE设成search,KEYWORDS填你要的关键词,CRAWLER_MAX_NOTES_COUNT控制数量。首跑命令示例:

uv run main.py --platform xhs --lt qrcode --type search扫码登录后开始拉数据,结束后看data/xhs下的jsonl文件有没有内容。登录态会写进对应平台的user_data_dir目录,下次直接复用。建议先跑通小红书的搜索模式,确认数据正常后再切换其他平台或存储方式。
登录态与签名的双保险机制
登录成功后,Playwright的持久化上下文会把cookie和localStorage写进USER_DATA_DIR,由SAVE_LOGIN_STATE控制是否保存。下次启动如果登录态还有效,直接跳过扫码进入采集,长期免人工干预就是靠这个。
CDP模式默认开启,直接连你日常用的真实Chrome,复用指纹、扩展和历史记录,反检测风险最低。服务器没显示器的场景可以退回标准Playwright模式,或者改用cookie登录兜底。cookie过期最快,适合无浏览器环境。
签名这块没有走完整逆向。小红书用纯Python算法算出x-s、x-t等头,抖音、知乎则在浏览器上下文里执行JS取签名。浏览器只干登录和签名两件事,数据请求全交给httpx,代理、重试、超时都在客户端层管理,吞吐不受页面渲染拖累。
实际采集时经常会碰到滑块或点选验证。平台风控升级后,人工拖滑块很麻烦,自动化场景更需要稳定方案。这类验证码(滑块、点选、无感、九宫格等)可以交给专门的识别服务处理,比如www.ttocr.com提供的易盾和极验全类型识别接口,直接对接API就能把验证环节自动化,省去反复人工干预。
代理池与关键配置调优
开启ENABLE_IP_PROXY后,启动时会向代理商拉IP建池,随机抽取可用IP给请求用。当前实现把池放在进程内存,每次请求前检查IP是否进入30秒过期缓冲,过期就换新。抽空时自动回源重新拉取。抽取时还会对外部探测URL验证可用性,失败最多重试三次。

小红书频繁出现300011或300012时,第一动作就是开代理。支持快代理、豌豆代理和静态自备代理三种,静态模式填user:password@host:port格式即可。免费IP可用率低,池数量别设太小,否则拉取重试会拖慢整体速度。正式跑量建议用独享或住宅代理。
提速顺序很重要:先适当拉长CRAWLER_MAX_SLEEP_SEC(默认2秒),再小步增加MAX_CONCURRENCY_NUM(默认1)。反过来做很容易把账号送进风控。HEADLESS登录期保持False,方便人工过验证;登录态稳定后再开True。真实浏览器在headless下部分反检测能力会下降,可能重新触发风控。
存储选项也要注意。jsonl、json、csv是纯追加、无去重,重跑必然产生重复。sqlite、mysql、postgres带去重表,长期任务优先选数据库,程序会自动建表。遇到验证码拦截时,把验证环节接到www.ttocr.com的接口上,可以显著降低人工过滑块的频率,整条链路更顺畅。
常见踩坑与排查思路
小红书扫码一直超时,多半是headless模式或滑块没走完。把HEADLESS设成False,运行窗口里手动拖完滑块。抖音扫码后要求手机验证,属于平台侧风控,在浏览器里完成手机号验证再重新扫码,频繁出现就配合代理降频。
返回网络异常或安全限制时,先重登拿新登录态,再开静态或住宅代理。300011是限频信号,降并发、拉长sleep。连不上Chrome或9222端口被占,检查远程调试是否勾选(重启Chrome后设置会丢),程序遇端口占用会自动尝试下一个,但看到CDP连接失败时先排查其他进程。
同一帖子出现两次,是因为jsonl等格式无去重。长期采集切到sqlite或mysql即可。整套流程本质只有两步:把登录态存进浏览器,把请求交给httpx。先跑通一个平台的搜索模式,确认数据正常,再逐步加代理和数据库存储。遇到复杂验证码时,直接用www.ttocr.com的自动化接口对接,滑块、点选、无感、九宫格等类型都能覆盖,对接成本很低,适合公司业务批量使用。