DouK-Downloader 实操指南:从 Cookie 配置到 Docker 部署的抖音/TikTok 批量下载与数据采集
DouK-Downloader 实操指南:从 Cookie 配置到 Docker 部署的抖音/TikTok 批量下载与数据采集
【免费下载链接】TikTokDownloader抖音 / TikTok 平台作品下载/数据采集工具项目地址: https://gitcode.com/GitHub_Trending/ti/TikTokDownloader
动手前,先问自己三个问题:你要把某个账号的作品整库搬到本地,还是要把评论、热榜这类数据写进数据库,又或者想让别的系统通过 HTTP 接口来调用采集能力?DouK-Downloader(前身 TikTokDownloader)这三件事都能做——它是基于 HTTPX 的命令行批量下载与数据采集程序,自带 FastAPI 服务化和 Docker 镜像。下文按"选型、跑起来、配通、用起来、部署、排障"的订单带你走完这条路径。
第 1 步 · 选型自检:先确认值不值得投入
把预期钉死,能省掉后面大半的折腾。左边是它现在能稳定交付的,右边是它明确不做或做不了的:
✅ 能做
- 抖音:账号发布/喜欢/收藏/收藏夹作品批量下载,视频、图集、实况、最高画质
- 抖音数据:作品评论、合集、账号详情、综合/视频/用户/直播四类搜索、热榜
- TikTok:账号发布/喜欢作品、链接作品、合辑下载,原画视频
- 工程能力:增量下载、断点续传、跳过已下载、CSV/XLSX/SQLite 落库、代理请求、剪贴板监听
不做
- 付费作品下载(README 明确列为边界,勿提此类 issue)
- Web UI 图形交互界面——代码重构中,选进该模式只会看到"正在重构"的提示
- 扫码登录获取 Cookie(已失效)、从浏览器读取 Cookie(已弃用)
⚠️ 硬限制:项目内置的加密参数算法已过期且不再维护,部分接口可能失败。出路只有一条:按官方文档指引,自己准备加密参数生成代码并配置进去;接受这个前提再开始,否则中途会被卡住。
第 2 步 · 跑起来:Python 3.12 起步,两条路线任选
环境门槛只有一个:Python ≥ 3.12。依赖清单在 requirements.txt,技术栈就是 httpx[socks]、rich、fastapi + uvicorn、pydantic、aiosqlite、openpyxl、aiofiles 这一圈,没有隐藏的本地服务依赖。
git clone https://gitcode.com/GitHub_Trending/ti/TikTokDownloader cd TikTokDownloader uv sync --no-dev # 官方推荐:按 pyproject.toml 同步依赖 uv run main.py # 在 uv 环境里直接启动不想用 uv 就走 venv 路线,效果等价:
python -m venv venv && source venv/bin/activate # Windows 用 venv\Scripts\activate pip install -i https://pypi.tuna.tsinghua.edu.cn/simple -r requirements.txt python main.py首次启动的交互流程值得提前知道,免得卡在菜单上:
- 程序先打印项目信息与免责声明,输入
YES确认,该选择会持久化,以后不再问; - 进入主菜单:Cookie 写入、三种运行模式(终端交互 / 后台监听 / Web API)、下载记录与日志开关、语言切换;
- 全程交互约定只有一条:直接回车 = 返回上级菜单,输入
Q或q= 退出程序,所有输入框都这样。
两点平台提示:Windows 用 Windows 11 自带终端交互体验最好;macOS 上从 Actions 下载的未签名可执行文件,首次运行前先执行xattr -cr 项目文件夹移除安全标记。
第 3 步 · 配通:先拿 Cookie 钥匙,再改 settings.json
把 Cookie 和配置文件看成同一条流水线:钥匙先备齐,配置一次改到位。
先拿钥匙(Cookie)。按 docs/Cookie获取教程.md 的官方路径走:无痕窗口访问 douyin.com 并登录 → 按F12进开发者工具的"网络"标签并勾选"保留日志" → 筛选框输入cookie-name:odin_tt→ 点开任意作品评论区触发请求 → 选中任意数据包,完整复制请求头里Cookie的值到剪贴板。
回程序里选"手动输入 Cookie"粘贴,或选"从剪贴板读取 Cookie"直接回车。抖音与 TikTok 各存各的(对应配置项cookie/cookie_tiktok)。
⚠️ 教程里的
document.cookie方式拿不到 httpOnly 字段,别走偏。正确姿势就是上面的网络面板复制。另外 Cookie 只在失效后才需要重写;拿不到原画时先怀疑 Cookie 质量,换一份已登录的。
再改配置。首次运行会在项目根目录生成settings.json,缺的参数自动补齐(逻辑在 src/config/settings.py)。这张表回答"哪些值值得动":
| 分组 | 参数 | 默认值 | 改它的目的 |
|---|---|---|---|
| 落盘 | root/folder_mode | ""/false | 指定下载根目录、按账号分文件夹归档 |
| 命名 | name_format/split | "create_time type nickname desc"/"-" | 文件名模板(可用键:iddesccreate_timenicknameuidmarktype)与分隔符 |
| 数据 | storage_format | "" | 留空不落库;可选csv/xlsx/sqlite |
| 网络 | proxy/max_pages | ""/0 | 代理地址;给喜欢/收藏类任务封分页上限 |
| 行为 | download/max_size | true/0 | 只采数据不下文件;单文件字节上限 |
典型改动前后对比:
- 改前(刚生成):
"root": ""、"storage_format": ""、"cookie": ""—— 文件堆在项目根目录,数据不落库,程序基本空转; - 改后(可用态):
"root": "/data/videos"、"folder_mode": true、"storage_format": "sqlite"、"cookie": "<已写入>"、"max_pages": 10—— 按账号分目录归档、采集数据进 SQLite、全量类任务封顶 10 页。
⚠️ 排障坑:所有参数都会先过校验,非法值不报错,而是静默回退默认值,日志里只有一句"参数 xxx 设置错误,程序将使用默认值"。所以"改了没生效"时,别怀疑配置没保存,先去日志里搜"默认值"三个字定位是哪个字段被回退了。另外:改完
settings.json必须重启程序才生效;程序每 15 分钟自动刷新 msToken、tt_wid 等易变参数并回写 Cookie,这些你不用手动管。
第 4 步 · 用起来:三种目标,三条路径
按你的使用目标对号入座,每个场景都是"目标 → 操作 → 产出"。
个人随手存 → 后台监听模式。目标是"刷到什么存什么"。选后台监听模式后程序常驻轮询剪贴板,你复制任何抖音/TikTok 作品链接,它自动识别并下载,产出就是本地作品文件,无需任何额外输入。
批量入库 → 终端交互模式。目标是一个账号一个账号地搬库或采数据。功能入口全在 src/application/main_terminal.py:抖音侧覆盖批量下载账号作品(可走accounts_urls配置项批量指定)、链接作品、评论数据、合集、账号详情、四类搜索、热榜、收藏作品/音乐/收藏夹;TikTok 侧覆盖账号作品、链接作品、合辑与直播拉流地址。产出按storage_format决定是只落文件、还是文件 + 数据库双份。
团队服务 → Web API 模式。目标是让其他系统按需拉数据,产出是 HTTP 接口,见第 5 步。
三个行为细节,提前知道能避免误判:
- 文件先下载到临时目录,完成后再移入储存目录,程序退出时清空临时目录——所以中断不会留下半成品,但也不要去临时目录里翻东西;
- 账号昵称或自定义标识
mark变化时,已下载文件里的昵称与标识会自动重命名,不用手动整理; - 喜欢/收藏接口只返回作品发布日期而非操作日期,程序必须拉全量后再筛日期,作品多的账号会很慢,这是
max_pages参数存在的原因。run_command配置项还能写入"启动即执行"的菜单指令序列,跳过层层点击直达任务。
第 5 步 · 部署出去:Docker 容器 + Web API 最小调用
选Web API 模式后,FastAPI 服务监听0.0.0.0:5555,浏览器访问/docs或/redoc就是自动生成的接口文档,端点覆盖账号、作品、评论、合集、直播、搜索、短链解析。
容器化部署。仓库自带 Dockerfile:python:3.12-bullseye做构建器装编译依赖,python:3.12-slim当运行镜像,EXPOSE 5555、VOLUME /app/Volume挂数据卷:
docker pull joeanamier/tiktok-downloader # 也可用仓库 Dockerfile 本地构建 docker run --name douk -p 5555:5555 \ -v douk_data:/app/Volume -it joeanamier/tiktok-downloader docker start -i douk # 后续启动;restart -i 为重启注意容器访问不到宿主机文件系统,Cookie 统一走手动输入或剪贴板写入,别指望"从浏览器读取"。
最小 API 调用。以/douyin/comment为例:
from httpx import post data = {"detail_id": "0123456789", "pages": 2} r = post("http://127.0.0.1:5555/douyin/comment", json=data, headers={"token": ""}) print(r.json())⚠️ 安全红线:项目默认不校验令牌,所有业务端点靠
token_dependency检查请求头里的token,不通过返回 403。一旦把 5555 端口暴露到公网,必须先去 src/custom/function.py 的is_valid_token()里配置令牌再放行,否则任何路过的人都能消耗你的 Cookie 与带宽;可用/token端点验证令牌是否生效。
第 6 步 · 排障与红线:常见问题与合规边界
高频问题速查(点击展开)
Q:下载的视频清晰度不够?A:先换一份已登录账号的 Cookie,再看max_size是否设得过大拦截了文件;仍不行检查智能延时是否导致请求频繁失败。
Q:改完 settings.json 没反应?A:必须重启程序。若日志出现"参数 xxx 使用默认值",说明该值非法被静默回退,对照报错字段改正即可。
Q:喜欢/收藏任务跑得特别久?A:接口只返回作品发布日期,程序要拉全量再筛日期,属正常行为;用max_pages给分页封顶。
Q:容器里为什么没有"从浏览器读取 Cookie"?A:容器访问不到宿主机文件系统,该能力(且已弃用)在容器内不可用,统一用手动/剪贴板写入。
Q:终止 ffmpeg 该点什么?A:任何时候按Ctrl + C,不要直接点终端关闭按钮,否则临时目录清理逻辑不会执行。
多实例与更新:程序未针对多开优化,要并行跑两套任务,复制整个项目文件夹再分别配置;升级可执行文件时把旧版_internal\Volume拷进新版_internal保留配置与记录,或停止后整目录覆盖。
构建可执行文件:走 GitHub Actions 自动构建,流程是 Fork 仓库 → 在 Settings 里允许全部 Actions → 手动触发"构建可执行文件"工作流选master或develop分支 → 从 Artifacts 下载产物。普通账号每月约 2000 分钟免费额度,Fork 记得定期同步上游。
合规与免责:项目基于 GNU GPLv3.0 开源,README 末尾的免责声明立场很直接——使用风险由你自行承担;不得用于未经授权下载、传播受版权保护内容;数据处理的合规性你自己对着平台条款与当地法规负责;作者不提供付费版本或商业服务。接入团队工作流之前,把免责声明完整读一遍,确认你的采集场景在边界内。
收个尾。接下来就做三件事:把已登录 Cookie 写进 settings.json;改好root和storage_format后重启,先验证一个账号的批量下载;跑顺了再进容器,配好 token 对外开放。
本文基于项目公开内容整理,功能边界以官方 README 为准。
【免费下载链接】TikTokDownloader抖音 / TikTok 平台作品下载/数据采集工具项目地址: https://gitcode.com/GitHub_Trending/ti/TikTokDownloader
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考