import multiprocessing
import os
import requests
import re
from multiprocessing import Pool
# 打开能播放你喜欢资源的网址,按F12,找到浏览器里XHR选项里m3u8文件,右键复制网址,记得选response 里面很多ts网址的。
path = r'E:\newfilm1\\' # 这个是你要保存的文件位置,可自定义,记得\\这个不要丢了,写这里是方便下面代码中不写。
requests.DEFAULT_RETRIES = 5 # 增加重试连接次数
s = requests.session()
s.keep_alive = False # 这一段是度娘所得,免得报错
def get_tslist(m3u8):
response = requests.get(m3u8).text
ts_list = re.findall('.*?\.ts', response) # 此处正则可能会修改,看具体情况。
return ts_list
def check_file(ts_list):
filelist = os.listdir(path)
shengyu_list = ts_list[:]
# TS文件前面的前缀,此处偷懒了,看了直接加的,反正都一样
wangzhi = 'https://m3u8ipay.vodfile.m1905.com/202112051105/509893e13ee57f542ab74e5b63ce8991/movie/2019/10/21/m2019102173N3LYNUOAN0R9O1/'
for file in filelist:
if file in ts_list:
shengyu_list.remove(file)
return shengyu_list
def down_ts(ts):
# TS文件前面的前缀,此处偷懒了,看了直接加的,反正都一样
qianzhui = 'https://m3u8ipay.vodfile.m1905.com/202112051105/509893e13ee57f542ab74e5b63ce8991/movie/2019/10/21/m2019102173N3LYNUOAN0R9O1/'
res = requests.get(qianzhui + ts).content
try:
with open(path + ts, 'wb')as f:
f.write(res)
except Exception as e:
print('出现错误:%s', e.args)
def rename_ts(ts_list):
dict = {}
k = 1
for ts in ts_list:
ts = ts.split('/')[-1]
dict[ts] = '{:04d}'.format(k) + '.ts'
k += 1
for file in os.listdir(path):
if file in dict.keys():
os.rename(path + file, path + dict.get(file))
def hebing(name):
COMD1 = f'copy /b {path}*.ts {path}{name}.mp4'
COMD2 = f'del {path}*.ts'
os.system(COMD1)
os.system(COMD2)
if __name__ == '__main__':
m3u8 = 'https://m3u8ipay.vodfile.m1905.com/202112051105/509893e13ee57f542ab74e5b63ce8991/movie/2019/10/21/m2019102173N3LYNUOAN0R9O1/585D07D3F9E4812C763078843.m3u8'
ts_list = get_tslist(m3u8)
filelist = check_file(ts_list) # 防止由于网络或者资源的原因,没下载成功可以再次运行继续下载。
pool = Pool(8)
pool.map(down_ts, filelist) # 多线程下载
pool.close()
pool.join()
rename_ts(ts_list) # 批量命名按顺序排列,防止合成的时候影片不连续。
hebing('让子弹飞测试版') # 合成mp4文件,删除其他的ts文件。
爬m3u8文件类电(无AES-128加密)
最新推荐文章于 2024-05-03 11:08:18 发布