输入的地址是一个m3u8的目录文件连接.比上一编更高一点。更好兼容。
import requests,re
from tkinter.filedialog import asksaveasfile
savef=asksaveasfile('wb')
url_ts=input('输入一个源地址:')
def f_m3u8(url_m3u8):
print('m3u8 called')
try:
r = requests.get(url_m3u8,timeout=30,headers={'Connection':'close'})
except:
try:
print('m3u8 retry')
r = requests.get(url_m3u8,timeout=30,headers={'Connection':'close'})
except:
print('m3u8 retry 2')
r = requests.get(url_m3u8,timeout=30,headers={'Connection':'close'})
list_ts=re.findall('\n.*?\.ts',r.text)
list_ts = list(map(lambda x:x[1:],list_ts))
print('ts连接数量:',len(list_ts))
return list_ts
def f_host_parse(url,url2):
list_url=url.split('/')[:-1]
list_url2 = url2.split('/')
list_url3=[]
for i in list_url:
if i == list_url2[0]:
break
else:
list_url3.append(i)
url3 = '/'.join(list_url3+list_url2)
return url3
def f_down(url_ts):
print('down called')
list_ts = f_m3u8(url_ts)
for i in list_ts:
## url_ts = url_ts.replace('index.m3u8',str(i))
url_ts = f_host_parse(url_ts,i)
try:
print('{}开始下载'.format(url_ts))
r = requests.get(url_ts,timeout=30,headers={'Connection':'close'})
except:
try:
print('{}下载失败,重新请求'.format(url_ts))
r = requests.get(url_ts,timeout=30,headers={'Connection':'close'})
except:
print('{}下载失败,重新请求2'.format(url_ts))
r = requests.get(url_ts,timeout=30,headers={'Connection':'close'})
savef.write(r.content)
savef.flush()
if __name__ == '__main__':
f_down(url_ts)