尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

抖音批量下载与去水印:douyin-downloader 三分钟上手与源码剖析

抖音批量下载与去水印:douyin-downloader 三分钟上手与源码剖析 抖音批量下载与去水印douyin-downloader 三分钟上手与源码剖析【免费下载链接】douyin-downloaderA practical Douyin downloader for both single-item and profile batch downloads, with progress display, retries, SQLite deduplication, and browser fallback support. 抖音批量下载工具去水印支持视频、图集、合集、音乐(原声)。项目地址: https://gitcode.com/GitHub_Trending/do/douyin-downloader需要把抖音视频、图集、合集、原声音乐批量存成无水印文件的话douyin-downloader抖音下载器是个可以直接上手的选择命令行驱动、YAML 配置、SQLite 去重还带浏览器兜底。这篇文章先带你把它跑起来再跟一个真实任务走一遍讲清楚源码里的几个设计决策适合想真正用起来、又想看懂代码的人。⏱️ 命令行版和内测中的桌面版Douzy共用同一套后端下面是桌面版里抖音下载工作区的截图方便你对齐概念三分钟跑起来抖音下载器装完、登录、下第一个视频只需要 Python 3.8一共 5 条命令git clone https://gitcode.com/GitHub_Trending/do/douyin-downloader cd douyin-downloader pip install -r requirements.txt cp config.example.yml config.yml python -m tools.cookie_fetcher --config config.yml最后一条会拉起浏览器你在抖音登录完回到终端按回车Cookie 就自动写进配置文件不用手动复制粘贴。然后在config.yml里填个最小配置link换成你想下的链接就行link: - https://www.douyin.com/video/7604129988555574538 path: ./Downloaded/ mode: [post] number: {post: 10} thread: 5 database: true执行python run.py -c config.yml。怎么判断成功了终端里会看到进度条一步步推进初始化 → 解析链接 → 创建下载器 → 执行下载 → 记录历史最后打印 Overall SummaryDownloaded/根目录多出一个download_manifest.jsonl作者目录下的日期_作品ID/子文件夹里有.mp4和封面图。跟一个用户主页链接走一遍回车之后发生了什么把link换成一个用户主页链接/user/开头的网址再跑一次程序依次做了这些读配置加载 YAML、合并命令行覆盖项、校验必填字段Cookie 交给CookieManager保管。解析链接短链v.douyin.com这种先解析成长链URLParser再靠正则把链接分成七类——视频、用户、图集、合集、音乐、直播、直播回放并抽出aweme_id、sec_uid这类标识。选下载器DownloaderFactory按 URL 类型映射到具体类主页链接拿到的是UserDownloader。分页拉作品列表post 策略每页 20 条、靠游标往后翻如果接口被风控只放出一两页就自动拉起真实浏览器让你过验证、人工把剩下的翻出来——这就是浏览器兜底真实场景里最先用到它。过滤与去重按时间范围start_time/end_time、数量上限number.post裁剪已下过的跳过。并发落盘默认 5 个并发每条视频按候选地址逐个试封面、音乐、头像并行下载互不占槽。记录SQLite 写一条历史download_manifest.jsonl追加一行清单。汇报打印成功/失败/跳过统计配了通知就推送到手机。各种模式post/like/mix/music/collect各自是 core/user_modes/ 里的一个类想弄清每种模式怎么取数读这个目录就够。代码里的三个关键决策去重、限速、兜底时限1. 为什么去重要同时看磁盘文件和数据库数据库可能被删文件可能被移动只信任何一方都会误判。代码在 core/downloader_base.py 里先扫下载目录里已有的媒体文件、从文件名抽出aweme_id建索引文件不在时才查历史库且原则是宁多下不漏下# _should_download: 先看磁盘再看历史库 await self._ensure_local_aweme_index() if self._is_locally_downloaded(aweme_id): return False # 磁盘上有非空媒体文件直接跳过 if self.database and await self.database.is_downloaded(aweme_id): return False # 库里已记录跳过 return True # 状态不明时宁可补下2. 为什么限速不卡一个固定的每秒 2 次固定频率最像机器、也最容易被识别。RateLimiter 在保持最小请求间隔的基础上额外加了 0~0.5 秒的随机抖动见 control/rate_limiter.pyif time_since_last self.min_interval: await asyncio.sleep(wait_time) await asyncio.sleep(random.uniform(0, 0.5)) # 随机抖动 self.last_request time.time()3. 为什么单条视频要套一个 15 分钟总时限一条视频最多 4 个候选地址 × 多轮重试 × 单次 300 秒超时最坏能挂 80 分钟整个队列跟着停摆。所以代码给每条作品的下载包了一个 15 分钟的总帽_VIDEO_ITEM_DEADLINE_S 900超时直接判这条没下成记日志继续下一条。代价是个别极端慢的条目会失败收益是队列永远不会被卡死。常用配置项速查从单视频到批量归档场景配置项一句话说明单视频下载link: [视频链接]填链接就能跑主页批量mode: [post]number.post: 500 表示全量增量跳过已有increase.post: true磁盘已有主媒体文件就跳过时间范围start_time/end_timeYYYY-MM-DD只拉区间内的并发数thread: 5建议 3~10越大越容易触发风控重试次数retry_times: 3退避间隔 1s/2s/5s限速rate_limit: 2每秒请求数评论归档comments.enabled: true视频旁多存一份评论 JSON完成推送notifications.enabled: trueBark / Telegram / Webhook 并行发把 douyin-downloader 接进你自己的自动化两条低成本的路线REST API 模式pip install fastapi uvicorn后执行python run.py --serve向/api/v1/downloadPOST 一条链接拿到job_id再轮询/api/v1/jobs/{id}取结果。适合嵌进你自己的调度系统不用自己起进程。定时任务 增量开increase: true配合start_time时间窗用每次运行产出的download_manifest.jsonl做对账就能搭一条每天自动补新作品的归档流水线——新作品自动补、旧的自动跳。同后端的桌面版任务中心截图如下做自己的界面时可以参考它的状态呈现方式避坑指南为什么只拉到 20 条作品⚠️ 要 500 条作品为什么只拉到 20 条左右现象number.post给得很大实际只有一两页就停了。原因接口分页被风控不再返回后续页面。解法开browser_fallback.enabled: true且headless: false弹窗出现后手动过验证别急着关浏览器。为什么某条作品反复失败日志写着加密流现象个别作品多次重试都失败日志出现付费/会员内容字样。原因拿到的是 CENC 加密流本地无法播放程序主动删掉文件并判失败。解法DRM 内容本地解不开这个兜底是故意的——宁可失败也不留一个看着像成功的坏文件。删了数据库再跑怎么不重新下载现象dy_downloader.db删了重跑却全部跳过。原因去重以磁盘文件是否存在为主判断文件名里带aweme_id媒体文件还在就跳过数据库只是兜底。解法本地作者目录和数据库要一起删README 的Full reset给的就是这两步反过来只删文件程序下次会自动补下。结尾适合什么不适合什么适合个人或小团队的无水印批量抓取、按天增量归档、以及用 API 模式搭自己的下载流水线不适合商业规模的爬取风控与法律风险、DRM 加密的付费内容以及要求秒级实时性的场景——直播录制目前仍属实验功能。【免费下载链接】douyin-downloaderA practical Douyin downloader for both single-item and profile batch downloads, with progress display, retries, SQLite deduplication, and browser fallback support. 抖音批量下载工具去水印支持视频、图集、合集、音乐(原声)。项目地址: https://gitcode.com/GitHub_Trending/do/douyin-downloader创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表