抖音批量下载:从单个视频到整页作品,一个工具就能搞定
【免费下载链接】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,它会返回一个没有水印的 mp4;把整个作者主页链接丢给它,它能把这位作者的作品、图集、合集按文件夹归档保存,封面、背景音乐、元数据各归各位。这是一个用 Python 写的批量下载工具,支持视频、图文、合集、音乐(原声)四类内容,默认带进度展示、失败重试、数据库去重,翻页被风控时还能自动切到浏览器模式兜底。
这篇文章按"第一次跑通 → 日常怎么用 → 遇到坑怎么办"的顺序来讲,跟着走一遍,10 分钟左右就能下第一个视频。
第一次跑通:装好依赖、拿到 Cookie、下载第一条视频
三步完成安装
工具只依赖 Python 3.8 及以上版本,Windows、macOS、Linux 都能跑。整个过程就三条命令:
git clone https://gitcode.com/GitHub_Trending/do/douyin-downloader cd douyin-downloader pip install -r requirements.txt装完先别急,配置文件还没建:
cp config.example.yml config.ymlconfig.yml 是所有行为的开关,后面提到的每一项功能都在这里面改。如果你需要浏览器兜底功能(下面会解释),还得补装 Playwright:
pip install playwright python -m playwright install chromium三步配好 Cookie
批量下载作者主页需要登录态。Cookie 就是浏览器里代表"你是这个账号"的一串凭证,直接手动复制很容易漏字段,所以推荐用它自带的获取工具:
python -m tools.cookie_fetcher --config config.yml这条命令会弹出一个浏览器窗口,你在里面正常登录抖音,然后回到终端按回车,凭证会自动写回 config.yml,不用自己复制粘贴任何东西。Cookie 失效后重跑这一条命令就行。
下载第一条视频
config.yml 里只需改两处:把link换成你想下的视频链接,确认path是你想保存的目录。然后:
python run.py -c config.yml跑完你会在path目录下看到按日期_标题_作品ID命名的文件夹,里面是无水印视频本体,加上你开启的封面、音乐、JSON 元数据。命令行也支持临时追加参数,比如-t 8把并发调到 8 个线程、-p换输出目录,不必每次改配置文件。
顺便说一句:项目还配套了一个桌面客户端 Douzy(内测中),界面就是上图这样,粘贴链接、排任务、查档案都在界面上完成,适合不想碰终端的人,本文重点讲命令行用法。
日常使用:批量下主页、评论、收藏夹
一个作者主页全收
把link换成作者主页链接(douyin.com/user/...这种),mode里写下载模式:
link: - https://www.douyin.com/user/MS4wLjABAAAAxxxx mode: - post number: post: 50post:作者发布的所有作品like:作者公开点赞的内容mix:作者的合集music:音乐原声文件collect/collectmix:当前登录账号的收藏夹 / 收藏合集(只能单独用,且必须是你 Cookie 对应的那个账号)
number下的数字控制每种模式拉多少条,0表示不限。四种模式也可以同时写,程序会跨模式去重,同一个作品不会下两遍。
怎么避免重复下载
这是批量下载最容易踩的坑:跑过一次再跑,500 条视频又下了一遍?不会。database: true时,每个下过的作品 ID 会写进本地 SQLite 数据库(默认叫 dy_downloader.db),程序靠"数据库记录 + 扫描本地文件名里的作品 ID"双重检查来跳过已下载内容。
配合increase: post: true就是增量模式:每周跑一次,只下新发布的作品,旧的直接跳过。想查下载历史也简单,用 sqlite3 对 aweme 表发条 SELECT 就能看到所有作品的标题、作者、下载时间。
反过来,如果你想强制重下某条作品,只删数据库没用——它还会看文件。正确姿势是把这个作品的文件夹删了,再删掉数据库里对应那条记录,两处都清干净它才会重新下载。
目录怎么摆才不乱
默认配置下,每个作品单独建文件夹,视频、封面、元数据互不串位;作者一层按昵称分目录。两个配置项值得留意:
author_dir:作者目录的命名方式。默认nickname最直观,但两个同昵称作者会混在一起;改成nickname_uid(昵称加用户 ID)唯一但长,重度批量用户建议用这个folderstyle: true:保持每个作品独立文件夹,关掉则文件平铺,容易撞名
filename_template控制文件名,内置变量有{id} {title} {date} {author}等,官方要求模板里至少含{id},否则同名作品会互相覆盖。
进阶调优:限流兜底、转写与评论
只抓到 20 条就停了?开浏览器兜底
批量下主页时最常见的情况:翻了几页突然停住,只剩 20 条左右。这是抖音的翻页风控,接口层面不再给你下一页了。
工具内置的解决方案是browser_fallback:检测到翻页卡住后,自动启动一个真实浏览器(基于 Playwright 的自动化),模拟人工滚动去翻剩下的页。配置里把headless: false保留着,弹窗出来时你手动过一次验证码就行,别急着关窗。max_scrolls控制最多滚多少屏,wait_timeout_seconds是整体超时时间。
注意:浏览器兜底目前只对post模式完整支持,like/mix/music主要靠 API 正常翻页。
磁盘不够用?先限数量再筛时间
一个几百条作品的主页,全量下来动辄几十 GB。两个开关控制体量:
number.post: 50只拿最近 50 条start_time/end_time(格式YYYY-MM-DD)只下某个时间段内的作品
另外thread: 5是并发数,网络一般的机器调成 3 反而更稳;下载不完整时程序会按 Content-Length 比对文件,自动删掉坏文件并按retry_times: 3重试,不需要人工干预。
把文字也存下来:评论与语音转写
做内容研究的话,光有视频不够。comments.enabled: true会在每个作品旁边生成一个评论 JSON 文件(可再开二级回复);transcript.enabled: true会把视频里的语音转成文字,配好 OPENAI_API_KEY 后,每个视频旁多出.transcript.txt和.transcript.json两个文件,方便做关键词提取、字幕生成这类后续处理。注意转写只对视频生效,图文不会转。
几个高频问题的快速答案
- 进度条刷屏:默认
progress.quiet_logs: true会静默进度日志,别手动关;调试时临时加-v看详细日志即可 - 下载失败提示登录问题:十有八九是 Cookie 过期,重跑一次
python -m tools.cookie_fetcher --config config.yml - 想换保存目录/并发数:命令行参数
-p、-t优先级高于配置文件,适合临时任务 - 想看代码逻辑:下载器实现在 core/,URL 解析、各模式下拉策略都在里面,出问题翻源码比猜快
先试这几件事
第一次用建议按这个顺序:先下一条单视频确认环境没问题 → 再小批量跑一个作者主页(number.post: 10试试水)→ 开上increase增量模式,把它变成每周定时跑的归档任务。
最后提醒一句:下载内容仅供个人学习、研究和备份,商用和二次分发都请尊重创作者的版权。具体配置项的完整说明,以仓库里的 config.example.yml 注释和 README.zh-CN.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),仅供参考