無水印抖~~音video下載
正文
想下載無水印視頻當然要找到無水印的視頻的地址 于是在抖音的視頻右下方點擊分享 會彈出很多的分享的方式 這里我們選擇復制鏈接 這樣就會得到這個

這段文字里的url地址復制手機瀏覽器打開會出現(xiàn)原視頻 只是也會帶水印的,但如果要是復制到電腦打開 就會驚喜的發(fā)現(xiàn)水印不見了~
所以使用桌面瀏覽器的ua訪問這個url地址 得到的視頻是無水印的,現(xiàn)在只要找到視頻的下載地址 即可get到無水印的文件
訪問視頻地址https://v.douyin.com/dTJPrsy/
打開Network 清除所有已加載請求 然后點擊視頻播放按鈕

發(fā)現(xiàn)一個請求加載了2.9mb的資源,點開它 復制它的url地址打開
搞定 的確是無水印的視頻
這時就要開始研究這個無水印的視頻的url地址是什么時候加載的,找了大概3分鐘 發(fā)現(xiàn)竟然就在第一個請求就加載了無水印視頻的url地址
當然這里是被編碼的
復制該條請求的url地址, 打開pycharm 用requests庫請求然后解碼輸出一下,看看無水印視頻的url地址在不在這里
「不知道為什么,請求這個地址有時候會被重定向,但多試幾次還是能get到的 這里可以在異常的時候,捕獲異常 然后遞歸回去重新請求」

果然, 輕松找到,無水印視頻的地址https://www.douyin.com/aweme/v1/play/?video_id=v0d00fg10000c5e5igjc77ufqmb21cr0&line=0&file_id=30f121c6a1864953ae1ea98bda9473b3&sign=7d363a7bd7fb3cbd546516eea7420ff8&is_play_url=1&source=PackSourceEnum_AWEME_DETAIL&aid=6383
所以現(xiàn)在只要把之前的流程串起來,就可以完成使用python下載無水印視頻的需求
當我著手開始寫代碼我才發(fā)現(xiàn),谷歌瀏覽器抓包工具第一個請求不是我輸入進去的url

這時才發(fā)現(xiàn)該地址被重定向了

那勾選保留日志再請求一次
果然被重定向了 而且還是兩次
知道原因就好辦了,打開pytharm

輕松得到第一次重定向后的地址

如法炮制得到第二次重定向后的地址,比對了一下 就是那個包含了無水印url的url
所以只要用正則提取出二次重定向后的url地址中的無水印視頻的url再請求這個地址 就可以得到無水印視頻
import?requests
import?re
from?urllib.parse?import?unquote
import?time
import?os
class?GetDouYingVideo(object):
????def?__init__(self,?url):
????????self.url?=?url
????????self.headers?=?{
????????????'User-Agent':?'Mozilla/5.0?(Windows?NT?10.0;?Win64;?x64)?AppleWebKit/537.36?(KHTML,?like?Gecko)?Chrome/94.0.4606.81?Safari/537.32'}
????????self.counter?=?0
????????self.get_video_id()
????def?get_video_id(self):
????????if?self.counter?==?0:
????????????print('重定向作品地址ing?請稍后...')
????????response0?=?requests.get(self.url,?headers=self.headers,?allow_redirects=False)
????????response1?=?requests.get(re.search(r'\"(.+)\"',?response0.text).group(1),?headers=self.headers,
?????????????????????????????????allow_redirects=False)
????????response2?=?requests.get(re.search(r'\"(.+)\"',?response1.text).group(1),?headers=self.headers)
????????#?print(unquote(response2.text))
????????if?self.counter?!=?0:
????????????print(f'獲取視頻文件地址失敗?正在{str(self.counter)}次重試')
????????else:
????????????print('獲取視頻地址ing?請稍后...')
????????try:
????????????#?因為請求這個地址有可能會被再次重定向?沒辦法?只得在失敗后遞歸回來?再次請求
????????????result?=?re.search(r'"playApi":"http://(.+)","bitRateList"',?unquote(response2.text)).group(1)
????????????response3?=?requests.get('https://'?+?result,?headers=self.headers)
????????????name?=?re.search('(.*) ',?response2.text).group(1)
????????????with?open(name?+?'.mp4',?'wb')?as?f:
????????????????f.write(response3.content)
????????except?AttributeError:
????????????self.counter?+=?1
????????????time.sleep(3)
????????????self.get_video_id()??
if?__name__?==?'__main__':
????GetDouYingVideo(input('請輸入要下載的視頻地址'))
????print('下載無水印視頻成功!')
????os.system('pause')
