一个用 Node.js 写的批量去水印多线程下载抖音用户发布/喜欢列表视频的爬虫
- 支持批量下载指定数量的用户发布/喜欢视频和图片
- 支持自动重试下载失败的文件
- 支持自动跳过已存在的文件
- 支持流式下载,不会占用过多内存
- 支持自动保存错误日志
- 支持多线程下载
脚本用 TypeScipt 编写,这会导致一个问题:Node.js 无法直接运行 TypeScript 代码,早先使用的是 tsx 来直接运行,但是当后来 Node.js 更新了更加严格的 ESM 规范后,这种方法就会导致一些问题:获取完列表之后,一直无法进行下载。
目前还没有办法解决,详情参考:New --import API breaks worker threads
现阶段运行脚本有两种方法:
- Node.js 18 以下版本可以直接使用 tsx 运行脚本
- 使用 tsc 编译 ts 文件为 js 文件,然后使用 node 运行 js 文件
- 降级使用还未实现多线程下载的版本(不推荐)
在使用之前请先修改 config/config.json 配置文件
"userList": [ // 可以下载多个用户的列表
{
"user": "" // 用户链接,支持长链和短链
"type": "post" | "like" // post-用户发布 | like-用户喜欢
"limit": 0 // 下载数限制 0 表示无限制 下载所有视频
"username": "" // 下载的文件夹名字,如果不填则默认为下标
}
]
"odin_tt": "" // 必填,cookies 中的 odin_tt
"passport_csrf_token": "" // 必填,cookies 中的 passport_csrf_token
"sessionid": "", // cookies 中的 sessionid
"max_retry": 50 // 获取内容的最大重试次数
"autoRetryDownload": true // 是否自动重试下载失败的文件
"downloadDir": "download/", // 下载目录
"workerNum": 4 // 下载线程数
用户喜欢列表和发布作品只能下载公开状态的列表
// clone repo to your directory
git clone https://github.com/YuJian920/nodeSpider_tiktok.git
//go into the folder
cd nodeSpider_tiktok
// 安装依赖
pnpm install
// 启动爬虫
pnpm run start
抖音下载的图片默认为 webp 格式,在 utils/fileHelper.tsx
中有一些工具函数可以对图片格式进行转换,默认为无压缩转换,可以根据需要自行修改转换参数。你可以使用 npm run helper
来运行这些函数。
在之前的版本中,对于喜欢或者发布列表中的图片类型,下载后可能会出现格式错误的问题,utils/fileHelper.tsx
提供了一个检查文件是否为 mp4 格式的工具函数。
抖音修改了接口的限制,现在 config.json 中的 odin_tt、sessionid 和 passport_csrf_token 是必填项,如果你不填写,则只能获取第一页的数据。
图片转换需要用到 sharp 库,package.json 中默认安装的是和平台绑定的版本,如果你使用 Linux Mac 或者其他操作系统,可能会出现安装依赖或者脚本运行错误的问题,请修改 package.json 中的 sharp 版本或者直接删除它。
X-Bogus 的获取算法来自 Johnserf-Seed/TikTokDownload 项目,非常感谢