news 2026/10/22 2:10:49

DouK-Downloader:抖音视频下载与 TikTok 数据采集,从 Cookie 配置到 API 部署的完整配置

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
DouK-Downloader:抖音视频下载与 TikTok 数据采集,从 Cookie 配置到 API 部署的完整配置

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 失效之前不需要反复写,失效了再更新即可。获取步骤建议现在就照着做一遍:

  1. 浏览器打开抖音网页版并登录;
  2. 按 F12 打开开发者工具,切到「网络」面板,勾上「保留日志」;
  3. 在筛选框里输入cookie-name:odin_tt,随便点开一个作品的评论区产生请求;
  4. 选中一个请求,把请求头里Cookie的完整值复制出来。

更详细的截图版教程见 Cookie获取教程.md。

第一次下载走哪条菜单

运行python main.py后:

  1. 阅读免责声明,输入 YES 确认(这个选择会持久化,只有第一次出现);
  2. 选「手动输入 Cookie」粘贴刚才复制的内容;如果你复制时直接进了剪贴板,选「从剪贴板读取 Cookie」然后直接回车也行;
  3. 返回主菜单,选「终端交互模式」;
  4. 选「批量下载链接作品(抖音)」,再选「手动输入待采集的作品链接」;
  5. 粘贴一个作品链接,等进度条走完。

文件会落在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_formatcreate_time type nickname desc用了七键之外的词,整个命名规则被丢弃、回退默认组合
storage_format空字符串纯采集时数据不落盘,跑完只剩终端输出
max_pages00 按 99999 处理,等于不限量地翻页
proxy空字符串启动时测连失败就自动忽略,代理静默失效
downloadtrue只想要数据不想要文件时,把它设为 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),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/22 2:09:49

3 行代码拿到通达信行情数据:mootdx 数据获取工具实战

3 行代码拿到通达信行情数据&#xff1a;mootdx 数据获取工具实战 【免费下载链接】mootdx 通达信数据读取的一个简便使用封装 项目地址: https://gitcode.com/GitHub_Trending/mo/mootdx mootdx 是一个通达信数据获取的 Python 封装&#xff1a;它对接通达信公开行情服…

作者头像 李华
网站建设 2026/10/22 2:09:48

管理变量(一)

Ansible 变量简介Ansible 支持利用变量来存储值&#xff0c;并在 Ansible 项目的所有文件中重复使用这些值。这可以简化项目的创建和维护&#xff0c;并减少错误的数量。通过变量&#xff0c;您可以轻松地在 Ansible 项目中管理给定环境的动态值。例如&#xff0c;变量可能包含…

作者头像 李华
网站建设 2026/10/22 2:07:16

WSL使用Ubuntu 24.04安装Libradtran

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华