如何用 DouK-Downloader 快速下载抖音 TikTok 作品并采集数据 如何用 DouK-Downloader 快速下载抖音 TikTok 作品并采集数据【免费下载链接】TikTokDownloader抖音 / TikTok 平台作品下载/数据采集工具项目地址: https://gitcode.com/GitHub_Trending/ti/TikTokDownloaderDouK-Downloader历史名称 TikTokDownloader是一款开源的抖音 / TikTok 作品下载与数据采集工具基于 HTTPX 异步请求库实现。它既能用终端交互菜单手动操作也能发布成 Web API 服务或打进 Docker 镜像。下载单个视频、批量归档一个账号的作品、采集评论和搜索数据这件事它可以从头做完。装好环境写入 Cookie下出第一个作品硬性要求只有一个Python 不低于 3.12Windows 10 及以上、macOS、Linux 都能跑。拉取源码并启动git clone https://gitcode.com/GitHub_Trending/ti/TikTokDownloader cd TikTokDownloader uv sync --no-dev uv run main.py习惯 pip 的话pip install -r requirements.txt之后python main.py同样可以。requirements.txt 这份依赖清单基本就是项目的技术栈本身httpx 负责异步请求fastapi / uvicorn 负责服务化rich 渲染彩色终端pydantic 做数据校验aiosqlite 与 openpyxl 负责数据落盘。首次运行会在项目根目录生成 settings.json生成逻辑在 settings.py 的__create方法里随后程序引导你写入 Cookie。Cookie 是浏览器里的身份凭证直接决定接口权限和视频画质是整个使用流程里最关键的一步。获取方式浏览器登录抖音网页版按 F12 打开开发人员工具在「网络」选项卡勾选「保留日志」筛选框输入cookie-name:odin_tt点开任意作品的评论区从某个请求里复制完整的 Cookie 值粘贴进主菜单的「手动输入 Cookie (抖音)」项也可以选「从剪贴板读取 Cookie」复制后直接回车。接着走菜单主菜单选终端交互模式→批量下载链接作品(抖音)→ 粘贴一个作品链接回车。进度条跑完后文件落在Download/目录即folder_name的默认值文件名按name_format模板拼接默认create_time type nickname desc也就是创建时间 类型 昵称 作品描述。菜单里直接回车返回上级输入 Q 结束程序。 读完这一节能得到的东西一个已下载的本地作品文件和一份自动生成的 settings.json。批量采集一个账号的发布、喜欢、收藏作品终端交互模式一共挂着 15 个功能入口定义在 main_terminal.py 的__function元组里抖音侧覆盖账号作品、链接作品、评论、合集、收藏作品、收藏音乐、收藏夹作品、账号详细数据、搜索、热榜和直播TikTok 侧覆盖账号作品、链接作品、合辑和直播。其中「批量下载账号作品(抖音)」提供三种喂链接的方式在 settings.json 的accounts_urls参数里预置账号每项含mark、url、earliest、latest、enable字段程序直接读取这是菜单里标注推荐的方式手动输入单个账号链接从文本文档批量读入。两个值得提前知道的行为喜欢、收藏类接口只返回作品的发布日期不返回你的操作时间所以程序必须把分页数据拉全再按日期筛选。总量阀门就是max_pages默认0表示不限制程序内部按 99999 页处理写成具体正整数则直接卡住请求页数。把earliest/latest日期区间收窄也能明显提速。只想要数据、不要文件时把download设为false同时指定storage_format。支持 CSV / XLSX / SQLite 等格式storage/ 下各有一个对应 Logger纯采集场景不配这个字段的话数据不会落盘。增量下载和跳过已下载作品是内置行为程序会记录已下载的作品 ID主菜单里有「删除作品下载记录」一项重复执行同一批账号时只补新作品。 交付物一套针对任意账号的批量采集动作以及把结果存成 CSV / XLSX / SQLite 的完整方法。拿到直播拉流地址并用 ffmpeg 录制终端交互模式里有两个入口获取直播拉流地址(抖音)和获取直播拉流地址(TikTok)先拿到平台的直播流地址要真正把直播录成文件需要在 settings.json 里把ffmpeg参数填成 ffmpeg 可执行文件的路径由程序调用它完成录制live_qualities参数可以用来指定流地址清晰度。两个操作上的注意录制或下载过程一律按Ctrl C停止不要直接点终端的关闭按钮避免临时文件没落定批量任务内置风控保护程序连续处理的数据达到阈值后function.py 中的节流逻辑会自动暂停 5 分钟再继续防止请求频率过高触发账号或 IP 风控这是正常行为不是卡死。把它跑成 Web API 服务从代码里调用主菜单选Web API 模式程序会在0.0.0.0:5555上启动 FastAPI 服务。两个常量SERVER_HOST/SERVER_PORT定义在 static.py服务实现在 main_server.py 的APIServer.run_server。打开http://127.0.0.1:5555/docs或/redoc能看到自动生成的交互式接口文档。每个接口都过同一道 token 校验token_dependency读取请求头里的token字段交给 function.py 的is_valid_token()判断不通过返回 HTTP 403。这个函数目前直接返回 True所以项目默认不需要令牌如果你打算把服务挂到公开服务器上就把这里改成比对一个固定令牌外部恶意请求就进不来了/token接口可以用来测试令牌是否生效。调用示例任何 HTTP 客户端都可以这里用 httpxfrom httpx import post resp post( http://127.0.0.1:5555/douyin/comment, json{detail_id: 0123456789, pages: 2}, headers{token: }, ) print(resp.json())不想装 Python 环境就直接上 Docker。仓库根目录的 Dockerfile 是双阶段构建编译阶段用 python:3.12-bullseye运行阶段精简到 python:3.12-slim已暴露 5555 端口/app/Volume是数据挂载点docker run --name tk -p 5555:5555 \ -v tk_volume:/app/Volume -it 镜像名 docker start -i tk容器里注意一点它摸不到宿主机的浏览器依赖宿主环境的功能比如从浏览器读 Cookie在容器内不可用Cookie 要通过挂载卷里的 settings.json 提前写进去。settings.json 里真正用得上的配置完整默认值集中在 settings.py 的Settings.default字典里逐项背太费劲按用途分三组看文件输出类root储存根路径填了不存在的路径会回退到项目根目录并写警告日志、folder_name默认Download、name_format文件名模板从 id / desc / create_time / nickname / uid / mark / type 七个键里自由组合任何一个键写错整体回退默认组合、desc_length64 与name_length128名称各部分长度上限、folder_mode是否按账号分文件夹归档。采集行为类download是否下载文件默认 true、max_pages分页上限0 即 99999、timeout请求超时秒数有效范围 2-10默认 10、max_retry失败重试次数0-5默认 5、storage_format数据持久化格式、run_command启动时直接预执行的功能指令省掉每次选菜单、ffmpeg、live_qualities、music是否下载背景音乐、dynamic_cover/static_cover下载动态 / 静态封面。网络与凭证类proxy/proxy_tiktok两个平台各自独立的代理。注意启动时程序会真的发请求测连测不通就静默置空日志里找「代理测试成功 / 失败」确认它到底生没生效。cookie/cookie_tiktok字符串和字典两种格式都收校验逻辑在 parameter.py 的__check_cookie方法Cookie 未登录时账号页、私密账号作品这类接口会直接失败画质偏低时优先怀疑它。browser_info/browser_info_tiktok是设备指纹参数组一般不用动。两个容易踩的点配置文件改完要重启程序才生效没有热加载旧版本配置有自动字段映射settings.py 的rename_paramsdefault_mode→run_command、update_cookie→douyin_platform、update_cookie_tiktok→tiktok_platform、original_cover→static_cover看到这些老字段名不用慌程序会自动改名并提示。代码里请求是怎么流转的以及运维时绕开的坑按模块职责读代码一条作品链接的处理链路是这样的link/把短链解析成完整作品地址interface/所有接口类继承 template.py 的API模板统一走「组参数 → 发请求 → 查响应」三段式account.py、detail.py、comment.py、live.py、search.py 这些子类只需填自己的 URL 和游标规则extract/统一提取响应字段产出 models/ 里的结构化数据downloader/的 download.py 用信号量控制并发最多 4 个下载任务同时跑MAX_WORKERS在 static.py请求头里带 Range 实现断点续传文件先落临时目录、完成后移入目标目录storage/的RecordManagermanager.py按storage_format把数据交给 CSV / XLSX / SQLite / 文本四个 Logger 持久化。调度中枢是 TikTokDownloader.py 的TikTokDownloader负责菜单分发、Cookie 写入、版本检查另开一个后台线程以 15 分钟为周期static.py 的COOKIE_UPDATE_INTERVAL自动刷新 msToken、tt_wid 并回写 Cookie长时间运行的任务不会因为令牌过期而中途失败。还有两个值得单独看的工程细节重试统一走 retry.py 的Retry.retry装饰器按max_retry上限循环、每次失败后智能延时用尽次数才放弃下载完成后FILE_SIGNATURESstatic.py用文件头魔数核对真实类型jpg / png / mp4 / mov 等后缀和文件头对不上时会纠正。运维侧的坑基本都对应一个明确动作数据获取失败或画质偏低重写 Cookie私密账号需要登录且已关注该账号的 Cookie文件没出现在预期目录查日志里 root 的回退警告改成已存在目录后重启代理没生效先手动验证代理可用再看测连日志升级后旧作品「丢了」旧版本数据存放在旧版的_internal/Volume里复制到新版对应目录即可要多开实例复制整个项目文件夹各自独立运行项目没有针对多开做优化。最后两个功能边界要知道Web UI 交互模式正在重构选中只会提示「该功能正在重构」内置的加密参数算法xBogus / aBogus 等出于合规原因已停止维护个别依赖它的功能可能无法正常工作需要的话得自行准备生成代码。项目使用前请完整阅读 README 末尾的免责声明本项目提供的能力面向个人作品归档与学习研究场景采集与下载行为产生的全部法律责任由使用者自行承担使用前请遵守所在地法律法规与平台服务条款。【免费下载链接】TikTokDownloader抖音 / TikTok 平台作品下载/数据采集工具项目地址: https://gitcode.com/GitHub_Trending/ti/TikTokDownloader创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考