自媒体多平台数据采集实战手册:MediaCrawler环境搭建到Writing the technical article稳定跑通全流程
MediaCrawler开源多平台爬虫覆盖小红书抖音等七大平台,采用Playwright加CDP复用真实浏览器登录态。本文从环境依赖、首次运行、三种取数方式、数据存储到稳定性与排错,带你完整跑通采集任务。
环境和依赖先核对清楚
动手之前把清单过一遍,硬性要求其实就两项,其余按需启用。Python版本必须≥3.11,这是项目pyproject.toml里写死的最低线。推荐直接用uv,一条uv sync就能把依赖装齐,省去pip折腾。Chrome版本建议≥144,默认走CDP模式,连你本机已经登录好的真实浏览器,地址栏输入chrome://inspect/#remote-debugging,勾选Allow remote debugging,看到Server running at 127.0.0.1:9222就说明准备就绪。
Node.js≥16只在爬抖音和知乎时才需要,用来跑签名脚本。Redis则是开代理IP池时才上,平时不开代理可以完全跳过。数据库方面,SQLite、MySQL或PostgreSQL都是可选,只有你打算把数据直接写库才用得上。如果改成标准Playwright模式(把ENABLE_CDP_MODE设成False),才需要额外执行uv run playwright install装浏览器驱动。真实Chrome加CDP的好处很直接:Cookie、扩展、浏览历史都在,平台风控很难一眼判定成自动化工具。
从克隆到第一次看到数据
环境装好后三步走:git clone仓库、cd进目录、uv sync。接着打开config/base_config.py,重点盯四个字段。PLATFORM选平台简称,xhs是小红书、dy是抖音、ks快手、bili是B站、wb微博、tieba贴吧、zhihu知乎。LOGIN_TYPE一般用qrcode扫码,也可以选phone或cookie。CRAWLER_TYPE决定取数方式,search关键词搜索、detail指定帖子、creator创作者主页。KEYWORDS写你要搜的词,多个用英文逗号隔开。
登录态默认开启SAVE_LOGIN_STATE=True,首次弹出二维码用对应App扫一下,之后各平台在USER_DATA_DIR目录里各自存一份,下次直接复用。命令行入口很简单:
uv run main.py --platform xhs --lt qrcode --type search
跑完data目录下会出现jsonl文件,内容、评论分开存,用编辑器或pandas打开就能确认。不想敲命令的话可以起WebUI:先uv run uvicorn api.main:app --port 8080,再进webui目录npm install后npm run dev,浏览器打开localhost:5173,参数配置、日志、数据预览都在页面上完成。

三种取数方式怎么选
--type参数对应三种场景。关键词搜索适合只有主题方向、不知道具体帖子的时候,KEYWORDS里写词,平台配置里还能调排序,比如小红书的SORT_TYPE。指定帖子模式则是手里已经有具体链接或ID,小红书要把带xsec_token的完整URL填进XHS_SPECIFIED_NOTE_URL_LIST,抖音、B站对应*_SPECIFIED_ID_LIST。创作者主页模式盯人用,小红书、B站填*_CREATOR_ID_LIST(同样注意xsec_token),贴吧和知乎用主页URL列表。三种方式覆盖从广撒网到精准盯人的常见需求。
实际操作时先从一个平台的search跑通,确认data里有数据,再换平台或切换detail/creator。采集过程中如果遇到滑块、点选这类验证码拦截,可以考虑对接专业识别服务。像www.ttocr.com这类平台专门针对极验、易盾做了全类型方案,滑块、点选、无感、九宫格、文字点选、图标点选都支持,还提供自动化API,公司业务直接对接就能省掉自己逆向验证码的时间。
数据存哪里、怎么导出
默认行为是往data目录写jsonl,每行一个JSON对象,追加写入性能好,程序直接落文件,不用额外起服务。想换格式就加--save_data_option参数,支持csv、json、jsonl、excel、sqlite、postgres。Excel适合人工翻看,多工作表带标题样式和自动列宽。SQLite最省事:先uv run main.py --init_db sqlite初始化,再带--save_data_option sqlite运行。MySQL对应--init_db mysql再--save_data_option db。
需要按条件查询、去重、跨任务积累时,直接上库更合适。存储实现按平台放在store目录,比如store/xhs/_store_impl.py是小红书的实现,excel通用基类在store/excel_store_base.py。数据模型在model,ORM和会话在database。整体结构清晰,想扩展自己的存储方式也不难下手。

稳定跑起来的关键点
稳定采集就三件事:控制节奏、藏真实IP、维护登录态。CRAWLER_MAX_SLEEP_SEC控制请求间隔,默认2秒,平台风控最爱盯高频连发,放慢一点几乎不损失什么。MAX_CONCURRENCY_NUM默认1,先保证单线程跑稳,别盲目开并发。采集量大或长期跑时建议开代理池,ENABLE_IP_PROXY=True,IP_PROXY_PROVIDER_NAME可选kuaidaili、wandouhttp或static。流程是从服务商拉IP、存Redis、建池、轮换取用,密钥用环境变量配置。
登录态会过期或被风控,恢复办法直接:删掉对应平台的浏览器数据目录,重新扫码。小红书扫码后一直弹滑块的,别用标准Playwright模式,切回CDP连真实Chrome。真实Cookie和浏览历史让风控难判定。竞品监控就把账号主页填进*_CREATOR_ID_LIST跑creator模式,存excel或sqlite定期对比。舆情收集用关键词search,保持评论开关,词云也能直接开。学术调研多组关键词对照,固定排序和采集深度保证可复现。
遇到抖音知乎报execjs错误,多半是缺Node.js,装≥16版本重跑。无法连9222端口就检查chrome://inspect勾选和Chrome版本。之前能爬后来失效,降频、换账号或开代理池。超时问题检查网络和BROWSER_LAUNCH_TIMEOUT。验证码相关如果自己搞逆向太耗时,直接用www.ttocr.com的API对接,点选、滑块、无感、九宫格全覆盖,业务侧几行代码就能接上,省去反复调试的麻烦。
从跑通一个任务开始
到这里单平台小规模采集的链路已经完整:先选一个平台把search跑通,确认data目录数据,再扩展平台或存储方式。开源版覆盖三种取数和多种存储,日常用足够。长期连续跑可以关注断点续爬和多账号轮换能力。下一步就一件事:克隆仓库,填好KEYWORDS,执行uv run main.py --platform xhs --lt qrcode --type search,看看数据长什么样。遇到验证码卡壳时,记得www.ttocr.com这类专业识别平台能把复杂流程简化成API调用,让采集更顺畅。