⭐⭐⭐ Spring Boot 项目实战 ⭐⭐⭐ Spring Cloud 项目实战
《Dubbo 实现原理与源码解析 —— 精品合集》 《Netty 实现原理与源码解析 —— 精品合集》
《Spring 实现原理与源码解析 —— 精品合集》 《MyBatis 实现原理与源码解析 —— 精品合集》
《Spring MVC 实现原理与源码解析 —— 精品合集》 《数据库实体设计合集》
《Spring Boot 实现原理与源码解析 —— 精品合集》 《Java 面试题 + Java 学习指南》

摘要: 原创出处 http://www.iocoder.cn/Fight/media-crawler/ 「芋道源码」欢迎转载,保留摘要,谢谢!


🙂🙂🙂关注微信公众号:【芋道源码】有福利:

  1. RocketMQ / MyCAT / Sharding-JDBC 所有源码分析文章列表
  2. RocketMQ / MyCAT / Sharding-JDBC 中文注释源码 GitHub 地址
  3. 您对于源码的疑问每条留言都将得到认真回复。甚至不知道如何读源码也可以请教噢。
  4. 新的源码解析文章实时收到通知。每周更新一篇左右。
  5. 认真的源码交流微信群。

签名这道坎,它换了个绕开的办法

写爬虫的人对签名这道坎不陌生。代码花不了多少时间,麻烦的是接口参数被加密,想直接调,得先把平台前端逆向一遍,搞清签名怎么算,算法一改脚本就废。小红书 2023 年收紧风控那次,接口成片返回 461,一批脚本停摆。

MediaCrawler 绕开了这件事。它不碰加密,改让浏览器替它跑,覆盖小红书、抖音、快手、B 站、微博,再加贴吧与知乎,一共七个平台。作者是独立开发者,2023 年 6 月开源后一直在更新,眼下六万五千多 Star、一万多 Fork。

仓库页实时截图,Star 与 Fork 计数可读

底层是 Playwright。扫码登录后登录态会被保存,需要签名的请求都交给浏览器在登录状态里自己算,算法再改也拦不住。作者说思路不算他首创,但装上就能用、又覆盖七个平台的确实没几个。

中间还有段插曲,作者曾把仓库删了,有人拿代码去卖钱,他补了免责声明重新开源。

它默认接管你现在开着的这个 Chrome

它默认不自己开浏览器,直接接管你平时那个 Chrome,账号、Cookie、扩展、历史都是现成的,平台那边看到的就是一个正常人在刷网页。

Chrome 136 起远程调试不再提供 HTTP 接口,程序改由 WebSocket 直连 ws://localhost:9222,还得在浏览器上点一下确认。开跑前进 chrome://inspect/#remote-debugging 勾上远程调试。

开关都在这条线上,CDP_CONNECT_EXISTING 决定接管现有浏览器还是另起实例,CDP_DEBUG_PORT 指定端口。

把 ENABLE_CDP_MODE 设成 False 就回到标准 Playwright 模式,代价是额外跑一句 uv run playwright install 装驱动。

七个平台,能采什么一张表就说清了

七个平台的能力完全拉平,README 那张表每行都打满勾,挑哪个只看目标。

采什么由 --type 决定。search 填关键词,把搜索结果的笔记与视频批量拿下;detail 是已有目标,把帖子或视频的 ID 或完整 URL 填进列表,只取这几条;creator 盯某个作者,填主页地址,把他发过的内容和数据一起拿走。每条能拿到标题、正文、点赞、收藏、评论。

采集结果数据示意

登录有三种路。默认 qrcode 用对应 App 扫码,登录态存本地,下次不用重扫;cookie 是把 Cookie 填进配置;phone 门槛离谱,要安卓机装短信转发软件、内网穿透的域名,还得一个带密码的 Redis,官方都写着不建议用。

采集量大可以挂代理,内置快代理、豌豆 HTTP 和静态代理三种来源。存数据有八种落点,文件侧是 CSV、Excel、JSON、JSONL,数据库侧除 SQLite 和 MySQL 外,还有 PostgreSQL 与 MongoDB,默认落 JSONL。

评论比正文值钱,还能顺手出一张词云

很多时候评论比正文更有信息量。一级评论默认就采,单条上限默认 10 条;评论底下的回复,也就是楼中楼,得自己打开 ENABLE_GET_SUB_COMMENTS,默认关着。

采完的评论能直接出词云,但有个前置条件容易踩,只有存成 JSON 或 JSONL 才生成,落进数据库出不来图,ENABLE_GET_WORDCLOUD 也得打开。想更准可以往 CUSTOM_WORDS 塞词组,停用词表和字体也能换。

词云结果

封面和视频也能一起搬下来

数据之外,媒体文件也能一并下载,默认关着,命令行加 --get_media true,或者打开 ENABLE_GET_MEDIA。

