介绍python3.6根据m3u8下载mp4视频

  • 时间:
  • 2285人关注

这篇文章主要为大家详细介绍了python3.6根据m3u8下载mp4视频,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,另外这篇文章主要知识点是关于python3.6、m3u8、mp4、Python的内容,如果大家想对相关知识点有系统深入的学习,可以参阅以下电子资料:

教程详情电子资料
  • 教程类别:Python
  • 编辑整理:融夏柳
  • 教程字数:3200字节
  • 阅读时间:大概8分钟
  • 下载本教程(DOC版)
  • Python3.6零基础入门与实战
  • 需要下载某网站的视频,chrome浏览器按F12打开开发者模式,发现视频链接是以"blob:http"开头的链接,打开这个链接后找不到网页,网上查了下,找到了下载方法,在这里做个记录,如果有错误,欢迎指出。

    程序在Windows 10下运行,不过Linux应该也没问题。

    使用到的有re模块,requests模块和Crypto模块,其中requests模块和Crypto模块如果没安装可以使用pip命令安装。(Crypto模块安装感觉比较坑,我是从anaconda里拷贝了一份)

    下面开始正题:

    注:以下使用的m3u8文件所在的网站是自己搭建用来测试的,链接可能会失效。

    首先在chrome的network里找到一个m3u8文件的请求,可以通过它下载视频。

    python3.6根据m3u8下载mp4视频

    通过Preview可以看到m3u8文件的内容。

    python3.6根据m3u8下载mp4视频

    这里m3u8文件比较重要的内容有两个。

    一个是URI后面的链接,这个是加密和解密的秘钥,如果m3u8文件里有这个URI,那么这个视频就是经过了加密的,加密的方法可以看URI前面,这里是AES-128加密算法。

    另一个是以ts结尾链接,这个是视频片段,如果是没进行加密的,可以直接打开这个链接下载视频片段,下载下来的是后缀为ts的文件,一般可以直接播放,不过时间很短。如果是加密过的,下载后播放会提示视频文件已损坏。

    知道这些后,就可以进行下载了,先获取m3u8文件的内容,然后解析出秘钥(key)和ts的链接,然后下载key对每一个ts进行解密,保存到一个mp4文件里。

    下载用的是requests模块,解析key和ts的链接是用的re模块,解密用的是Crypto模块。

    使用Crypto需要注意三个地方,一个是安装和导入,第二个是Crypto里AES.new的参数,第三个是decrypt方法的参数。下面先看代码。

    导入模块:

    import re
    import requests
    from Crypto.Cipher import AES

    初始设置:

    # 保存的mp4文件名
    name = "dream_it_possible.mp4"
    
    # m3u8文件的url
    url = "http://www.jiuyi.info/static/video/secret/dream_it_possible.m3u8"
    
    
    # 请求头,不一定需要,看网站更改
    headers = {
     "Referer": "http://www.jiuyi.info/video/dream_it_possible",
     "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 "
         "(KHTML, like Gecko) Chrome/71.0.3578.80 Safari/537.36",
     }

    获取m3u8文件内容,并解析出key和ts文件的url。

    # 获取m3u8文件内容
    r = requests.get(url)
    
    # 通过正值表达式获取key和ts的url
    k = re.compile(r"http://.*?\.key") # key的正则匹配
    t = re.compile(r"http://.*?\.ts")  # ts的正则匹配
    key_url = k.findall(r.text)[0]  # key的url
    ts_urls = t.findall(r.text)  # ts的url列表

    下载并解密ts文件,保存为mp4文件。

    # 下载key
    key = requests.get(key_url).content
    
    # 解密并保存ts
    for ts_url in ts_urls:
    
     ts_name = ts_url.split("/")[-1]  # ts文件名
    
     # 解密,new有三个参数,
     # 第一个是秘钥(key)的二进制数据,
     # 第二个使用下面这个就好
     # 第三个IV在m3u8文件里URI后面会给出,如果没有,可以尝试把秘钥(key)赋值给IV
     sprytor = AES.new(key, AES.MODE_CBC, IV=key)
    
     # 获取ts文件二进制数据
     ts = requests.get(ts_url).content
    
     # 密文长度不为16的倍数,则添加二进制"0"直到长度为16的倍数
     while len(ts) % 16 != 0:
     ts += b"0"
     
     # 写入mp4文件
     with open(name, "ab") as file:
      # decrypt方法的参数需要为16的倍数,如果不是,需要在后面补二进制"0"
      file.write(sprytor.decrypt(ts)) 
     print(name, "下载完成")

    到这里就下载完成了。

    完整代码:

    import re
    import requests
    from Crypto.Cipher import AES
    
    
    # 保存的mp4文件名
    name = "dream_it_possible.mp4"
    
    # m3u8文件的url
    url = "http://www.jiuyi.info/static/video/secret/dream_it_possible.m3u8"
    
    
    # 请求头,不一定需要,看网站更改
    headers = {
     "Referer": "http://www.jiuyi.info/video/dream_it_possible",
     "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 "
         "(KHTML, like Gecko) Chrome/71.0.3578.80 Safari/537.36",
     }
    
    print("正在解析:" + url.split("/")[-1])
    
    # 获取m3u8文件内容
    r = requests.get(url)
    
    # 通过正值表达式获取key和ts的链接
    k = re.compile(r"http://.*?\.key") # key的正则匹配
    t = re.compile(r"http://.*?\.ts") # ts的正则匹配
    key_url = k.findall(r.text)[0] # key的url
    ts_urls = t.findall(r.text) # ts的url列表
    
    # 下载key的二进制数据
    print("正在下载key")
    key = requests.get(key_url).content
    
    # 解密并保存ts
    for ts_url in ts_urls:
    
     ts_name = ts_url.split("/")[-1]  # ts文件名
    
     # 解密,new有三个参数,
     # 第一个是秘钥(key)的二进制数据,
     # 第二个使用下面这个就好
     # 第三个IV在m3u8文件里URI后面会给出,如果没有,可以尝试把秘钥(key)赋值给IV
     sprytor = AES.new(key, AES.MODE_CBC, IV=key)
    
     # 获取ts文件二进制数据
     print("正在下载:" + ts_name)
     ts = requests.get(ts_url).content
    
     # 密文长度不为16的倍数,则添加b"0"直到长度为16的倍数
     while len(ts) % 16 != 0:
      ts += b"0"
    
     print("正在解密:" + ts_name)
    
     # 写入mp4文件
     with open(name, "ab") as file:
      # # decrypt方法的参数需要为16的倍数,如果不是,需要在后面补二进制"0"
      file.write(sprytor.decrypt(ts))
      print("保存成功:" + ts_name)
    print(name, "下载完成")

    以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持码农之家。


    上一篇:Django框架使用内置方法实现登录的代码示范

    下一篇:介绍python中数组和矩阵乘法及使用示例代码

    相关内容

    • python3.6 tkinter屏保小程序实现方法

      这篇文章主要为大家详细介绍了python3.6 tkinter实现屏保小程序,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

      11-02python3.6 tkinter屏保小程序

      阅读更多
    • 深入理解Python3.6连接Oracle数据库

      这篇文章主要介绍了Python3.6连接Oracle数据库的方法,较为详细的分析了cx_Oracle模块安装及Python3.6使用cx_Oracle模块操作Oracle数据库的具体操作步骤与相关注意事项,需要的朋友可以参考下

      02-21Python3.6连接Oracle数据库的方法详解

      阅读更多
    • 怎样解决python3.6数独问题

      这篇文章主要为大家详细介绍了python3.6数独问题的解决,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

      01-10python3.6数独问题的解决

      阅读更多
    • 详解win7下python3.6安装配置方法步骤

      这篇文章主要为大家详细介绍了win7下python3.6安装配置方法图文教程,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

      01-26win7下python3.6安装配置方法图文教程

      阅读更多
    • Python3.6及TensorFlow的安装和配置流程(图解)

      这篇文章主要为大家详细介绍了python3.6.3及TensorFlow安装配置方法图文教程,具有一定的参考价值,感兴趣的读者们可以参考一下

      09-19Python3.6及TensorFlow的安装配置

      阅读更多
    • 贝叶斯思维 统计建模的Python学习法

      贝叶斯思维 统计建模的Python学习法

      贝叶斯方式已经变得更加普遍与关键,可是却沒有过多能够效仿的材料来协助新手。应用场景AllenDowney在高校授课的本科学历,这书的计算方式能协助你得到1个优良的开始。 应用现有的程序编

      大小:21.1 MBPython学习

      点击下载
    • Python黑客攻防入门

      Python黑客攻防入门

      本书讲述了Python黑客攻防的基础知识、各种黑客攻击技术、黑客攻击学习方法,介绍各种黑客攻击技术、计算机基础知识、应用程序黑客攻击、Web黑客攻击、网络黑客攻击等

      大小:63.1 MB黑客技术

      点击下载
    • Python机器学习

      Python机器学习

      《Python机器学习》是一本关于Python的电子书资源,涉及Python、机器学习等相关内容,本文提供大小为198MB的超清第2PDF格式电子书下载,希望大家能够喜欢。

      大小:59.6 MBPython

      点击下载
    • Python从入门到精通

      Python从入门到精通

      《 Python从入门到精通 》从新手视角去往,根据浅显易懂的語言、多种多样的案例,详解了应用Python开展软件开发应当把握的各层面技术性。全书共有22章,包含初识Python、Python語言基本、运算

      大小:18.9 MBPython入门

      点击下载
    • Python王者归来

      Python王者归来

      Python 的丰富模块(module)以及广泛的应用范围,使 Python 成为当下最重要的计算机语言之一, 本书尝试将所有常用模块与应用分门别类组织起来,相信只要读者遵循本书实例,一定可以轻松学会 Python 语法与应用,逐步向 Python 高手之路迈进,这也是撰写本书的目的。

      大小:270735 MB Python

      点击下载
    • 跟老齐学Python:轻松入门

      跟老齐学Python:轻松入门

      本书是数十套结合课件的Python教学代码,本书是Python语言的入门读物,旨在引导初学者能够在轻松的环境中,掌握Python的基础知识

      大小:46.6 MBPython

      点击下载
    • Python游戏编程快速上手(第4版)

      Python游戏编程快速上手(第4版)

      本书通过小巧有趣的游戏来教授Python编程,采用直接展示游戏的源代码并通过实例来解释编程的原理的方式,帮助读者掌握Python游戏编程的基本技能,适合不同年龄和层次的Python编程初学者阅读

      大小:41.2 MBPython

      点击下载

    学习笔记