爬m3u8文件类电(无AES-128加密)

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文件。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值