当前位置:   article > 正文

用python下载ts视频_访问的ts怎么下载

访问的ts怎么下载

首先找一个视频网站,分析网站:
在这里插入图片描述
找到这个iframe的src:

在这里插入图片描述

过去看看:
在这里插入图片描述
点击观看就发现了多了些东西:在这里插入图片描述
具体分析下:
在这里插入图片描述
简单猜测下这个key.key一定是解密的
在这里插入图片描述
现在视频服务器地址列表有了,解密的密码有了。可以直接爬视频下来了:

import os
import requests
import re
import time
#视频视频地址
pathUrl = 'https://video.dious.cc/20200617/fYdT3OVu/1000kb/hls/index.m3u8'
#整个文件夹装
dir = "./dpcq/"

if not os.path.exists(dir):
    os.makedirs(dir)


def getVideo():
    headers = {
        "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36",
    }
    res = requests.get(pathUrl, headers=headers)
    res.encoding = res.apparent_encoding
    #拿取视频的全部路径列表
    urlList = re.findall(r'\n(.*\.ts)', res.text)
    print(len(urlList))
    count = 0
    for item in urlList:
    #慢慢拿取,假装人为,一共395个文件,没加sleep,我只拿取了170个,加了全拿下来了
        time.sleep(6)
        count += 1
        res2 = requests.get(item, stream=True, headers=headers)
        res2.encoding = res2.apparent_encoding
        print(res2.status_code)
        with open(dir + 'demo{}.mp4'.format(str(count)), "wb") as mp4:
        #边拿边从内存写到硬盘里
            for chunk in res2.iter_content(chunk_size=1024 * 1024):
                if chunk:
                    mp4.write(chunk)


if __name__ == '__main__':
    getVideo()

  • 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

给爷下来!!

在这里插入图片描述
但是。。放不起:
在这里插入图片描述
加个解密就完事了:

import os

from Crypto.Cipher import AES
from Crypto.Util.Padding import pad

# 之前key.key文件里的数字  '722c55ff989ded9a'
cryptorObj = AES.new(bytes('722c55ff989ded9a'.encode()), AES.MODE_CBC, bytes('722c55ff989ded9a'.encode()))

dir = './dpcq/'

if __name__ == "__main__":
    w = open('./video.mp4', "wb")
    files = os.listdir(dir)
    # 这里我是demoXXX.MP4命名的, os.listdir读取时随机的,sort排个序
    files.sort(key=lambda x: int(x.split('demo')[1][:-4]))
    print(files)
    for item in files:
        fileObj = open(dir + '{}'.format(item), 'rb')
        fc = fileObj.read()
        # 最开始没加这个判断会报错 Data must be padded to 16 byte boundary in CBC mode 网上查了下解决方法:
        if fc and (len(fc) % 16) != 0:
            # EXT-X-KEY:METHOD=AES-128的加密方式,对应加密的key大小16byte,对应AES.MODE_CBC,
            # 如果视频大小不是16的倍数,解密时出现:ValueError(“Data must be padded to %d byte boundary in CBC mode” % self.block_size)
            fc = pad(fc, 16)  # 按16的倍数补齐长度
        w.write(cryptorObj.decrypt(fc))

  • 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

在这里插入图片描述
over

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/知新_RL/article/detail/154581
推荐阅读
相关标签
  

闽ICP备14008679号