• 爬虫
  • 视频处理
  • 文件处理
  • 1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    # -*- coding: utf-8 -*-

    import os
    import requests
    # import subprocess
    from time import sleep
    from multiprocessing import Pool

    # 创建文件夹
    def mkdir(path):
    isExists = os.path.exists(path)
    if not isExists:
    os.makedirs(path) # 不存在则创建
    print('文件夹创建成功')
    else:
    print('文件夹已存在')
    # 循环加零并转换数字为字符串
    def forNum(n):
    n = int(n)
    if n < 10:
    a = '00000' + str(n)
    else:
    if n < 100:
    a = '0000' + str(n)
    else:
    if n < 1000:
    a = '000' + str(n)
    else:
    if n < 10000:
    a = '00' + str(n)
    else:
    if n < 100000:
    a = '0' + str(n)
    else:
    if n < 1000000:
    a = str(n)
    return a
    # 分离m3u8文件 修改下载文件为 | 提取下载文件名称
    def editM3u8(url_m3u8):
    f = open(url_m3u8, 'r', encoding='utf-8')
    # 分解文件行数据
    text_list = f.readlines()
    # 下载列表
    files = []
    # 提取下载文件列表
    for i in text_list:
    if i.find('#EX') == -1:
    files.append(str.strip(i))
    f.close()
    return files
    # 调用线程下载文件
    def download_init(files, tit_link):
    # 循环列表下载
    # 多线程
    if __name__ == "__main__":
    pool = Pool(4)
    for n in range(0, len(files)):
    a = forNum(n)
    url = tit_link + str(files[n])
    pool.apply_async(download, (url, a))
    pool.close()
    pool.join()
    # 单线程
    # for n in range(0, len(files)):
    # # 数字加零并转换成字符串
    # a = forNum(n)
    # url = tit_link + str(n) + '.ts'
    # # print(url, a)
    # # 下载文件
    # download(url, a)
    # 下载文件
    def download(url, num):
    # print(num + "开始下载")
    headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36"
    }
    print(url)
    response = requests.get(url, headers=headers)
    f = open("./ts/" + num + '.ts', "wb")
    f.write(response.content)
    f.close()
    print(num + "下载完成")
    # 删除文件
    def delFile(file):
    os.remove(file)
    # m3u8地址
    url_m3u8 = './ts/boss.m3u8' # 文件路径
    tit_link = "https://baikevideo.cdn.bcebos.com/media/mda-XzWxczOmPXU0VoI4/" # 下载前缀
    mkdir('./ts/')
    # 提取m3u8文件
    files = editM3u8(url_m3u8)
    # 启动下载进程
    download_init(files, tit_link)
    # sleep(2)
    # 合并视频命令
    # subprocess.Popen('cd ts && copy/b *.ts video.mp4', shell=True)
    # 在windows系统下面,直接可以使用:copy/b *.ts video.mp4 把所有ts文件合成一个mp4格式文件