用 Python 下载抖音无水印视频
时间:2022-07-23
本文章向大家介绍用 Python 下载抖音无水印视频,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
说起抖音,大家或多或少应该都接触过,如果大家在上面下载过视频,一定知道我们下载的视频是带有水印的,那么我们有什么方式下载不带水印的视频呢?其实用 Python 就可以做到,下面我们来看一下。
首先,我们打开抖音随意找一个视频,如下图所示:
然后点击分享按钮,找到复制链接选项,如下图所示:
接着,我们点击按钮复制链接,比如我复制的链接为:https://v.douyin.com/JePfx5f/
,然后我们将链接复制到谷歌浏览器上,按 F12 打开开发者工具,再切换到移动设备,选择 Network,如下图所示:
我们接着按回车键进行访问,然后在 Filter 中输入 item,进而我们可以找到 item_ids 和 dykt,如下图所示:
再切换到 Preview,我们可以发现有一个 play_addr,如下图所示:
我们通过 play_addr 就可以下载无水印视频了。
看一下主要实现代码:
share_url = "https://v.douyin.com/JePfx5f/"
# 获取 itemId、dytk
get = requests.get(share_url, headers=headers)
html = get.content
itemId = re.findall(r"(?<=itemId:s")d+", str(html))
dytk = re.findall(r"(?<=dytk:s")(.*?)(?=")", str(html))
# 组装视频长链接
long_url = "https://www.iesdouyin.com/web/api/v2/aweme/iteminfo/?item_ids="+itemId[0]+"&dytk="+dytk[0]
# 请求长链接,获取 play_addr
video_open = requests.get(long_url, headers=headers)
vhtml = video_open.text
uri = re.findall(r'(?<="uri":")w{32}(?=")', str(vhtml))
# video_id 是长链接唯一变动的,提取出 uri 进行组装得到最终链接
play_addr = "https://aweme.snssdk.com/aweme/v1/play/?video_id="+uri[0]+
"&line=0&ratio=540p&media_type=4&vr_type=0&improve_bitrate=0&is_play_url=1&is_support_h265=0&source=PackSourceEnum_PUBLISH"
# 保存短视频
video = requests.get(url=play_addr, headers=headers)
with open("download.mp4", "wb") as file:
file.write(video.content)
file.close()
print("抖音无水印视频下载完成!")
我将下载的视频上传到了百度网盘,我们可以到 https://pan.baidu.com/play/video#/video?path=%2Fdownload.mp4&t=-1
看一下,我们可以看到视频中并未有水印,说明我们已经成功的利用 Python 下载了抖音无水印的视频了。
- Appium+python自动化13-native和webview切换
- HDU 2639 Bone Collector II(01背包变形【第K大最优解】)
- 专知内容生产基石-数据爬取采集利器WebCollector 介绍
- python实现字符串模糊匹配
- 动态规划之01背包详解【解题报告】
- hihoCoder #1078 : 线段树的区间修改(线段树区间更新板子题)
- HDU 2546 饭卡(01背包裸题)
- 漫谈文件系统
- AI知识搜索利器:基于ElasticSearch构建专知实时高性能搜索系统
- 【深度干货】专知主题链路知识推荐#5-机器学习中似懂非懂的马尔科夫链蒙特卡洛采样(MCMC)入门教程01
- hihoCoder #1043 : 完全背包(板子题)
- 【深度干货】专知主题链路知识推荐#7-机器学习中似懂非懂的马尔科夫链蒙特卡洛采样(MCMC)入门教程02
- hihoCoder #1038 : 01背包(板子题)
- 最小二乘法多项式曲线拟合原理与实现
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 视频高清直播RTMP视频推流组件EasyRTMP-IOS版如何使用wchar_t*类型参数?
- 简单的谷歌插件开发记录
- ElementUI的DatePicker(日期选择器)限定范围的玩法
- ThreeJS实现船行效果
- CSS实现简易翻书效果
- EggJS给Vue单页面提供静态服务
- [翻译]Pexels免费图片API文档
- 如何搭建一个高可用的服务端渲染工程
- [Go] Golang练习项目-GO语言实现插入排序
- vue3+webpack项目搭建实验
- HTML中p标签中插入div标签会发生什么
- K8S 在有赞 PaaS 测试环境中的实践
- Netty高级篇
- SQL工具集-查询会话等待
- 哈工大李志军操作系统实验1