抖音批量下载实战:一个晚上,我收下了整个博主的主页
抖音批量下载实战:一个晚上,我收下了整个博主的主页
【免费下载链接】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
那个周五晚上,我盯着一位数码博主的页面发呆。他主页上有 340 条作品,从测评到教程,我打算全部存下来慢慢看。手动点了四十多个"保存视频"之后,我确认了两件事:一是抖音 App 下载的视频没法选清晰度,二是再这样点下去,我的拇指和耐心都会先报废。
凌晨一点,我翻出朋友提过的一个开源工具 douyin-downloader——一个面向实用场景的抖音下载工具,支持视频、图集、合集、音乐批量下载,也支持单个链接下载。那天夜里我跑通了第一条命令,从此告别了手动存视频的日子。这篇就把完整过程写下来,照着走,你也能在半个小时内让批量下载转起来。
第一次运行:从克隆到看见第一个下载好的视频
先把项目拉下来,装依赖:
git clone https://gitcode.com/GitHub_Trending/do/douyin-downloader cd douyin-downloader pip install -r requirements.txt装完之后,下载前需要让程序认识你的抖音账号。手动从浏览器 F12 里翻 Cookie 又麻烦又容易过期,项目里带了一个自动获取的工具,运行后会自动弹出浏览器让你登录,登录完回终端按一下 Enter,配置就写好了:
python -m tools.cookie_fetcher --config config.yml接着是最小可用配置。复制一份config.example.yml为config.yml,我只改了三处:下载链接、保存路径、下载模式。文件里每一段配置都带注释,第一次用基本不用查文档:
link: - https://www.douyin.com/video/7604129988555574538 path: ./Downloaded/ mode: - post然后运行:
python run.py -c config.yml屏幕上滚出 Rich 进度条,几秒钟后Downloaded/里出现了第一个视频文件。到这一步,单条视频下载已经通了。之后我把链接换成某位作者的主页地址,把mode里的post数量调大,一次批量下载就这么跑起来了:
能力地图:这个下载器能装下多少种内容
跑通之后我对着 README 里的功能表捋了一遍,把它能干的事整理成一张速览卡,方便你按需取用:
| 能力 | 适用场景 | 一句话说明 |
|---|---|---|
| 单个下载 | 一条视频、图集、合集、音乐 | 贴链接就能下,短链会自动解析 |
| 作者主页批量下载 | 收藏某位博主的全部作品 | mode支持作品/点赞/合集/音乐四种 |
| 直播录制 | 保存直播内容 | FLV/HLS,主播下播自动保留已录数据 |
| 评论采集 | 分析作品反馈 | 输出*_comments.json供后续处理 |
| 热搜榜与搜索 | 选题、找素材 | 一键导出榜单和搜索结果到 JSONL |
| REST API | 接入自动化流程 | 起个服务就能提交下载任务 |
| 通知推送 | 长任务离线等待 | 完成后推 Bark / Telegram / Webhook |
值得一提的是,这些能力不是散装功能,而是围绕"作者主页"这一个核心场景设计的。mode里的post(发布)、like(点赞)、mix(合集)、music(音乐)可以同时开启,一个作者主页跑一次,四种内容就齐了,而且同一个视频在不同模式下不会重复下载。
深入一层:增量下载和去重是怎么做到的
用得越久我越好奇一件事:重复跑同一个作者的下载任务,它怎么知道哪些已经下过了?
看了core/目录下的实现才知道,它做了双重检查。第一层是本地文件扫描,程序会在下载目录里按文件名中的aweme_id判断是否已存在;第二层是 SQLite 数据库,database: true时会在dy_downloader.db里记录每个作品的下载状态。两层互为兜底——只删数据库不删文件不会重新下载,只删文件不删数据库则会补下。
这个设计直接撑起了增量下载功能:
increase: post: true database: true打开后,同一作者的页面再跑一遍,就只会下载新发布的作品。我追更的那位数码博主每周更新,我每周跑一次,Downloaded/里的文件数和数据库记录一一对应,一次重复下载都没有发生过。
一个完整的实战:把整个合集搬进硬盘
说一个我完整的实际操作。上个月我要备份某位老师全套 120 期绘画教程(他自己放在一个合集里),目标很明确:全部存下来、命名规范、以后能按日期检索。
配置如下:
link: - https://www.douyin.com/user/MS4wLjABAAAAxxxx path: ./Downloaded/ mode: - mix number: mix: 0 # 0 表示不限制数量 thread: 5 filename_template: "{date}_{title}_{id}"执行python run.py -c config.yml,五个线程并发下载,进度条实时滚动。结束后目录长这样:
Downloaded/ └── 作者名/ └── mix/ └── 2024-03-02_水彩入门第一课_7341234567890123456/ ├── ...mp4 ├── ..._cover.jpg ├── ..._data.json └── ..._music.mp3每期作品还自动附带了封面、原声音乐和 JSON 元数据。之后我在桌面版 Douzy 的任务中心里也能看到这次下载的完整记录,点开作品档案就能按作者、日期筛选历史,跟命令行跑出来的结果完全一致:
我踩过的几个坑,提前帮你避开
- Cookie 失效:跑着跑着突然只能拉到 20 条作品,多半是 Cookie 过期了。重跑一次
python -m tools.cookie_fetcher --config config.yml就好,不用手动翻浏览器。 - 只出 20 条的限制:这是翻页风控。配置文件里
browser_fallback.enabled保持true、headless设为false,翻页受限时程序会弹出一个浏览器窗口,手动把验证码点了、别急着关窗口,就能继续翻下去。 - HLS 直播源只能存 playlist:录直播时如果源是 HLS,保存下来的是播放列表文件,需要自己用 ffmpeg 转一下才能得到完整的视频文件;FLV 源则可以直接播放。
- 进度条刷屏:默认配置里
progress.quiet_logs: true已经开了静默,想排查问题再临时加-v参数,别一直开着刷屏模式跑。
下一步能玩出什么
基础下载跑顺之后,可探索的空间还挺大。官方文档里列着视频转写(调用转写 API 生成字幕文本)、REST API 服务模式(python run.py --serve --serve-port 8000,起服务后通过 HTTP 提交下载任务)、以及桌面版 Douzy——粘贴链接、同步关注列表、可视化跟踪进度,适合不想碰命令行的场景。
配置项说明在 config.example.yml 里都有注释,功能细节可以翻 README.zh-CN.md,使用指南在 USAGE.md。这几个文件我都是边用边查的,比到处搜教程靠谱。
我的资源库现在已经存下几百个视频了,每个月清理一次不再需要的内容,剩下的按主题归档。它解决的其实不是一个"下载"问题,而是一个"如何把散落在平台上的内容,整理成自己能长期使用的资料库"的问题。如果你也有一直想保存却嫌麻烦的内容,不妨从一条视频开始试试。
【免费下载链接】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),仅供参考
