|前言
许多小伙伴在刷抖音的时候看到自己喜欢的,或者有意义视频,想保存到自己的手机上,可是APP的保存到本地是带水印的.自己心心念念想要留下来的视频,当然是不希望下载的视频有水印,我们看到网上有很多解析抖音无水印视频的网站,他们是怎么做到的?其实很简单,今天就讲解如何手动解析
|手动步骤如下
复制想要解析的视频链接到电脑的浏览器上打开(这里演示用的是chrome,其他浏览器也大同小异.)按F12打开或者右键审查元素
选择Network这个标签,接着点亮手机图标(模拟手机请求页面就可以显示视频了)然后按【F5】刷新就显示手机版网页了
在搜索框中搜索【item】点击我框选的这行,然后这行的右边会出现一个框框,依次展开item_list→0→video→play_addr→url_list
到浏览器地址框粘贴,别着急回车键访问,把url里的playwn改成play然后访问,这时候打开有可能会是空白。
然后继续按F12打开或者右键审查元素,把手机图标点亮然后f5刷新就出来了
右键视频另存为即可下载了~
|Python实现
作为一个专(la)业(ji)程序员,能用代码解决的事情,为什么要手动?
前边浏览器需要修改为手机访问,但是python只需在request请求头添加上访问方式即可
headers = {
'User-Agent': 'User-Agent", "Mozilla/5.0 (iPhone; CPU iPhone OS 12_1_4 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/16D57 Version/12.0 Safari/604.1',
}
这里我们模拟Iphone手机
然后使用requests带上请求头,访问我们抖音的url
url = 'https://v.douyin.com/JFmwXkr/'
response = requests.get(url, headers=headers)
上边我们浏览器打开抖音的链接之后发现浏览器的链接被重定向了另外一个链接
https://www.iesdouyin.com/share/video/6847881060131278095/?region=CN&mid=6847881063209945869&u_code=5k45ja3i&titleType=title&utm_source=copy_link&utm_campaign=client_share&utm_medium=android&app=aweme
这个我们通过浏览器地址栏可以看到,所以必然是难不倒python,requests可以获取到这个链接的哦
now_url = response.url
然后我们分析下一步,我们是通过搜索item请求,从响应里面找到了无水印的链接.下面贴出来item请求的链接
https://www.iesdouyin.com/web/api/v2/aweme/iteminfo/?item_ids=6847881060131278095&dytk=
我们发现这个链接有两个参数,多年经验来看这个参数肯定是动态的,我们想要模拟请求,肯定要取到这两个参数,dytk是空的,所以我们先只找item_ids
细心的小伙伴已经发现了,item_ids就是上面重定向之后链接里面video后面的数字,nice,我们通过正则把id取出来,百度之后发现有些视频dytk也是需要的,所以也要取出来
pat_item_ids = '/video/(.*?)/'
item_ids = re.compile(pat_item_ids, re.S).findall(now_url)
pat_dytk = 'dytk: "(.*?)"'
dytk = re.compile(pat_dytk, re.S).findall(response.text)
然后我们拼接成参数,请求这个地址,直接把返回的数据转成json
url = 'https://www.iesdouyin.com/web/api/v2/aweme/iteminfo/'
params = {
'item_ids': item_ids,
'dytk': dytk
}
response = requests.get(url, headers=headers, params=params).json()
到这一步就简单了,我们已经成功获取了item那个请求返回的数据,无水印的url就在这个json里面,我们直接把他取出来,然后把playwm替换成paly
true_url = response['item_list'][0]['video']['play_addr']['url_list'][0]
true_url = true_url.replace('playwm','play')
细心的小伙伴肯定又发现了取到真实url之后打开视频又重定向了,所以最终的真实地址肯定是重定向的这个地址,我们继续请求,把最终地址取出来
response = requests.get(true_url, headers=headers)
true_url = response.url
最终这个true_url就是无水印视频的链接,复制到浏览器打开就可以下载了
|完整代码
import re
import requests
headers = {
'User-Agent': 'User-Agent", "Mozilla/5.0 (iPhone; CPU iPhone OS 12_1_4 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/16D57 Version/12.0 Safari/604.1',
}
url = 'https://v.douyin.com/JFmwXkr/' # 抖音分享的链接,自行更改
response = requests.get(url, headers=headers)
now_url = response.url
pat_item_ids = '/video/(.*?)/'
item_ids = re.compile(pat_item_ids, re.S).findall(now_url)
pat_dytk = 'dytk: "(.*?)"'
dytk = re.compile(pat_dytk, re.S).findall(response.text)
url = 'https://www.iesdouyin.com/web/api/v2/aweme/iteminfo/'
params = {
'item_ids': item_ids,
'dytk': dytk
}
response = requests.get(url, headers=headers, params=params).json()
true_url = response['item_list'][0]['video']['play_addr']['url_list'][0]
true_url = true_url.replace('playwm','play')
response = requests.get(true_url, headers=headers)
true_url = response.url
print(true_url)
提示缺少模块,安装requests
pip install requests
码字不易,欢迎大家收藏评论以及投币哦~
楼下那个发成品的大家尽量不要用,挺简单的程序最大几个mb,他的下载来100MB~见仁见智各位~