当前位置: 首页 > 工具软件 > M3O > 使用案例 >

爬取M3U8文件支持的网页在线播放资源(AES-128加密)

吕和风
2023-12-01
import os
import requests
import re
from multiprocessing import Pool
from Crypto.Cipher import AES

# 这个是你要保存的文件位置,可自定义,记得\\这个不要丢了,写这里是方便下面代码中不写。
path = r'E:\newfilm\\'
# 打开能播放你喜欢资源的网址,按F12,找到浏览器里XHR选项里m3u8文件,右键复制网址,记得选response 里面很多ts网址的。
m3u8 = 'https://youku-com.jjyl12349.com/20210517/BlYZo7Kz/1000kb/hls/index.m3u8'


def get_key(m3u8):
    response = requests.get(m3u8).text
    key_link = re.search('URI=\"(.*?)\"', response).group(1)
    key = requests.get(key_link).text.encode('utf-8')
    crypto = AES.new(key, AES.MODE_CBC, key)
    return crypto


def get_tslist(m3u8):
    response = requests.get(m3u8).text
    ts_list = re.findall('https:.*?\.ts', response)
    return ts_list


crypto = get_key(m3u8)


def down_ts(ts):
    res = requests.get(ts).content
    with open(path + ts.split('/')[-1], 'wb')as f:
        f.write(crypto.decrypt(res))


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__':
    ts_list = get_tslist(m3u8)
    pool = Pool(10)#这里的数字10可以修改为你电脑核心的2倍左右,比如你电脑是8核心的,可以设置为16.
    pool.map(down_ts, ts_list)#执行批量下载
    rename_ts(ts_list)#批量命名按顺序排列,防止合成的时候影片不连续。
    hebing('地球脉动第二季第一集')#合成mp4文件,删除其他的ts文件。

 类似资料: