在网上看过一些相关教程,有一些解析抖音无水印视频的教程。说是教程,其实大部分都是提供接口,或引流或卖接口。究竟是怎么实现的去水印,就小小地研究了一下。

1.浏览器分析

从抖音短视频中分享一段视频。可以得到

我开始期待夏天和你一起吃西瓜,就像期待冬天和你一起吃火锅,其实我对夏天冬天没有特别喜欢,只是期待和你一起 https://v.douyin.com/cgLgew/ 复制此链接,打开【抖音短视频】,直接观看视频!

我将这段文字中的链接部分复制下来,在浏览器打开。并使用开发者工具调试(F12或鼠标右键)。

【Python爬虫】抖音去水印_3d

可以看到在video标签中存在一个链接。

https://aweme.snssdk.com/aweme/v1/playwm/?s_vid=93f1b41336a8b7a442dbf1c29c6bbc5672cdb2cfaefa126d6cf6ef5532d6940d8202ba55baeffa88df4f525e02e3d9d4a2ac45fb4360d6d7d7735806d8db4a00&line=0

复制该链接在浏览器打开:

【Python爬虫】抖音去水印_5e_02

 

 发现仍然是带水印的视频,而且页面重定向成了新地址:

http://v26-dy.ixigua.com/6687f6c2701783a302bb486ec3398aad/5e906717/video/tos/cn/tos-cn-ve-15/479476156a58407e939bc3535e4b584a/?a=1128&br=0&bt=2078&cr=0&cs=0&dr=0&ds=3&er=&l=2020041019310601001404601506236F71&lr=aweme&qs=0&rc=ajZvZDhsNHM1dDMzZmkzM0ApNDRpM2k4O2Q6N2Y1ZDs3ZGdyMmYwaGphXjNfLS02LS9zc182LTQuLi00LzMtL2BiLzQ6Yw%3D%3D&vl=&vr=

分析之前的地址:

https://aweme.snssdk.com/aweme/v1/playwm/?s_vid=93f1b41336a8b7a442dbf1c29c6bbc5672cdb2cfaefa126d6cf6ef5532d6940d8202ba55baeffa88df4f525e02e3d9d4a2ac45fb4360d6d7d7735806d8db4a00&line=0

包含playwm 后面的wm是什么意思?(wm就是WaterMark,水印的意思),将playwm改成play,并将请求的User-Agent修改为手机。便得到了无水印版本的视频。手动操作部分结束!

【Python爬虫】抖音去水印_2d_03

 

 

2. 代码实现

Github:

 

import requests,re
 
share = input("请输入你要去水印的抖音短视频链接:")
pat = '(https://v.douyin.com/.*?/)' 
url = re.compile(pat).findall(share)[0]  #正则匹配分享链接
headers = {
    'user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3904.108 Safari/537.36'
}
r = requests.get(url, headers=headers)
pat = 'playAddr: "(.*?)",'
play = re.compile(pat).findall(r.text)[0].replace("playwm", "play")
headers = {
    'user-agent': 'Android',
}
r = requests.get(play, headers=headers, allow_redirects=False)
playurl = r.headers['location']

#自定义文件名保存短视频
name = input("===>正在下载保存视频,请输入视频名称:")
video = requests.get(url=playurl, headers=headers)
with open(name+".mp4", 'wb')as file:
    file.write(video.content)
    file.close()
    print("===>视频下载完成!")

#完事后退出程序
input("===>press enter key to exit!")

为了方便使用,我打包成了EXE文件