原文鏈接:https://blog.csdn.net/Cool_breeze_bin/article/details/113356288?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-17.control&dist_request_id=1328602.30574.16150346664273767&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-17.control
聲明:此教程只用於學習,不可商用
手機操作
首先手機打開抖音,找到作者主頁:
我們以天王“劉德華”抖音為例。
第一步,點擊右上角“···”,如下點擊分享:
然后如下圖所示,復制鏈接:
電腦操作
將我們在手機上復制的鏈接通過瀏覽器打開:
我們向下划,發現並沒有真正的頁面內容
這是因為抖音最新加入了網頁隱藏功能,我們打開解析頁也可發現相關內容只有大概框架,並無真實內容。
對於這一問題,我們反復刷新網頁即可(后面代碼實現部分也有對應解決方案):
通過刷新成功后的上圖,我們可以知道這是正確的解析頁。
我們接下來對細分內容進行分析即可。
首先展開“aweme_list”列表進行查看,我們很容易發現:
一共有3行數據,也就是3條視頻,而“desc”對應的參數就是抖音視頻的題目。
我們再打開其中一個標簽進行深究,發現如下圖所示:
出現“video”標簽,通過英文翻譯也就是“視頻”的意思,
我們通過此標簽繼續深挖,其下一級標簽如下圖所示:
我們又可以找到“play_addr_lowbr”的標簽,進行展開后如下圖所示:
通過上圖展開“url_list”標簽,即視頻的訪問地址。
我們只需其中的第一條鏈接即可,將其復制並使用瀏覽器打開,如下圖:
我們看到了無水印的視頻,也就是我們需要的視頻。
網頁分析結束,接下來上代碼。
代碼部分
需要的相關python庫為:requests和json兩個庫
import requests import json # 抖音視頻的URL url="https://www.iesdouyin.com/web/api/v2/aweme/post/?sec_uid=MS4wLjABAAAAU7ibxriLF-GSBF5QKa1Op9hxcMAPVmzmXwXqqvMfrhs&count=21&max_cursor=0&aid=1128&_signature=rrFSDQAAzq.dR1hiGSYhIa6xUh&dytk=" headers = { 'User-Agent':"Mozilla/5.0 (Macintosh; Intel Mac OS X 11_1_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36" } #調用requests中的get獲取抖音作者主頁的網頁鏈接 r = requests.get(url=url, headers=headers,stream=True) #輸出訪問狀態,如為<200>即為訪問成功 print("初始訪問狀態:",r) #使用json解析獲取的網頁內容 data_json = json.loads(r.text) #使用json解析網頁后,data_json的內容為dict格式,我們可以通過以下方式查看健名 print(data_json.keys()) #pd參數為布爾類型參數,data_json['aweme_list'] == []是為了判斷'aweme_list'下一級內容是否為空,為空則為True pd = data_json['aweme_list'] == [] #接下來使用循環來解決我們之前所提到的“隱藏內容”問題 while pd == True: #只要“aweme_list”下一級內容為空,則反復訪問作者主頁鏈接,直到成功顯示隱藏內容為止跳出循環 r = requests.get(url=url, headers=headers,stream=True) data_json = json.loads(r.text) pd = data_json['aweme_list']== [] #下一級內容不為空,則訪問下一級標簽 for i in range(len(data_json['aweme_list'])): print(data_json['aweme_list'][i]['video']['play_addr_lowbr']['url_list'][0])
上面所講的url即解析頁中“Headers”下的“requests url”(復制粘貼即可):
“headers”內容即“Headers”下“Request Headers”中的“user-agent”:
上面代碼運行結果如下圖所示:
通過上圖,我們發現已經成功得到該作者所有作品鏈接。
接下來就是下載到自己的電腦:
# 我們要保存視頻文件的主要路徑 path = "/··/··/Desktop/" for i in range(len(data_json['aweme_list'])): #url_1為我們獲取的視頻鏈接 url_1 = data_json['aweme_list'][i]['video']['play_addr_lowbr']['url_list'][0] #t為我們獲取的視頻標題 t = data_json['aweme_list'][i]['desc'] # requests發送瀏覽器發送get請求,得到數據 r = requests.get(url=url_1, headers=headers,stream=True) print(r) #輸出r訪問狀態 # 獲取數據的二進制長度 reponse_body_lenth = int(r.headers.get("Content-Length")) # 打印數據的長度 print("視頻的數據長度為:", reponse_body_lenth) #path_1為完整文件保存路徑 path_1 = path+t+'.mp4' # 保存抖音視頻mp4格式,二進制讀取 with open(path_1, "wb") as xh: # 先定義初始進度為0 write_all = 0 for chunk in r.iter_content(chunk_size=1000000): write_all += xh.write(chunk) # 打印下載進度 print("下載進度:%02.6f%%" % (100 * write_all / reponse_body_lenth))
運行代碼:
如上圖所示,下載完畢后,我們便可在桌面找到爬取的無水印的抖音視頻文件(我的path參數指向桌面,路徑可自行修改)