咱们平时在刷抖音的时候, 经常会看到有些优秀的内容, 想要保留下来。然而尴尬的事情显现了,要么下载的视频有水印,要么视频不准许下载,这个时候是不是只能点赞兴叹。不碍事,今天咱们运用 Python 来循序渐进将视频下载下来,况且无水印。
先看一下运行结果:
下载视频
运行完成后,在工程文件夹能够看到,视频已然下载到本地,并且无水印
下载后的照片
接下来, 咱们仔细讲解一下下载思路,其中运用了requests模块请求网络。 获取视频位置
获取位置
点击电脑端分享, 选取复制链接(手机端一样的操作),而后就能获取到一下内容
3.56 h@O.xs dnd:/ 11/09 评论区抽一个人,没奖励,纯抽# 我的女团阵容 # 魔性律动舞 https://v.douyin.com/i8Br9jbr/ 复制此链接,打开Dou音搜索,直接观看视频!
运用正则提取分享链接中的短网址 share_url = input("请粘贴视频位置: ")
match = re.search(r"https://.*/", share_url)抖音分享的链接中是短连接,直接拜访得到的内容并不是实质的页面。因此呢咱们必须分析从短连接到实质视频页面的是怎样流转的。 分析短链接位置转
短链接是将较长的URL转换为一个较短的,易于记忆和分享的链接。
运用浏览器拜访短连接位置,发掘一共经过了两次重定向, 才最后跳到了实质的视频位置。
网址重定向
因此呢必须编写一个办法, 获取每次重定向的位置,多次转,咱们能够递归调用,直到返回None。 # 获取重定向位置
def __get_redirect_url(url):
res = requests.get(url)
return res.history[0].headers[Location] iflen(res.history) >0 else None获取到重定向页面后,起始分析,页面中是怎样获取视频播放位置
打开浏览器掌控台在网络请求发掘,视频链接是经过页面加载完成后,发起的XHR获取的, 其中请求param中aweme_id为视频id
获取视频网址
晓得请求后, 咱们就能够构建链接请求,其中请求位置是固定的,请求参数动态传入 res = requests.get(https://www.douyin.com/aweme/v1/web/aweme/detail/,
params=_params, cookies=_cookies,
headers=_headers)请求接口返回的是JSON数据,解析响应结果, 提取视频网址(响应结果其中包括了区别分辨率的视频,感兴趣的能够探索一下,这儿运用默看清晰度) video_url = res.json()["aweme_detail"]["video"]["play_addr"]["url_list"][0]获取视频位置后,起始构建下载视频请求, 并将其保留文件中with requests.get(video_url, headers={
"Referer": video_url,
user-agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36,
}, timeout=60) as r, open("./video.mp4", mode="wb") as file:视频下载过程中可能会必须等待有些时间,能够单独起一个线程去下载。
在以上获取视频位置的时候, cookie 中需要设置ttwid 和 s_v_web_id (两个值能够从浏览器 cookie 中获取), 否则, 很可能会触发验证码或请求到空数据。网上有非常多资料解释这两个值,感兴趣的能够自动搜索,本文不做太多描述。(以上方式在2023年12月16日运用有效,后续倘若运用反常,能够评论区踢我以下)
有必须源代码的能够点赞,评论一起学习。
#文案首发挑战赛#
|