找回密码
立即注册
搜索
发回帖 发新帖

6410

积分

0

好友

812

主题
发表于 15 小时前 | 查看: 10| 回复: 0

做爬虫的人都知道,签名是最难缠的一道关。

写代码本身不费劲,费劲的是接口参数被加密了。想直接调,得把平台前端逆向一遍,搞清楚签名算法。等好不容易搞明白了,平台一改算法,脚本全废。

小红书 2023 年那次风控收紧,接口成片返回 461,多少脚本一夜之间停摆。

MediaCrawler GitHub 仓库主页,显示 66.4k Star 和文件列表

MediaCrawler 走的是一条完全不同的路——它不去碰加密算法,而是让浏览器自己来算。

支持小红书、抖音、快手、B站、微博、贴吧、知乎,七个平台全覆盖。作者是独立开发者,2023 年 6 月开源后持续更新,目前 66k+ Star、1 万多 Fork。

01 它怎么绕过签名这道关

核心思路很简单:底层用Playwright,扫码登录后把登录态保存下来,所有需要签名的请求全部交给浏览器在登录状态下自己算。

签名是浏览器自己生成的,算法怎么改都拦不住——因为计算过程本来就发生在浏览器里,不是在模拟。

作者说这个思路不算他首创,但能做到装上就能用、还覆盖七个平台的,确实没几个。

中间还有段插曲:作者曾经把仓库删掉过,因为有人拿代码去卖钱。后来补了免责声明,重新开源。

02 它接管你正在用的那个 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 安装驱动

03 七个平台能采什么

七个平台的能力完全一致,README 那张表每行都打满了勾,选哪个只看你的目标在哪里。

采集类型由 --type 参数决定:

  • search:输入关键词,批量抓取搜索结果的笔记和视频
  • detail:针对已有目标,把帖子或视频的 ID 或完整 URL 填进列表,只取这几条
  • creator:盯住某个作者,填主页地址,把他发过的内容和数据一起打包拿走

每条记录能拿到标题、正文、点赞数、收藏数、评论。

MediaCrawler 目标配置界面,平台选择 Zhihu

登录方式有三种:

  • 默认 qrcode:用对应 App 扫码,登录态存本地,下次不用重扫
  • cookie:把 Cookie 直接填进配置
  • phone:门槛相当离谱,需要安卓机装短信转发软件、内网穿透域名、还得一个带密码的 Redis。官方文档自己都写了不建议用

采集量大可以挂代理,内置快代理、豌豆 HTTP 和静态代理三种来源。

数据落地有八种选择:文件侧是 CSV、Excel、JSON、JSONL;数据库侧除 SQLite 和 MySQL 外,还有 PostgreSQL 和 MongoDB。默认落 JSONL。

MediaCrawler 搜索结果 JSON 数据示例,包含小红书美食笔记记录

04 评论比正文更有价值,还能顺手出词云

很多时候评论区比正文信息量更大。

一级评论默认就采,单条上限默认 10 条。评论下面的回复(楼中楼)需要手动打开 ENABLE_GET_SUB_COMMENTS,默认是关闭的。

采完的评论能直接生成词云,但有个前置条件容易踩坑:只有存成 JSON 或 JSONL 格式才会生成,落进数据库出不来图。ENABLE_GET_WORDCLOUD 也得记得打开。

想更精准可以往 CUSTOM_WORDS 里塞词组,停用词表和字体也能替换。

05 封面和视频也能一起下载

数据之外,媒体文件也能一并拉下来,默认关闭。

命令行加 --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。

06 跑起来需要准备三样东西

第一样是 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。

MediaCrawler Web 控制台界面,含目标配置和系统控制台

懒得装的话,把仓库地址丢给 AI 编程助手代劳也行。

07 所有开关集中在一个文件

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

命令行能覆盖的比想象中多,整个脚本二十来个参数,配置里几乎每一项都有对应的写法。

布尔值接受 yes、true、t、y、1,也认 no、false、f、n、0。

几个默认值值得先记住:

  • 单次最多采 15 条内容
  • 并发数为 1
  • 两次请求之间停 2 秒

最后那个数字,就是“频率放低”的官方实现方式。

另外两个不常提到的:

  • XHS_INTERNATIONAL 打开后走海外版小红书,接口域名和 Cookie 域一起切换
  • --init_db 一次性建好 PostgreSQL 或 MySQL 的表

08 目录结构透露了它的抗改版能力

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

七个平台各占一个目录,文件形状几乎一样,各管自己那一摊。

再往外:

libs 里躺着三个 JS 文件:抖音和知乎各一个签名函数,还有一个 stealth.min.js 用来抹掉浏览器的自动化特征。

它说不碰加密,意思是把逆向结果收进这一层复用。

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

MediaCrawler bilibili 视频抓取运行日志,显示大量 deepseek 关键词视频

09 开源版到此为止,Pro 版另有东西

开源版缺什么作者没藏着:断点续爬和多账号写在付费版里。

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

10 有边界,也有风险

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

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

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

MediaCrawler GitHub 仓库免责声明与 Trending 徽章

11 对我来说它的价值有两块

一块是省时间:想看某个话题下大家在讨论什么,手动逐条摘录的活可以省掉。

另一块是当学习样本:想练浏览器自动化,这个项目挺合适。

采的都是公开内容,频率压住,不碰隐私,不商用。

开源地址:https://github.com/NanmiCoder/MediaCrawler




上一篇:Shaders 宣布开源:200+ WebGPU 网页特效组件免费可商用
下一篇:所有接口都用 POST?聊聊 RESTful 规范与 GET/POST 的区别
您需要登录后才可以回帖 登录 | 立即注册

手机版|小黑屋|网站地图|云栈社区 ( 苏ICP备2022046150号-2 )

GMT+8, 2026-10-10 20:09 , Processed in 0.080268 second(s), 39 queries , Gzip On.

Powered by Discuz! X3.5

© 2025-2026 云栈社区.

快速回复 返回顶部 返回列表