落盘按内容聚合,路径形如 data/xhs/media/{帖子ID}/,封面是 cover.jpg,视频是 video.mp4,图文帖的多张图按 001.jpg 往下排。小红书、抖音、快手、B 站、微博五个平台都支持,贴吧和知乎没有媒体字段。

B 站那条线做得细。装了 ffmpeg 走 DASH 路径,音视频分轨下载再无损合流拿最高画质,没装就降成 mp4 直链。清晰度由 BILI_QN 控制,默认 80 对应 1080p。

跑起来要准备三样东西

第一样是 uv,进项目目录跑一句,Python 依赖就装完,作者用的是 3.11。第二样是 Node.js,官方要求不低于 16.0.0,爬抖音和知乎要用。第三样是 Chrome,要 144 以上,装好勾上远程调试。

uv run main.py --platform xhs --lt qrcode --type search

终端会出二维码,用对应 App 扫掉,登录态就留在本地。要改的东西都在 config/base_config.py。

命令还有变体,--type detail 按详情采,--specified_id 只取指定条目,--get_media true 连媒体一起拉。

命令行不是唯一入口,它另带一个网页版,后端 uvicorn 起在 8080,前端进 webui 装完依赖跑 npm run dev 起在 5173,浏览器里挑平台、填关键词、翻日志。要挂到后端上先 npm run build。

运行与配置示意

懒得装就把仓库地址丢给 AI 编程助手代劳。

所有开关都在这一个文件里

真正要改的东西集中在一个文件里,每一项都有中文注释。

命令行能覆盖的比想象中多,整个脚本二十来个参数,配置里几乎每一项都有对应写法。布尔值接受 yes、true、t、y、1,也认 no、false、f、n、0。

有几个默认值值得先记住。单次最多采 15 条内容,并发是 1,两次请求之间停 2 秒。最后那个数字就是「频率放低」的官方实现。

另外两个不常提到。XHS_INTERNATIONAL 打开走海外版小红书,接口域名和 Cookie 域一起换;--init_db 一次建好 PostgreSQL 或 MySQL 的表。

翻一遍目录,能看出它为什么扛得住改版

爬虫项目最怕平台一改就整个塌掉,这个仓库的分层就是冲这件事去的。

七个平台各占一个目录,文件形状几乎一样,各管自己那一格。再往外,store 管存储,proxy 管代理,cache 分本地与 Redis 两套,tools 放浏览器控制与滑块处理。

libs 里躺着三个 JS,抖音和知乎各一个签名函数,还有一个 stealth.min.js 用来抹掉浏览器的自动化特征。它说不碰加密,指的是把逆向结果收进这一层复用。

网页版不是套在命令行外面的壳子。webui 是独立的 React 加 TypeScript 工程,环境检测、配置面板、运行终端、数据浏览各是一块。

网页版操作界面

开源版到这里为止,Pro 版另有一套

开源版缺的东西作者没藏着,断点续爬和多账号写在付费版里。它不开源,走订阅制,Pro 版多出来的是自媒体内容拆解 Agent、多账号与 IP 代理池、完整 Linux 支持、一个视频下载器桌面端、多平台信息流推荐,还有给 AI Agent 用的 Skill,架构上把 Playwright 依赖整个去掉,签名逻辑拆成独立服务。

有边界,也有风险

一是账号有风控风险。动手的是程序,频率一高,被盯上的是你登录的那个号。作者的做法是放慢节奏,只看公开内容,够了就收手,主力号别跑。

二是协议的边界。许可证叫 NON-COMMERCIAL LEARNING LICENSE 1.1,中文名非商业学习使用许可证,只限非商业的学习与研究,禁止大规模爬取和干扰平台运营,商用要先拿到版权人的书面同意。

三是平台也在变。今天跑得通不代表三个月后还跑得通,登录态过期、接口改版都是日常。好在项目从 2023 年建库起一直有人维护,这个月还有推送。

免责声明

对我来说它的价值有两块。一块是省时间,想看某个话题下大家在说什么,手动逐条摘录可以省掉;另一块是当学习样本,想练浏览器自动化挺合适。

采的都是公开内容,频率压住,不碰隐私,不商用。地址在 https://github.com/NanmiCoder/MediaCrawler 。

文章目录
  1. 1. 签名这道坎,它换了个绕开的办法
  2. 2. 它默认接管你现在开着的这个 Chrome
  3. 3. 七个平台,能采什么一张表就说清了
  4. 4. 评论比正文值钱,还能顺手出一张词云
  5. 5. 封面和视频也能一起搬下来
  6. 6. 跑起来要准备三样东西
  7. 7. 所有开关都在这一个文件里
  8. 8. 翻一遍目录,能看出它为什么扛得住改版
  9. 9. 开源版到这里为止,Pro 版另有一套
  10. 10. 有边界,也有风险