使用Python将m3u8文件保存到本地
昨天在家看在线电影,结果家里网络比较卡,所以没有能愉快的看完,上班的时候想要把昨天没看完的电影下载下来,结果因为版权问题,没地方可下载,于是打开F11,在播放的时候会调用m3u8的文件,文件里有很多ts文件,我下载了其中一个,然后发现这是影片其中几秒,如果把m3u8里的所有ts文件下载回来再合并,就是一个完整的影片里。说干就干,使用Python。
代码如下
import requests
import os
import time
file = "index.m3u8"
lines = []
with open(file,'r') as f:
lines = f.readlines()
tsList = []
for line in lines:
if line[0:6] == "https:":
tsList.append(line)
i = 0
print("开始下载ts列表")
tsPath = "/ts/"
headers = {"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36"}
for url in tsList:
url = url.replace("\n", "")
tsName = url.split('/')[-1]
requests.adapters.DEFAULT_RETRIES = 99999
s = requests.session()
s.keep_alive = False
if(os.path.exists(tsPath + tsName) == False):
time.sleep(1)
print("正在下载=>"+url)
try:
urlData = requests.get(url, cert=('/Users/ths/Tools/m3u8down/client.crt', '/Users/ths/Tools/m3u8down/client.key'), headers=headers).content
with open(tsPath + tsName, "wb") as tsP:
tsP.write(urlData)
except OSError as reason:
print('下载失败=>%s'%str(url))
else:
print("存在文件跳过=>"+tsPath + tsName)
i = i+1
print("下载完成")下载完成后 合并的python如下
import requests
import os
file = "index.m3u8"
lines = []
with open(file,'r') as f:
lines = f.readlines()
tsList = []
mergeFile = open("merge.ts","wb+")
tsPath = "/ts/"
for line in lines:
if line[0:6] == "https:":
tsList.append(line)
for url in tsList:
url = url.replace("\n", "")
tsName = url.split('/')[-1]
with open(tsPath+tsName,"rb") as tsP:
mergeFile.write(tsP.read())
