DouK-Downloader:抖音视频下载与 TikTok 数据采集,从 Cookie 配置到 API 部署的完整配置
【免费下载链接】TikTokDownloader抖音 / TikTok 平台作品下载/数据采集工具项目地址: https://gitcode.com/GitHub_Trending/ti/TikTokDownloader
DouK-Downloader(过去一直叫 TikTokDownloader)是一个基于 HTTPX 异步请求的开源工具,同时覆盖抖音和 TikTok 两个平台。它做的事情可以归成四类:按链接或按账号批量下载抖音视频、图集、封面等文件;采集作品数据、评论、搜索与热榜等结构化信息;抓取直播拉流地址并用 ffmpeg 录下直播;以及把上面所有能力包装成 HTTP 接口,供你自己的程序调用。如果你的需求是"把某个账号的作品存下来"或"把评论数据灌进自己的表里",这个项目的代码量不大,逻辑全部可读可改,值得一试。
从 clone 到第一次下载
环境上只有一条硬要求:Python 不低于 3.12,Windows 10 以上、macOS、Linux 都行。装依赖有两条等价路线,任选其一,这里用 pip 那条示意:
git clone https://gitcode.com/GitHub_Trending/ti/TikTokDownloader cd TikTokDownloader pip install -r requirements.txt python main.py另一条是 README 推荐的 uv 路线:执行uv sync --no-dev后再uv run main.py。依赖清单本身就是技术栈:httpx 负责请求,rich 画终端,fastapi/uvicorn 提供 API 服务,pydantic 做数据校验,aiosqlite 和 openpyxl 负责数据落盘。
Cookie 怎么获取
Cookie 是这个工具最关键的前置条件。它直接决定两件事:接口能不能正常返回数据,以及你能拿到的视频分辨率。Cookie 失效之前不需要反复写,失效了再更新即可。获取步骤建议现在就照着做一遍:
- 浏览器打开抖音网页版并登录;
- 按 F12 打开开发者工具,切到「网络」面板,勾上「保留日志」;
- 在筛选框里输入
cookie-name:odin_tt,随便点开一个作品的评论区产生请求; - 选中一个请求,把请求头里
Cookie的完整值复制出来。
更详细的截图版教程见 Cookie获取教程.md。
第一次下载走哪条菜单
运行python main.py后:
- 阅读免责声明,输入 YES 确认(这个选择会持久化,只有第一次出现);
- 选「手动输入 Cookie」粘贴刚才复制的内容;如果你复制时直接进了剪贴板,选「从剪贴板读取 Cookie」然后直接回车也行;
- 返回主菜单,选「终端交互模式」;
- 选「批量下载链接作品(抖音)」,再选「手动输入待采集的作品链接」;
- 粘贴一个作品链接,等进度条走完。
文件会落在root/folder_name指向的目录里,默认就是项目根目录下的Download文件夹。按默认命名规则,文件名由创建时间、内容类型、作者昵称、作品描述四段拼成,例如2026-10-21 18:30:05 Video 某某昵称 作品描述.mp4。以后想退出程序,在任意菜单输入 Q 或 q 即可;任意输入框直接回车表示返回上一级。
参数怎么选:settings.json 里真正影响结果的几项
程序第一次启动会在项目根目录生成 settings.json,生成逻辑在 settings.py 的__create方法里。全参数不少,但真正左右结果的就下面这些,其余保持默认即可:
| 参数 | 默认值 | 不配会怎样 |
|---|---|---|
cookie/cookie_tiktok | 空字符串 | 账号页、私密账号等接口直接失败,画质也上不去 |
root | 空字符串 | 填了非法路径会静默回退到项目根目录,只留一条警告日志 |
name_format | create_time type nickname desc | 用了七键之外的词,整个命名规则被丢弃、回退默认组合 |
storage_format | 空字符串 | 纯采集时数据不落盘,跑完只剩终端输出 |
max_pages | 0 | 0 按 99999 处理,等于不限量地翻页 |
proxy | 空字符串 | 启动时测连失败就自动忽略,代理静默失效 |
download | true | 只想要数据不想要文件时,把它设为 false |
两个容易踩的约定:改完 settings.json 必须重启程序才生效,没有热加载;从旧版本升上来时,default_mode、update_cookie、original_cover这类老字段名会被自动映射成新名字,但文件里最好还是手动改成新写法。
跟着一次下载请求走
上面那张表管的是配置,下面是配置如何被执行。随便丢一个作品链接进去,内部依次发生五件事:link/extractor.py 先把短链解析成完整链接;interface/ 下对应的接口类带着游标分页拉数据;extract/extractor.py 从返回体里统一抠出字段;downloader/download.py 把文件先写进临时文件夹,成功后才移动到目标目录,程序退出时清空临时区;最后按storage_format把结构化数据存进 CSV、XLSX 或 SQLite。
链路里有几个工程细节,各说一句:调度中枢 TikTokDownloader.py 里有个守护线程,每 15 分钟自动刷新 msToken 和 tt_wid 并回写 Cookie,所以长时间挂机时凭证不会轻易过期;下载器用 Range 头做断点续传,大文件中断后不必从头再来;同一时刻最多 4 个下载任务并行(MAX_WORKERS = 4,定义在 static.py);请求失败由 retry.py 的重试装饰器接管,最多重试 5 次,每次失败后智能延时再试;文件落盘后还会比对文件头魔数(jpg、png、mp4、mov 等),确认真实类型并纠正后缀,防止拿到"假 mp4"。
顺带提醒四个别依赖的功能:Web UI 交互模式还在重构,菜单里选了只会提示正在重构;内置的 xBogus/aBogus 等加密参数算法已过期失效、不再维护,需要这类参数的场景要自备生成代码;「从浏览器读取 Cookie」和「扫码登录获取 Cookie」两个入口已注释弃用。在这四件事上花时间,都是白费。
两种上线方式:容器和 Web API 服务
Docker 容器
镜像有三个来源:用仓库根目录的 Dockerfile 本地构建(双阶段构建,最终镜像基于 python:3.12-slim);docker pull joeanamier/tiktok-downloader;docker pull ghcr.io/joeanamier/tiktok-downloader。拿到镜像后一条命令建容器:
docker run --name my-downloader -p 5555:5555 \ -v tiktok_downloader_volume:/app/Volume -it <镜像名称>之后docker start -i my-downloader启动即可。要清楚一点:容器摸不到宿主机的文件系统和浏览器,任何依赖宿主环境的能力在容器里都没有,其余功能若有异常可以直接去仓库反馈。
Web API 接口服务
主菜单选「Web API 模式」后,main_server.py 里的APIServer.run_server会在 0.0.0.0:5555 起一个 FastAPI 服务。浏览器打开http://127.0.0.1:5555/docs(或/redoc)就能看到可交互的接口文档。
鉴权看请求头里的token:每个接口都经过token_dependency依赖,校验失败直接返回 HTTP 403。项目默认不设令牌,内网自己用没问题;如果要公开部署,去is_valid_token()里设一个固定令牌,再打/token接口自测一下有效性。调用长这样:
from httpx import post resp = post( "http://127.0.0.1:5555/douyin/comment", json={"detail_id": "0123456789", "pages": 2}, headers={"token": ""}, ) print(resp.json())生产环境的建议压成三句:前面挂一层反向代理终结 TLS;对外接口做限流;uvicorn 日志重定向到文件,别只看控制台。
排障手册:出问题先查这八处
Cookie 还在有效期,但接口失败或视频分辨率变低?多半是 Cookie 已失效或根本没有登录态,重新从浏览器复制一份写入即可。要拉私密账号的作品,还需要用"已登录且已关注该账号"的 Cookie。
文件没出现在我指定的目录?root指向的路径不存在或不可写时,程序会回退到项目根目录,只留一条警告日志。查一下运行日志里的 root 警告,改成真实存在的目录再重启。
代理配了,好像没生效?程序启动时会真实请求平台页面测连,测连失败就直接忽略代理,不会报错。先手动验证代理本身可用,再确认日志里出现"代理测试成功"。
批量拉喜欢或收藏作品特别慢?这两个接口只返回作品发布日期,不返回你操作它的日期,所以程序必须把全量拉回来再筛选。用max_pages压低请求页数是最直接的缓解手段。
升级之后,旧作品找不到了?打包版的数据存在_internal/Volume里,新版不会自动继承。按 README 的更新说明,把旧版的_internal/Volume复制到新版的_internal下。
多开几个实例,行为开始怪?项目没有针对多开做优化。复制整个项目文件夹,每个实例各用一份独立副本。
想终止程序或 ffmpeg,怎么按?一律按 Ctrl + C,不要直接点终端窗口的关闭按钮。
能下载付费作品吗?不能,这是明确的产品边界,相关的反馈也不会被处理。
这个工具比较适合三类用法:个人作品归档、中小规模账号数据采集、把采集能力嵌进自己的系统(走 Web API)。不适合拿去做大规模商用抓取。使用前请读一遍 README 末尾的免责声明并理解接受:采集与下载行为须自行遵守相关法律法规和平台规则,由此产生的责任由使用者承担。
【免费下载链接】TikTokDownloader抖音 / TikTok 平台作品下载/数据采集工具项目地址: https://gitcode.com/GitHub_Trending/ti/TikTokDownloader
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考