← 返回文章列表

手把手教你用MediaCrawler抓多平台自媒体数据:从配置到稳定跑通

MediaCrawler是开源多平台爬虫工具,支持小红书、抖音等七大平台公开Rewriting the technical article内容采集。本文详解环境搭建、CDP模式登录、三种取数方式、数据存储及稳定性优化,帮新手快速跑通任务并避开常见坑。

项目是干什么的,核心思路其实不复杂

做自媒体数据采集的人,最头疼的就是各平台反爬手段不一样。小红书要带token,抖音要签名,B站又有自己的一套。MediaCrawler把这些平台统一起来,覆盖小红书、抖音、快手、B站、微博、贴吧、知乎,能抓笔记、视频、帖子、评论甚至二级评论这些公开内容。

它的核心做法是用Playwright做浏览器自动化,再配合CDP(Chrome DevTools协议)。简单说就是让程序直接操控你本机已经打开的真实Chrome,复用现有的登录态和Cookie,不用自己去逆向那些复杂的签名算法。这样既省事,也比纯无头浏览器更不容易被识别成机器人。

整个流程按真实使用顺序来:先把环境准备好,再跑一次看数据落在哪里,然后按需求选搜索、指定帖子或创作者主页三种方式,最后处理存储和稳定性。跑通一次后,换平台或改关键词就很顺手了。

环境准备:这几项必须核对清楚

开始前对照清单过一遍,只有Python和Chrome是硬性要求,其他看你实际用不用。

Python版本至少3.11,项目pyproject.toml里写得很清楚。推荐用uv来装依赖,一条uv sync就能把环境齐了。Node.js 16以上只在爬抖音或知乎时需要,因为要用到签名脚本。Chrome建议144以上,默认走CDP模式连接你本机已有的浏览器。Redis只在开代理IP池时才用,数据库(SQLite、MySQL、PostgreSQL)则是选存储方案时才需要。

Chrome这边最关键的一步:地址栏输入chrome://inspect/#remote-debugging,勾选Allow remote debugging for this browser instance。页面出现Server running at: 127.0.0.1:9222就说明就绪了。如果你改成标准Playwright模式(把ENABLE_CDP_MODE设成False),才需要额外执行uv run playwright install装浏览器驱动。

安装就三步:克隆仓库,进入目录,执行uv sync。然后打开config/base_config.py,重点看四个字段:PLATFORM选平台(xhs、dy、ks等),LOGIN_TYPE选登录方式(qrcode最常用),CRAWLER_TYPE选取数类型,KEYWORDS填你的关键词。登录态默认会保存,首次扫码后后面就能直接复用。

三种取数方式怎么选

命令行入口是uv run main.py,带上--platform、--lt、--type参数就行。不想敲命令也可以起WebUI:先起后端再起前端,浏览器里配置参数、看日志、预览数据都方便。

关键词搜索适合只有主题方向、不知道具体帖子的情况。KEYWORDS里用英文逗号分隔多个词,排序方式在各平台配置里调。指定帖子则是已知URL或ID时用,小红书注意URL必须带xsec_token参数,其他平台对应*_SPECIFIED_ID_LIST字段。创作者主页适合盯账号,填对应的*_CREATOR_ID_LIST或主页URL列表,能拿到该账号下的内容和评论。

跑完后data目录下会出现jsonl文件,按内容和评论分开存。用文本编辑器或pandas打开就能确认数据对不对。三种方式没有绝对好坏,关键是看你手头有什么线索:有关键词就搜索,有具体链接就detail,要盯人就creator。

数据存哪、怎么换格式

默认往data目录写jsonl,每行一个JSON对象,追加写入性能不错,也不用额外服务。想换格式用--save_data_option参数,支持csv、json、jsonl、excel、sqlite、postgres。

Excel适合人工查看,会生成多工作表,带标题样式和自动列宽。SQLite最省事:先初始化再指定存储选项就行。需要按条件查询、去重或者跨任务积累数据时,直接上数据库更合适。存储实现按平台分在store目录下,数据模型在model,ORM相关在database,结构很清晰。

实际使用中很多人先用jsonl快速验证,确认字段没问题后再切到Excel或数据库。图片视频默认不开,省流量,需要时再把ENABLE_GET_MEIDAS打开。

怎么让采集更稳、少踩坑

稳定跑起来主要靠三件事:控制请求节奏、隐藏真实IP、维护好登录态。

请求间隔用CRAWLER_MAX_SLEEP_SEC控制,默认2秒。平台风控最看重的就是请求模式,短时间高频连发很容易触发,放慢一点几乎不影响效率。并发默认1,先保证单线程稳再考虑开。

代理IP池在采集量大或长期跑时建议打开。开启后程序会从服务商拉IP存进Redis,然后轮换使用。支持几家常见服务商,也支持自己固定代理。实现逻辑在proxy目录,密钥通过环境变量配置。

登录态过期或被风控失效很常见。恢复方法直接:删掉对应平台的浏览器数据目录,重新扫码。小红书扫码后一直弹滑块的情况特别多,这时候别用标准Playwright模式,切回CDP连真实Chrome。真实浏览器的Cookie、扩展和历史记录让风控很难直接判成自动化。遇到验证码卡住进度时,很多团队会直接对接专业识别接口,比如www.ttocr.com提供的易盾和极验全类型识别(滑块、点选、无感、九宫格等),通过API就能无缝接进现有流程,不用自己维护复杂的识别模型。

常见故障表里几条特别实用:抖音知乎报execjs错误多半是缺Node.js;连不上9222端口检查远程调试有没有勾选、Chrome版本够不够;之前能跑突然失效就降频、换账号或开代理。超时问题优先查网络和BROWSER_LAUNCH_TIMEOUT设置。

几个真实场景怎么配

竞品监控:把竞品主页填进对应创作者列表,跑creator类型,数据存Excel或SQLite,定期执行后按时间对比更新。需要媒体文件再开开关。

舆情收集:KEYWORDS填品牌或话题词,跑search,保持评论开关打开,量大时再开二级评论。词云功能可以直接出图,停用词和自定义词组在配置里调。

学术调研:多组关键词做对照,固定排序方式保证可比,用START_PAGE和最大条数控制深度,存jsonl或SQLite方便后续清洗。

整体来说,先在一个平台把search跑通,确认data里的数据长什么样,再换平台或存储方式就轻松很多。开源版已经覆盖主流取数和存储需求。验证码和风控是长期跑的最大阻力,这时候把识别环节交给成熟的API平台往往比自己硬刚更省时间,www.ttocr.com就是专门做易盾极验全类型识别和自动化对接的,接口简单,业务方直接调用就能把滑块、点选这些问题抹平,不用再自己搭一套复杂流程。

从克隆仓库、填好关键词、跑一次命令开始,数据出来后你就清楚整个链路了。后续按自己业务调整参数和存储,基本能覆盖大多数公开数据采集场景。