douyin-downloader 抖音批量下载完全指南:去水印、批量抓取与快速上手
【免费下载链接】douyin-downloaderA practical Douyin downloader for both single-item and profile batch downloads, with progress display, retries, SQLite deduplication, and browser fallback support. 抖音批量下载工具,去水印,支持视频、图集、合集、音乐(原声)。项目地址: https://gitcode.com/GitHub_Trending/do/douyin-downloader
想把一个抖音博主的主页作品、合集或原声音乐一次性存到本地,还要自动去水印、不重复下载?douyin-downloader(抖音批量下载器)就是为这件事做的:粘贴链接 → 自动解析 → 去水印下载 → 按作者和模式整理目录。下面是它的真实能力和上手路径。
能力速览:它到底能做什么
先给结论——这是一个以 Python 编写的抖音内容抓取工具,覆盖"单条下载"到"整站批量"的完整链路:
| 能力 | 说明 | 适合谁 |
|---|---|---|
| 单条视频/图文/合集/音乐下载 | 粘贴/video、/note、/collection、/music链接 | 偶尔存一两条的个人用户 |
| 作者主页批量下载 | 支持post/like/mix/music多种模式 | 想完整备份某博主的人 |
| 无水印优先 + 最高清挑选 | 自动选无水印源,按码率选最高档 | 对画质有要求的人 |
| 评论采集 | 按作品抓取评论(可含二级回复) | 做数据分析/舆情的人 |
| 热搜榜 + 关键词搜索 | --hot-board/--search导出 JSONL | 做内容选题的人 |
| 直播录制 | 抓live.douyin.com房间流 | 需要留存的直播 |
| SQLite 去重 + 增量下载 | 数据库 + 本地文件双重去重 | 长期跑批量任务的人 |
| REST API 服务模式 | 以 HTTP 接口提交下载任务 | 想集成到自己系统里的人 |
它也有明确的边界(后面"避坑"和"边界与规范"会讲),比如收藏夹模式只支持当前登录账号、部分模式主要靠 API 分页。
一句话概括:单条下载它够用,批量备份它更省心。下面从最省事的方式讲起。
快速上手:从安装到第一次下载
环境要求是 Python 3.8+,macOS / Linux / Windows 都支持。整个过程分四步。
第 1 步:拿到代码
git clone https://gitcode.com/GitHub_Trending/do/douyin-downloader cd douyin-downloader预期结果:当前目录下出现run.py、config.example.yml等文件。
第 2 步:装依赖
pip install -r requirements.txt如果需要"浏览器兜底"(后面讲的风控救场)或自动抓 Cookie,再补装一次:
pip install playwright python -m playwright install chromium预期结果:依赖安装完成,无红色报错。
第 3 步:建配置
cp config.example.yml config.yml打开config.yml,至少改两处:把link换成你要下载的链接,确认path是你想存放的目录。
第 4 步:配 Cookie(可选但推荐)
python -m tools.cookie_fetcher --config config.yml会弹出浏览器,登录抖音后回到终端按 Enter,Cookie 自动写回配置。公开的单条视频其实不强依赖 Cookie,但批量抓主页时配上更稳。
第 5 步:跑起来
python run.py -c config.yml预期结果:终端出现进度条,path目录下生成作者名/post/日期_标题_作品ID/结构,里面是无水印视频和可选的封面、音乐、JSON。
跑通第一条后,就可以放心往link里塞整批链接了。
配套桌面版(Douzy)把同一套后端做成了图形界面:粘贴抖音链接即可识别并下载,右侧任务中心可跟踪进度。
关键机制拆解:它凭什么稳定
工具好不好用,往往看它怎么处理"平台反爬"和"重复劳动"这两件事。这里挑三处最能体现工程含量的地方。
1. 翻页被风控时,浏览器兜底接住
问题:抖音对连续翻页有风控,批量抓主页时经常出现"只能抓到前 20 条就停了"的现象。
方案:项目内置浏览器兜底(core/ 之外的 browser_fallback 配置)。当 API 翻页受限时,启动一个真实浏览器(Playwright)模拟人工滚动翻页,遇到验证码会暂停等你手动过,过完继续。
browser_fallback: enabled: true headless: false # 有头模式,便于手动过验证 max_scrolls: 240 wait_timeout_seconds: 600效果:原本卡在 20 条的任务能继续往下抓。注意兜底目前主要对post模式完整验证,like/mix/music仍以 API 分页为主。
2. 数据库 + 文件双重去重,跑一次不多下一遍
问题:批量任务重跑、网络中断续跑时,最怕把已下载的内容再拉一遍,白耗带宽还覆盖文件。
方案:项目用 SQLite 记录下载历史,同时扫描本地文件名里的aweme_id,两个来源交叉判断"是否已下载"。跨模式还会去重——同一个作品在post和like里都不会重复落盘。
效果:重复运行同一配置,已存在的作品会被跳过;increase增量开关还能只抓"新作品",适合定时任务。
3. 限速 + 指数退避重试,把请求节奏压下来
问题:并发太高或失败后疯狂重试,都会加剧触发风控。
方案:并发、限速、重试三件套都在 control/ 下集中管理——默认并发 5、限速约 2 请求/秒、失败按指数退避重试(约 1s/2s/5s)。
control/ ├── rate_limiter.py # 令牌桶限速 ├── retry_handler.py # 指数退避重试 └── queue_manager.py # 并发 worker 池效果:请求节奏可控,偶发网络抖动会被重试兜住,而不是直接失败或触发封禁。
这三处合起来解释了它为什么能"跑得完、跑得稳"。接下来按人群看具体怎么用。
场景化玩法:按你的需求选配置
场景 A:只存一两条视频(个人)
config.yml里只放一条链接即可:
link: - https://www.douyin.com/video/7604129988555574538 video: true跑完得到无水印视频。需要原声或封面时,把music: true、cover: true打开。
场景 B:完整备份某博主主页(重度用户)
link: - https://www.douyin.com/user/MS4wLjABAAAAxxxx mode: - post number: post: 0 # 0 = 不限量博主改名、重名会让nickname目录分裂或合并,重度用户建议把author_dir设成nickname_uid,用"昵称_sec_uid"保证目录唯一。
场景 C:多模式一次抓全
mode: - post - like - mix - music跨模式自动去重,同一作品只落盘一次。
场景 D:做数据采集 / 内容选题(团队)
- 评论采集:
comments.enabled: true,每个作品旁生成*_comments.json,可含二级回复。 - 热搜快照:
python run.py --hot-board 30,导出hot_board/*.jsonl。 - 关键词搜索:
python run.py --search "关键词" --search-max 100,导出search/*.jsonl。 - 服务化:
python run.py --serve --serve-port 8000,通过POST /api/v1/download提交任务、GET /api/v1/jobs/{id}查进度,方便接入自有系统。
桌面版任务中心:按"进行中/已完成/失败"分组显示批量任务,失败项可一键重试,适合团队批量场景。
桌面版"关注"管理:同步关注的博主,筛选新作品、加备注,直接批量下载。
玩法选好后,剩下就是"出问题了怎么办"。下面把常见报错一次性讲清。
避坑与调优:现象 → 原因 → 解法
| 现象 | 常见原因 | 解法 |
|---|---|---|
| 主页只抓到 20 条就停 | 翻页风控 | 确认browser_fallback.enabled: true、headless: false;弹窗出现后手动过验证,别急着关 |
| 下载失败 / 报登录相关错误 | Cookie 失效 | 重跑python -m tools.cookie_fetcher --config config.yml |
| 终端日志刷屏、进度条卡住 | 日志未静默 | 保持progress.quiet_logs: true;调试时临时加-v或--show-warnings |
| 想重下却跳过 | 去重命中 | 需同时删本地文件和数据库记录,只删其一通常不触发重下 |
| 文件太大 / 流量浪费 | 默认下最高转码档 | 把video_quality调成720p或lowest;要原画则设original(每条多一次探测请求) |
调优建议:并发thread默认 5,网络好可上调,但别无限加——限速和重试就是为了稳,堆并发反而更容易触发风控。想留原片用video_quality: original,代价是每条作品多一次探测(约 10s 超时)。
边界与规范:用之前要知道的事
- 频率:内置限速与重试是"自我保护",不是让你无限制狂抓。批量任务建议分批、错峰,避免长时间高并发。
- 版权与隐私:内容仅用于个人学习、研究与数据管理;不用于侵犯他人隐私、版权或其他合法权益,使用者自行承担相应风险。
- 技术风险:平台接口或规则变化可能导致功能暂时失效,这属于正常技术风险,工具已尽量用重试和兜底去对冲,但无法保证 100% 可用。
- 收藏夹模式:
collect/collectmix仅支持当前登录 Cookie 对应账号,且必须单独使用,不能和post/like/mix/music混用。
收尾:它值不值得用
如果你只是偶尔存一两条,它够简单;如果你想整批备份博主主页、抓评论、跑热搜搜索,它把"去水印、去重、限速、兜底、目录整理"这些脏活都替你做了——省的是重复劳动,而不是玄学。
给想上手的人下一步:先按"快速上手"跑通第一条视频,确认Downloaded/目录结构符合预期,再逐步打开mode、comments、--serve等进阶能力。
参考资料
- 官方中文文档:README.zh-CN.md
- 架构总结:PROJECT_SUMMARY.md
- 配置模板:config.example.yml
- 用户模式策略(策略模式实现):core/user_modes/
- 限速 / 重试 / 并发控制:control/
- 入口脚本:run.py
【免费下载链接】douyin-downloaderA practical Douyin downloader for both single-item and profile batch downloads, with progress display, retries, SQLite deduplication, and browser fallback support. 抖音批量下载工具,去水印,支持视频、图集、合集、音乐(原声)。项目地址: https://gitcode.com/GitHub_Trending/do/douyin-downloader
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考