下載咪咕視訊
阿新 • • 發佈:2022-01-15
最近想看紀錄片《綠色星球》,剛剛好在咪咕網站上找到這個視訊。就萌生了一個想法把這個視訊下載下來。
網址:https://m.hebeilaibang.com/bf-174799-1-1.html
網頁分析工具,很容易找到m3u8檔案。右邊紅框,框出來的就是一個個ts視訊檔案。統計了下時長為1:30:02的視訊,拆分成了4000多個小的ts視訊檔案。
那思路就是:
步驟1. 下載,開啟m3u8檔案。提取裡的ts檔案。
步驟2.下載ts檔案,合併為完整的視訊檔案。
步驟1程式碼:有些人就會問為啥不用requests,一開始就是使用的requests但是老是提示證書問題(ssl.SSLCertVerificationError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed),短時間內沒有找到解決這個證書問題的辦法. 反正目標就是要下載ts檔案,能下載下來就行,這裡就直接使用了python的wget包。
先看看下載下來的m3u8檔案,是這個樣子的。
#EXTM3U #EXT-X-VERSION:3 #EXT-X-TARGETDURATION:2 #EXT-X-PLAYLIST-TYPE:VOD #EXT-X-MEDIA-SEQUENCE:0 #EXTINF:1.303, /VMDIR4CAA791091D21D23E63637080226F370/20220111/fRia4tyb/2850kb/hls/NhAPlV8p.ts #EXTINF:1.2, /VMDIR4CAA791091D21D23E63637080226F370/20220111/fRia4tyb/2850kb/hls/PKkwv5hd.ts #EXTINF:1.2, /VMDIR4CAA791091D21D23E63637080226F370/20220111/fRia4tyb/2850kb/hls/Ux79JcrZ.ts #EXTINF:1.2, /VMDIR4CAA791091D21D23E63637080226F370/20220111/fRia4tyb/2850kb/hls/HAhapIrq.ts #EXTINF:1.2, /VMDIR4CAA791091D21D23E63637080226F370/20220111/fRia4tyb/2850kb/hls/YDl5LAiY.ts #EXTINF:1.2, /VMDIR4CAA791091D21D23E63637080226F370/20220111/fRia4tyb/2850kb/hls/12fNJKSm.ts #EXTINF:1.2, /VMDIR4CAA791091D21D23E63637080226F370/20220111/fRia4tyb/2850kb/hls/plbmFStJ.ts
ts結尾的檔案是我們需要下載下來的。拼接完整的網址就可以下載下來了。這裡還有個問題,就是這些ts檔案命名是亂碼的(NhAPlV8p.ts)。需要給他整理個編號。
import wget ts_list = [] web_url = "https://cdn2.bzjupinhang.com:65" def read_file():#只留下ts檔案放到ts_list列表中。 with open("index.m3u8") as files: for line in files: # print(type(line)) ifline.endswith(".ts\n"): ts_list.append(line.strip("\n")) def download_ts():#拼接下載ts檔案的網址,使用wget下載,並對下載下來的視訊按順序進行編號。 for i in range(3695,len(ts_list)): print(web_url+ts_list[i]) ts_file = "{}.ts".format(i) wget.download(web_url+ts_list[i], out=ts_file) read_file() download_ts()
執行這段指令碼就是開始下載了。拼網速。下載完成以後進行合併。
import os def heBingTsVideo(download_path,merge_path): all_ts = os.listdir(download_path) with open(hebing_path, 'wb+') as f: for i in range(len(all_ts)): ts_video_path = os.path.join(download_path, "{}.ts".format(i)) f.write(open(ts_video_path, 'rb').read()) print("合併完成!!") download_path = "D:\\movie" merge_path = "D:\\movie\\綠色星球.mp4" heBingTsVideo(download_path,merge_path)