抖音上有很多有意思的视频,常想用来做屏保或者下载保存。但从抖音中操作的视频会有个很 low 的水印。
分析了抖音视频链接的请求流程,大致分为以下几步:
def getRewirte(url):
headers = {
'User-Agent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A372 Safari/604.1'
}
res = requests.get(url,headers=headers,allow_redirects=False)
locationUrl = res.headers['location']
return locationUrl
def downvideo(id,url,now):
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/22.0.1207.1 Safari/537.1'
}
res = requests.get(url,verify=False,headers=headers)
with open(now+'/html.txt','wb') as f:
f.write(res.content)
new_file = open(now+'/html.txt')
data = new_file.readlines()
new_file.close()
for line in data:
if 'playAddr:' in line:
playurl = re.findall(r'playAddr:(.+?)\,', line)[0]
playurl = playurl.replace('playwm', 'play')
playurl = playurl.replace("\"", "")
postHeaders = {
'User-Agent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A372 Safari/604.1'
}
locationResponse = requests.get(playurl,verify=False,headers=postHeaders,allow_redirects=False)
locationUrl = locationResponse.headers['location']
videoRes = requests.get(locationUrl,headers=headers,verify=False)
try:
with open(now+'/video.mp4', 'wb') as f:
f.write(videoRes.content)
f.flush()
setTaskStatus(id,'3',(now+'/video.mp4').replace('app/',''))
print("下载完成!!!!")
except:
setTaskStatus(id, '4', '')
print("下载失败!!!!")
根据以上步骤,我们可以完成核心的爬虫脚本了。
但每次都要把手机的分享链接搞到电脑上,再去运行脚本,未免太费劲了。
考虑到一切都是手机上的操作,最终的视频也是手机看,我决定用微信小程序来完成我的工具设计。
大致的架构设计如下:
小程序已经上架,可以愉快的玩耍了,需要可以微信扫码使用。
使用:
点击 “下它”,会弹出权限提醒,允许后就可下载保存到相册了哦。