1.前言
爬取視頻的時候發現,現在的視頻都是經過加密(m3u8),不再是mp4或者avi鏈接直接在網頁顯示,都是經過加密形成ts文件分段進行播放。
今天就教大家如果通過Python/ target=_blank class=infotextkey>Python爬取下載m3u8加密視頻。
2.分析網頁
1.電影視頻來源
http://www.caisetv.com/
2.分析m3u8加密目錄
http://www.caisetv.com/dongzuopian/chaidanzhuanjia/0-1.html
在視頻播放的頁面,通過F12可以查看網絡數據包
https://xigua-cdn.haima-zuida.com/20210219/19948_fcbc225a/1000k/hls/index.m3u8
這里的ts就電影的加密分段視頻
https://xigua-cdn.haima-zuida.com/20210219/19948_fcbc225a/1000k/hls/
上面的m3u8鏈接掉index.m3u8后,在拼上075a34cccdd000000.ts等ts名稱就是分段視頻的鏈接
如下所示:
https://xigua-cdn.haima-zuida.com/20210219/19948_fcbc225a/1000k/hls/075a34cccdd000000.ts
通過瀏覽器把這個分段視頻下載后打開:
所以只要把所有的ts下載并合并就是完整的電影視頻!!!
3.下載ts
1.下載ts分段視頻
剛剛已經把ts的所有名稱下載下來了
接下來通過python代碼去讀取這個文件,提取出名稱,拼接鏈接后下載保存到一個文件夾里!
headers = {'User-Agent': 'Mozilla/5.0 (windows NT 6.3; Win64; x64; rv:84.0) Gecko/20100101 Firefox/84.0',}
###下載ts文件
def download(url,name):
r = requests.get(url, headers=headers)
with open(name+"", "wb") as code:
code.write(r.content)
with open("index.m3u8","r") as f:
ts_list = f.readlines()
#去掉前面沒用的信息
ts_list = ts_list[5:]
urlheader="https://xigua-cdn.haima-zuida.com/20210219/19948_fcbc225a/1000k/hls/"
count = 0
for i in ts_list:
if "#" not in i:
i = i.replace("n","")
download(urlheader+""+i,"cdzj2/"+str(count)+".ts")
count = count+1
print(count)
這樣就可以把ts文件全部下載下來,但是一個一個下載很慢,下面通過多線程下載,提升下載速度!!!
2.多線程下載ts視頻
for i in ts_list:
if "#" not in i:
i = i.replace("n","")
n = i[-7:]
threading.Thread(target=download, args=(urlheader+""+i,"cdzj2/"+str(n),)).start()
#download(urlheader+""+i,"cdzj2/"+str(count)+".ts")
通過多線程很快就可以將這些ts文件下載到本地!!!
4.合并ts
cmd合并文件
copy /b *.ts new.mp4
通過這個命令(cmd終端中運行),在含有ts文件的文件夾中就可以將ts文件合并(按名稱順序進行排列合并),并保存成new.mp4
5.總結
1.分析m3u8加密文件
2.python下載ts文件
3.cmd合并ts保存成mp4格式