DouK-Downloader: 抖音 TikTok 批量下载与数据采集实操指南
【免费下载链接】TikTokDownloader抖音 / TikTok 平台作品下载/数据采集工具项目地址: https://gitcode.com/GitHub_Trending/ti/TikTokDownloader
DouK-Downloader(历史项目名 TikTokDownloader)是一款完全开源的抖音 / TikTok 批量下载与数据采集工具,基于 HTTPX 异步网络模块构建:一个程序覆盖账号作品批量下载、评论 / 搜索 / 热榜数据采集、直播拉流录制、剪贴板监听下载,并支持 FastAPI 服务化部署。如果你要把短视频素材入库、做竞品内容管理或搭一条自己的采集流水线,下面按"先判断、再跑通、按任务干"的顺序带你看一遍。
先看边界:DouK-Downloader 适合什么场景、不适合什么场景
功能面不用逐条背,抓住四个业务域就够:作品下载(视频 / 图集 / 实况 / 动图、最高画质、TikTok 原画)、账号维度采集(发布 / 喜欢 / 收藏 / 收藏夹)、数据维度采集(评论、合集、账号详情、四类搜索、热榜)、直播拉流与录制。工程侧自带增量下载、断点续传、已下载跳过、CSV / XLSX / SQLite 持久化、代理请求和 Web API。
先花十秒对一下自己的场景:
| 你的场景 | 是否适合 |
|---|---|
| 个人 / 小团队的素材入库,批量下载账号与链接作品 | ✅ 适合,核心场景 |
| 团队采集流水线,需要被其他系统 API 调用 | ✅ 适合,Docker + Web API 即可服务化 |
| 付费作品下载 | ❌ 项目明确不支持,README 已列为边界 |
| 依赖内置加密参数保证所有接口长期稳定 | ⚠️ 不适用,见下方说明 |
⚠️ 项目内置的加密参数算法已过期失效且不再维护,部分功能可能无法正常工作;如需继续使用这些接口,需自行准备加密参数生成代码。
⚠️ 当前版本的功能缺口:Web UI 交互模式正在重构(菜单里选了只会提示"正在重构");"从浏览器读取 Cookie"已弃用、"扫码登录获取 Cookie"已失效,Cookie 请统一用手动输入或剪贴板方式写入。
从克隆到第一次下载:最短跑通路径
环境门槛只有一个:Python ≥ 3.12。依赖就十几个:httpx[socks]、rich、fastapi+uvicorn、pydantic、aiosqlite、openpyxl、lxml、pyperclip、aiofiles(完整清单见 requirements.txt)。推荐用uv一条路走通(pip+ venv 装 requirements.txt 也完全可行):
git clone https://gitcode.com/GitHub_Trending/ti/TikTokDownloader cd TikTokDownloader uv sync --no-dev # 按 pyproject.toml 同步依赖 uv run main.py # 启动程序首次运行会依次经过这几个节点,提前知道就不会卡住:
- 首次启动先选界面语言(
zh_CN/en_US),然后打印项目信息与免责声明,输入YES确认;该选择持久化到本地数据库,以后不再询问(实现见 src/application/TikTokDownloader.py#L187-L197)。 - 主菜单包含:Cookie 写入(抖音 / TikTok 各自独立,各支持"手动输入"和"从剪贴板读取")、终端交互模式 / 后台监听模式 / Web API 模式、下载记录与日志开关、版本检查、语言切换。
- 全局交互约定:直接回车 = 返回上级菜单,输入
Q或q= 退出程序,所有输入框都遵循这条规则。 - 最短出活路径:写入 Cookie → 终端交互模式 → 批量下载链接作品(抖音)→ 手动输入 → 粘贴一个作品链接,第一个视频文件就会落到项目根目录的
Download/下。
⚠️ Cookie 是这个项目唯一的"钥匙"。首次运行不写入 Cookie,所有采集功能都是空转。Cookie 获取步骤:浏览器(建议无痕)访问
https://www.douyin.com/并登录 →F12打开开发人员工具 → 切到网络标签、勾选保留日志→ 筛选器输入cookie-name:odin_tt→ 点开任意作品评论区触发请求 → 选中任一数据包,完整复制请求头里Cookie的值。详细图文版见 docs/Cookie获取教程.md。
两点补充:document.cookie那个方法拿不到 httpOnly 字段,对本项目不适用,别走弯路;Cookie 质量直接影响能下载的最高分辨率,拿不到原画时先换已登录账号的 Cookie。至于msToken、tt_wid这类易变参数不用管,程序内置周期性线程每 15 分钟自动刷新并回写。
按任务来:从批量拉取账号作品到只采数据
进入终端交互模式后,完整功能清单定义在 src/application/main_terminal.py#L141-L209。下面按高频任务拆解,每个任务都是"入口 → 输入 → 产物"三段式。
批量拉取一个账号的全部作品
这是使用频率最高的任务。
- 终端交互模式 →
批量下载账号作品(抖音); - 输入来源三选一:
accounts_urls配置文件(推荐)、手动输入、从文本文档读取; accounts_urls里每个账号支持url、tab(发布 / 喜欢 / 收藏)、earliest/latest时间筛选、enable开关和自定义标识mark;- 等进度跑完即可,已下载的作品会自动跳过(增量下载)。
这个任务真正要改的参数:
| 参数 | 默认值 | 作用 |
|---|---|---|
root | ""(回退项目根目录) | 文件落盘根路径,建议改掉 |
folder_mode | false | true按账号分文件夹归档 |
name_format | "create_time type nickname desc" | 文件名模板,可用键:id/desc/create_time/nickname/uid/mark/type |
max_pages | 0(不封顶) | 给"喜欢 / 收藏"这类必须拉全量再筛日期的任务设请求上限 |
产物:root下按账号归档的视频 + 封面文件(音乐、静态封面可选下载);下载文件先写临时目录、完成后移入储存目录。昵称或mark变化时,程序会自动重命名已下载文件中的对应部分。
只采数据不落文件:评论、搜索、热榜
- 终端交互模式 → 选
采集作品评论数据(抖音)(输入作品链接)、采集搜索结果数据(抖音)(输入关键词,综合 / 视频 / 用户 / 直播四类)、采集抖音热榜数据(抖音)(无需输入)或采集账号详细数据(抖音); - 把
storage_format设为csv、xlsx或sql(SQLite)——留空代表不持久化,采完只打屏幕; - 若只想要数据不要文件,把
download设为false。
产物:按作品 / 账号维度组织的 CSV、XLSX 或 SQLite 数据,字段包含作品与评论的关键信息,可直接入库做后续分析。
直播拉流与 ffmpeg 录制
- 终端交互模式 →
获取直播拉流地址(抖音)(TikTok 侧同名入口)→ 粘贴直播间链接; - 程序展示直播标题、主播、在线观众等信息,并输出各档拉流地址;
- 若配置了
ffmpeg,程序会在新终端中自动拉起ffmpeg录制直播视频为 mp4。
| 参数 | 默认值 | 作用 |
|---|---|---|
ffmpeg | "" | ffmpeg 可执行文件路径,留空时自动探测系统 PATH |
live_qualities | "" | 直播画质选择 |
产物:可用的 RTMP / HLS 拉流地址 + 录制完成的 mp4 文件。
剪贴板监听:刷到什么存什么
- 主菜单选
后台监听模式,程序进入常驻剪贴板轮询; - 平时正常刷抖音 / TikTok,复制链接进剪贴板,程序自动识别并下载对应作品;
- 按
Ctrl+C退出,或把剪贴板内容设为close停止监听。
适合"随手存"的个人工作流,落盘规则同样由root/folder_mode等参数控制;抖音和 TikTok 链接分别走各自队列,受douyin_platform/tiktok_platform总开关管辖。
链接作品与合集作品批量下载
入口同样是终端交互模式:批量下载链接作品支持手动输入或文本文档(一行一个链接);批量下载合集作品额外支持"获取当前账号收藏合集列表"和mix_urls配置。TikTok 侧对应批量下载链接作品(TikTok)、批量下载合集作品(TikTok)。这类任务没有独立参数,复用前面的下载行为组即可。
settings.json 配置体系速览
前面已经带你改过最核心的几个值,这里补全组织逻辑。首次运行会在项目根目录生成settings.json(缺参会自动补齐,默认值见 src/config/settings.py#L21-L121),所有参数经 src/config/parameter.py 逐一校验后才生效。
下载行为组
| 参数 | 默认值 | 一句话作用 |
|---|---|---|
root | "" | 落盘根路径,空则回退项目根目录 |
name_format/split | "create_time type nickname desc"/"-" | 文件名模板与分隔符 |
folder_mode | false | 是否按文件夹归档 |
desc_length/name_length | 64/128 | 描述与文件名截断长度 |
max_size | 0 | 单文件字节上限,0 不限 |
download | true | false时只采数据不落文件 |
music/static_cover | false | 是否连带下载音乐 / 静态封面 |
网络 / 存储 / 平台组
| 参数 | 默认值 | 一句话作用 |
|---|---|---|
proxy/proxy_tiktok | "" | 代理地址,启动时先做连通性测试,失败自动忽略(src/config/parameter.py#L453-L502) |
timeout/max_retry/chunk | 10/5/2MB | 超时、重试次数、下载分块 |
max_pages | 0 | 分页请求上限,0 不封顶 |
storage_format | "" | 采集数据持久化格式,空 = 不落库 |
ffmpeg/live_qualities | "" | 直播录制可执行文件路径与画质 |
douyin_platform/tiktok_platform | true | 两个平台的功能总开关 |
browser_info/browser_info_tiktok | Chrome / Mozilla 指纹 | 请求指纹,含 User-Agent、webid、device_id、地区与语言 |
两个全局行为必须知道:①改完settings.json必须重启程序才生效;②非法值不报错,而是静默回退默认值——排障时如果日志里看到参数回退类提示,就是它了。感受一下实际改动量:
刚生成:
"root": ""、"storage_format": ""、"cookie": ""—— 文件堆在项目根目录Download/,数据不落库,程序空转。典型部署后:
"root": "/data/videos"、"folder_mode": true、"storage_format": "sql"、"cookie": "<已写入>"、"max_pages": 10—— 按账号分目录归档、采集数据进 SQLite、拉取类任务封顶 10 页。
旧字段(如default_mode、update_cookie、original_cover)会被自动映射为新字段,迁移老配置不用手工改键名。
从本机到服务:Docker 容器化与 Web API 部署
本机终端模式的上限很明确:人走程序停。需要 7×24 常驻或被其他系统调用时,升级路径是容器化 + Web API。
仓库自带 Dockerfile,两阶段构建:python:3.12-bullseye构建器装编译依赖,最终镜像python:3.12-slim只留运行时;EXPOSE 5555,数据卷挂/app/Volume。可复制的命令组:
docker pull joeanamier/tiktok-downloader # 拉取官方镜像(也可用仓库 Dockerfile 本地构建) docker run --name douk -p 5555:5555 -v tiktok_downloader_volume:/app/Volume -it joeanamier/tiktok-downloader # -v 把下载产物持久化到命名卷;-p 把 API 端口映射到宿主机 docker start -i douk # 后续启动 docker restart -i douk # 重启容器无法访问宿主机文件系统,依赖本地环境的函数在容器内不可用,Cookie 统一走手动输入 / 剪贴板。
选Web API 模式后,FastAPI 服务监听0.0.0.0:5555,访问http://127.0.0.1:5555/docs或/redoc就是自动生成的 OpenAPI 文档,端点覆盖账号、作品、评论、合集、直播、搜索、短链解析等。所有业务端点经过 token 依赖校验请求头中的token,不通过直接返回 HTTP 403(实现见 src/application/main_server.py#L46-L51):
from httpx import post headers = {"token": ""} data = {"detail_id": "0123456789", "pages": 2} response = post( "http://127.0.0.1:5555/douyin/comment", json=data, headers=headers, ) print(response.json())⚠️ 项目默认不校验 token(
is_valid_token()直接返回True,见 src/custom/function.py#L73-L75)。一旦把服务暴露到公网,务必先改这个函数配置令牌,否则任何路过的人都可以消耗你的 Cookie 和带宽。
高频坑地图与使用边界
按踩坑频率排,前四个几乎每个重度用户都会碰到:
清晰度不够:现象是拿到的视频明显低于原画。原因九成在 Cookie——未登录或过期的 Cookie 拿不到最高分辨率地址;换已登录账号的 Cookie 再试,同时检查有没有把max_size设得过小。
改完 settings.json 没反应:两个原因二选一——没重启程序,或者该字段值非法被静默回退成了默认值(日志里会有回退提示)。
喜欢 / 收藏任务慢得离谱:这类接口只返回作品发布日期、不返回操作日期,程序必须拉全量后再按日期筛选,作品多时就是久。用max_pages给分页封顶即可止损。
代理配了却没生效:程序启动时会先用代理请求平台首页做连通性测试,超时或失败就自动忽略该代理并记日志。先查日志里的"代理测试失败 / 超时",别怀疑业务代码。
下载中断留下坏文件:任何时候都按Ctrl+C退出程序和ffmpeg,不要直接点终端关闭按钮——临时目录清理逻辑只在正常退出时执行。
低频 / 长尾问题
- Fork 仓库触发不了 Actions:Fork 后需在 Settings → Actions → General 中把 Actions permissions 改为 Allow all actions and reusable workflows;主仓库的 Actions 因权限限制无法直接触发,打包必须走 Fork 路线(普通用户每月约 2000 分钟免费额度,Fork 仓库记得定期与上游同步)。
- 打包(Actions 构建)失败:看运行日志定位,确认代码无语法错误、依赖可安装。
- 多开与更新:程序未针对多开优化,要并行跑两套任务请复制整个项目文件夹再分别配置;更新可执行文件版本时,把旧版
_internal\Volume复制到新版_internal保留配置与记录。 - macOS 运行未签名可执行文件:首次运行前执行
xattr -cr 项目文件夹路径移除安全标记。 - Windows 交互体验:建议用 Windows 11 自带的 Windows 终端。
合规上收个尾:项目基于 GNU GPLv3.0 开源,使用者自行评估并承担使用风险;未经授权下载、传播受版权保护的内容属于侵犯知识产权的行为,数据采集还需自行遵守目标平台条款与当地法规。接入团队工作流之前,先把 README.md 末尾的免责声明章节完整读一遍。
DouK-Downloader 的能力面是"下载工具 + 数据管道"二合一:终端里是最省心的批量下载器,服务化后是能嵌进流水线的采集 API;它的边界同样清楚——加密参数要自备、Web UI 还在重构、Cookie 是必须持续维护的前置条件。
本文基于项目公开内容整理,功能边界以官方 README 为准。
【免费下载链接】TikTokDownloader抖音 / TikTok 平台作品下载/数据采集工具项目地址: https://gitcode.com/GitHub_Trending/ti/TikTokDownloader
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考