使用更簡單的方法
隨便打開一個抖音個人主頁,我選擇的是愛奇藝體育,接著右鍵檢查網頁元素,點擊network選項卡下的xhr選項,分析抓到的包
點到preview選項卡,點擊video->download_addr->url_list
發現這下面跟著的兩個網址正好是視頻的網址(根本不需要構造,只是這個網址藏的有點深,需要非常耐心的尋找),打開網址查看:
提取到這個網址的時候我以為已經結束了,但是一個大佬@金亭玉立給我發來了一篇文章提醒了我一些沒有想到的東西,在此表示感謝!
我們接著往下看,在下面的play_addr下面也有一個鏈接,這個鏈接下面的視頻就是無水印版本的視頻
ok,現在我們只要想辦法提取到它就大功告成了
我這次使用的方法中用到了jsonpath模塊,直接pip下載就可以了:
pip install jsonpath
代碼
import requests import json import jsonpath class Douyin: def page_num(self,max_cursor): #隨機碼 random_field = '00nvcRAUjgJQBMjqpgesfdNJ72&dytk=4a01c95562f1f10264fb14086512f919' #網址的主體 url = 'https://www.iesdouyin.com/web/api/v2/aweme/post/?sec_uid=MS4wLjABAAAAU7Bwg8WznVaafqWLyLUwcVUf9LgrKGYmctJ3n5SwlOA&count=21&max_cursor=' + str(max_cursor) + '&aid=1128&_signature=' + random_field #請求頭 headers = { 'user-agent':'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.129 Safari/537.36', } response = requests.get(url,headers=headers).text #轉換成json資料 resp = json.loads(response) #提取到max_cursor max_cursor = resp['max_cursor'] #遍歷 for data in resp['aweme_list']: # 視頻簡介 video_title = data['desc'] #使用jsonpath語法提取paly_addr video_url = jsonpath.jsonpath(data,'$..paly_addr') for a in video_url: #提取出來第一個鏈接地址 video_realurl = a['url_list'][1] # 請求視頻 video = requests.get(video_realurl, headers=headers).content with open('t/' + video_title, 'wb') as f: print('正在下載:', video_title) f.write(video) #判斷停止構造網址的條件 if max_cursor==0: return 1 else: douyin.page_num(max_cursor) if __name__ == '__main__': douyin = Douyin() douyin.page_num(max_cursor=0)
優點
這個方法的優點是可以省去很大一部分的分析網址的步驟,而且沒有呼叫到webdriver(可以不限制瀏覽器),速度也會有顯著提升,得到的視頻也是無水印的
不足
還是沒有解決隨機生成字串的問題,操作比較麻煩
PS:如有需要Python學習資料的小伙伴可以加下方的群去找免費管理員領取
可以免費領取原始碼、專案實戰視頻、PDF檔案等
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/51281.html
標籤:Python
下一篇:正方形棋盤格
