DouK-Downloader 抖音 TikTok 下载采集实战指南:3 分钟跑通首次下载与源码级拆解
【免费下载链接】TikTokDownloader抖音 / TikTok 平台作品下载/数据采集工具项目地址: https://gitcode.com/GitHub_Trending/ti/TikTokDownloader
DouK-Downloader(历史名称 TikTokDownloader)是基于 httpx 的抖音/TikTok 开源下载与数据采集工具,覆盖作品下载、账号批量采集、直播录制、Web API 服务化 4 类场景。本文先用 3 分钟带你跑通一次作品下载,再拆解到源码级的调用链路与参数校验逻辑,并附上高频坑排障表。
一、为什么值得装:双平台能力全景与失效边界
核心问题:它能替代什么?先给结论——免抓包脚本,批量拿作品文件与结构化数据。按维度铺开:
| 维度 | 能力点 |
|---|---|
| 作品下载 | 抖音视频/图集/实况/动图最高画质;TikTok 视频与图集;音乐与动态/静态封面 |
| 账号维度 | 抖音账号发布/喜欢/收藏/收藏夹作品批量下载,TikTok 账号发布/喜欢作品,多账号批量 |
| 链接维度 | 批量下载链接作品;后台监听剪贴板链接自动下载 |
| 直播 | 获取抖音/TikTok 直播拉流地址,调用 ffmpeg 录制 |
| 数据采集 | 作品评论、合集/合辑、账号详细数据、综合/视频/用户/直播 4 类搜索、抖音热榜 |
| 工程能力 | 增量下载、断点续传、并发下载、自动跳过已下载、CSV/XLSX/SQLite 持久化、代理、局域网远程访问 |
⚠️ 边界与失效清单:以下功能在 README.md 中明确标注弃用/失效/不再维护,请勿依赖:
| 功能 | 状态 | 原因 |
|---|---|---|
| Web UI 交互模式 | 重构中 | 代码尚未更新,菜单仅提示"该功能正在重构",见disable_function(src/application/TikTokDownloader.py 约第 138–145 行) |
| 内置加密参数算法 | 已过期失效 | 为合规不再维护 xBogus/aBogus 等算法,部分功能可能无法正常工作,需自行准备生成代码 |
| 从浏览器读取 Cookie | 已弃用 | README 删除线标注,主菜单对应代码已注释 |
| 扫码登录获取 Cookie | 已失效 | README 删除线标注,主菜单对应代码已注释 |
二、多久能跑起来:硬指标、两条安装路径与最小示例
核心问题:环境门槛有多高?只有一条硬指标——Python 不低于3.12,Windows 10+、macOS、Linux 均可。
两条等价安装路径,任选其一。路径一为 pip 方式:
git clone https://gitcode.com/GitHub_Trending/ti/TikTokDownloader cd TikTokDownloader pip install -r requirements.txt路径二为 uv 方式(README 推荐):
uv sync --no-dev uv run main.py依赖清单即技术栈:httpx异步请求、rich彩色终端、fastapi/uvicorn服务化、pydantic数据校验、aiosqlite/openpyxl持久化(见 requirements.txt)。
💡 Cookie 是核心前置条件:决定接口权限与视频画质,仅在失效后需要重新写入。步骤参考 docs/Cookie获取教程.md:浏览器打开抖音网页版,按 F12,「网络」选项卡勾选「保留日志」,筛选框输入cookie-name:odin_tt,点击任意作品评论区后选取一个请求,复制Cookie完整值。
最小可运行示例(python main.py启动,入口逻辑见 main.py,它创建TikTokDownloader实例并调用run()):
- 首次运行输入YES接受免责声明(该选择持久化,仅首次出现);
- 主菜单选
手动输入 Cookie (抖音),粘贴 Cookie 回车(或选从剪贴板读取 Cookie); - 返回主菜单选
终端交互模式; - 选
批量下载链接作品(抖音)→手动输入待采集的作品链接,粘贴一个作品链接回车; - 等待进度条走完,文件落在
root/folder_name目录,文件名由name_format模板生成(默认create_time type nickname desc,即创建时间+作品类型+账号昵称+作品描述)。
菜单直接回车返回上级,输入Q或q结束程序。
三、它内部怎么跑:一句话链路 + 3 个核心模块
先一句话串起完整链路:用户输入经 src/link/extractor.py 把短链解析为完整链接 → src/interface/ 下各接口类发起分页请求 → src/extract/extractor.py 统一提取字段 → src/downloader/ 先写入临时目录再移动到储存目录 → src/storage/ 按storage_format持久化数据;调度中枢是 src/application/TikTokDownloader.py 的主菜单分发与run_command直达。
三个核心模块:
- 调度层
TikTokDownloader(src/application/TikTokDownloader.py):负责菜单分发、Cookie 写入、版本检查;另开守护线程periodic_update_params(约第 439–460 行),以COOKIE_UPDATE_INTERVAL = 15 * 60秒(src/custom/static.py 第 16 行)为周期自动刷新 msToken、tt_wid 并回写 Cookie。 - 接口层
API模板(src/interface/template.py):统一generate_params/request_data/check_response三段式,子类 account.py、detail.py、comment.py、live.py、search.py、hot.py 各自只关心 URL 与游标规则;终端菜单的 15 个功能入口定义在 src/application/main_terminal.py 的__function(约第 141–209 行)。 - 下载层
Downloader(src/downloader/download.py):类级Semaphore(MAX_WORKERS)限制并发,MAX_WORKERS = 4定义于 src/custom/static.py 第 2 行;__update_headers_range支持 Range 断点续传;request_file先落临时目录,完成后save_file移入目标目录。
两个值得读的工程细节:
- 重试与退避:src/tools/retry.py 的
Retry.retry装饰器(约第 10–23 行)按max_retry上限循环重试,每次失败后await wait()智能延时,达到上限才终止任务。 - 文件完整性校验:src/custom/static.py 的
FILE_SIGNATURES(第 29–57 行)内置 jpg/png/mp4/mov 等 14 组文件头魔数,下载后据此校验真实类型并纠正后缀。
四、关键参数怎么配:settings.json 全参数速查与校验回退逻辑
程序首次启动在项目根目录自动生成settings.json,生成逻辑见 src/config/settings.py 的__create(约第 151–162 行),默认值定义在Settings.default(约第 21–121 行)。速查表:
| 参数名 | 默认值 | 一句话作用 | 修改建议 |
|---|---|---|---|
cookie/cookie_tiktok | "" | 抖音/TikTok 身份凭证,支持字符串或字典 | 登录后从浏览器写入,失效再更新 |
root | "" | 储存根路径,非法则回退项目根目录 | 填已存在的目录 |
folder_name | "Download" | 顶层下载目录名 | 避免非法字符 |
name_format | "create_time type nickname desc" | 作品文件命名模板 | 从id/desc/create_time/nickname/uid/mark/type组合 |
storage_format | "" | 数据持久化格式(CSV/XLSX/SQLite 等) | 纯采集场景必须配置,否则不落盘 |
download | true | 是否下载文件 | 只采数据设为false |
max_pages | 0(等价 99999) | 分页请求次数上限 | 控制账号喜欢/收藏的拉取量 |
proxy/proxy_tiktok | "" | 平台代理地址 | 启动时自动测连,失败即忽略 |
timeout/max_retry | 10/5 | 请求超时(秒)/失败重试次数 | 允许范围 2–10 秒、0–5 次 |
run_command | "" | 启动时预执行的功能指令 | 免去重复选菜单 |
ffmpeg | "" | ffmpeg 可执行文件路径 | 下载直播必填 |
最影响行为的 5 个参数,校验逻辑都在 src/config/parameter.py:
- cookie:
__check_cookie(约第 280–287 行)同时接受字典与字符串,其他类型记警告并返回空值。Cookie 未登录时账号页、私密账号作品等接口直接失败;画质偏低时优先怀疑它。 - root:
__check_root(约第 368–382 行)先判目录存在,再尝试在父目录下创建,都不行才回退项目根路径并写警告日志。 - name_format:
__check_name_format(约第 404–415 行)要求每个键都在NAME_KEYS七键内,任一非法即整体回退默认组合。 - max_pages:
__check_max_pages(约第 525–535 行)中0与非正整数统一按 99999 处理。喜欢/收藏接口只返回发布日期而非操作日期,程序必须拉全量再筛选,此参数是唯一的量级阀门。 - proxy:
__check_proxy(约第 453–502 行)启动时实际请求平台页面测连,超时或报错直接返回None,代理静默失效,日志里找"代理测试成功/失败"确认。
💡 配置修改后需重启程序才生效,不支持热加载。旧版本字段有自动映射(src/config/settings.pyrename_params,约第 122–143 行):default_mode→run_command、update_cookie→douyin_platform、update_cookie_tiktok→tiktok_platform、original_cover→static_cover。
五、怎么用到生产:一行起容器与 Web API 服务化
容器化:镜像可用仓库根目录 Dockerfile 本地构建(双阶段构建,最终基于python:3.12-slim,EXPOSE 5555);或直接docker pull joeanamier/tiktok-downloader、docker pull ghcr.io/joeanamier/tiktok-downloader。下面这组命令挂载数据卷并把 5555 端口映射到宿主机:
docker run --name <容器名称> -p <主机端口>:5555 -v tiktok_downloader_volume:/app/Volume -it <镜像名称> docker start -i <容器名称>⚠️ 容器内能力差异:容器无法访问宿主机文件系统与本地浏览器,从浏览器读取 Cookie等依赖宿主环境的功能不可用。
Web API 接口模式:主菜单选Web API 模式,程序在0.0.0.0:5555启动 FastAPI 服务,常量SERVER_HOST/SERVER_PORT定义于 src/custom/static.py 第 9–13 行,服务实现见 src/application/main_server.py 的APIServer.run_server(约第 82–101 行)。访问http://127.0.0.1:5555/docs或/redoc可查阅自动生成的交互文档。
鉴权机制:每个接口经token_dependency(约第 46–51 行)读取请求头token,交由 src/custom/function.py 的is_valid_token()校验,失败返回 HTTP 403。项目默认无需令牌;公开部署时建议在is_valid_token()处设置固定令牌,并可用/token接口测试有效性。最小调用示例(POST/douyin/comment拉取作品评论):
from httpx import post data = {"detail_id": "0123456789", "pages": 2} headers = {"token": ""} resp = post("http://127.0.0.1:5555/douyin/comment", json=data, headers=headers) print(resp.json())🔧 生产化各一句:多实例请复制整个项目文件夹隔离运行;对外暴露前挂一层反向代理终结 TLS 并做限流;长期运行将 uvicorn 日志重定向到文件落盘。
六、出问题找谁:高频坑速查与运维备忘
| 现象 | 原因 | 解法 |
|---|---|---|
| 数据获取失败、视频清晰度偏低 | Cookie 失效或未登录 | 重新写入 Cookie;私密账号需登录且已关注该账号的 Cookie |
| 文件没出现在预期目录 | root为非法路径,已回退项目根目录 | 查运行日志中 root 警告,改为已存在目录后重启 |
| 代理配置了却没生效 | 启动时代理测连失败,程序自动忽略 | 先手动验证代理可用,再确认日志出现"代理测试成功" |
| 批量喜欢/收藏作品很慢 | 接口只返回发布日期,需拉全量再按日期筛选 | 用max_pages控制请求页数,缩小日期区间 |
| 升级后旧作品"丢失" | 旧版本数据在_internal/Volume,新版未继承 | 按 README 更新方案一,将旧版_internal/Volume复制到新版_internal |
| 多开实例行为异常 | 项目未针对多开优化 | 复制整个项目文件夹,各开独立实例 |
运维备忘:终止程序或 ffmpeg 一律按Ctrl + C,不要直接点终端关闭按钮;批量收藏作品模式仅支持当前登录账号,暂不支持多账号;本项目不支持付费作品下载。
收尾
DouK-Downloader 适用于个人作品归档、中小规模账号数据采集与 Web API 服务化集成三类场景,双平台能力完整,调度、接口、下载三层源码全部可读可改。本项目使用必须自行遵守相关法律法规与平台规则,因数据采集与下载行为产生的一切法律责任由使用者自行承担。
【免费下载链接】TikTokDownloader抖音 / TikTok 平台作品下载/数据采集工具项目地址: https://gitcode.com/GitHub_Trending/ti/TikTokDownloader
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考