欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

python3.6根據(jù)m3u8下載mp4視頻

 更新時(shí)間:2019年06月17日 16:14:12   作者:李嘉坤  
這篇文章主要為大家詳細(xì)介紹了python3.6根據(jù)m3u8下載mp4視頻,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

需要下載某網(wǎng)站的視頻,chrome瀏覽器按F12打開開發(fā)者模式,發(fā)現(xiàn)視頻鏈接是以"blob:http"開頭的鏈接,打開這個(gè)鏈接后找不到網(wǎng)頁,網(wǎng)上查了下,找到了下載方法,在這里做個(gè)記錄,如果有錯(cuò)誤,歡迎指出。

程序在Windows 10下運(yùn)行,不過Linux應(yīng)該也沒問題。

使用到的有re模塊,requests模塊和Crypto模塊,其中requests模塊和Crypto模塊如果沒安裝可以使用pip命令安裝。(Crypto模塊安裝感覺比較坑,我是從anaconda里拷貝了一份)

下面開始正題:

注:以下使用的m3u8文件所在的網(wǎng)站是自己搭建用來測試的,鏈接可能會失效。

首先在chrome的network里找到一個(gè)m3u8文件的請求,可以通過它下載視頻。

通過Preview可以看到m3u8文件的內(nèi)容。

這里m3u8文件比較重要的內(nèi)容有兩個(gè)。

一個(gè)是URI后面的鏈接,這個(gè)是加密和解密的秘鑰,如果m3u8文件里有這個(gè)URI,那么這個(gè)視頻就是經(jīng)過了加密的,加密的方法可以看URI前面,這里是AES-128加密算法。

另一個(gè)是以ts結(jié)尾鏈接,這個(gè)是視頻片段,如果是沒進(jìn)行加密的,可以直接打開這個(gè)鏈接下載視頻片段,下載下來的是后綴為ts的文件,一般可以直接播放,不過時(shí)間很短。如果是加密過的,下載后播放會提示視頻文件已損壞。

知道這些后,就可以進(jìn)行下載了,先獲取m3u8文件的內(nèi)容,然后解析出秘鑰(key)和ts的鏈接,然后下載key對每一個(gè)ts進(jìn)行解密,保存到一個(gè)mp4文件里。

下載用的是requests模塊,解析key和ts的鏈接是用的re模塊,解密用的是Crypto模塊。

使用Crypto需要注意三個(gè)地方,一個(gè)是安裝和導(dǎo)入,第二個(gè)是Crypto里AES.new的參數(shù),第三個(gè)是decrypt方法的參數(shù)。下面先看代碼。

導(dǎo)入模塊:

import re
import requests
from Crypto.Cipher import AES

初始設(shè)置:

# 保存的mp4文件名
name = "dream_it_possible.mp4"

# m3u8文件的url
url = "http://www.jiuyi.info/static/video/secret/dream_it_possible.m3u8"


# 請求頭,不一定需要,看網(wǎng)站更改
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文件內(nèi)容,并解析出key和ts文件的url。

# 獲取m3u8文件內(nèi)容
r = requests.get(url)

# 通過正值表達(dá)式獲取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有三個(gè)參數(shù),
 # 第一個(gè)是秘鑰(key)的二進(jìn)制數(shù)據(jù),
 # 第二個(gè)使用下面這個(gè)就好
 # 第三個(gè)IV在m3u8文件里URI后面會給出,如果沒有,可以嘗試把秘鑰(key)賦值給IV
 sprytor = AES.new(key, AES.MODE_CBC, IV=key)

 # 獲取ts文件二進(jìn)制數(shù)據(jù)
 ts = requests.get(ts_url).content

 # 密文長度不為16的倍數(shù),則添加二進(jìn)制"0"直到長度為16的倍數(shù)
 while len(ts) % 16 != 0:
 ts += b"0"
 
 # 寫入mp4文件
 with open(name, "ab") as file:
  # decrypt方法的參數(shù)需要為16的倍數(shù),如果不是,需要在后面補(bǔ)二進(jìn)制"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"


# 請求頭,不一定需要,看網(wǎng)站更改
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文件內(nèi)容
r = requests.get(url)

# 通過正值表達(dá)式獲取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的二進(jìn)制數(shù)據(jù)
print("正在下載key")
key = requests.get(key_url).content

# 解密并保存ts
for ts_url in ts_urls:

 ts_name = ts_url.split("/")[-1]  # ts文件名

 # 解密,new有三個(gè)參數(shù),
 # 第一個(gè)是秘鑰(key)的二進(jìn)制數(shù)據(jù),
 # 第二個(gè)使用下面這個(gè)就好
 # 第三個(gè)IV在m3u8文件里URI后面會給出,如果沒有,可以嘗試把秘鑰(key)賦值給IV
 sprytor = AES.new(key, AES.MODE_CBC, IV=key)

 # 獲取ts文件二進(jìn)制數(shù)據(jù)
 print("正在下載:" + ts_name)
 ts = requests.get(ts_url).content

 # 密文長度不為16的倍數(shù),則添加b"0"直到長度為16的倍數(shù)
 while len(ts) % 16 != 0:
  ts += b"0"

 print("正在解密:" + ts_name)

 # 寫入mp4文件
 with open(name, "ab") as file:
  # # decrypt方法的參數(shù)需要為16的倍數(shù),如果不是,需要在后面補(bǔ)二進(jìn)制"0"
  file.write(sprytor.decrypt(ts))
  print("保存成功:" + ts_name)
print(name, "下載完成")

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Python全景系列之?dāng)?shù)據(jù)類型大盤點(diǎn)

    Python全景系列之?dāng)?shù)據(jù)類型大盤點(diǎn)

    這篇文章主要為大家介紹了Python全景系列之?dāng)?shù)據(jù)類型的盤點(diǎn)解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-05-05
  • python讀寫csv文件實(shí)例代碼

    python讀寫csv文件實(shí)例代碼

    在本篇文章中小編給各位分享了關(guān)于python讀取和寫入csv文件的知識點(diǎn)以及實(shí)例代碼,需要的朋友們參考下。
    2019-07-07
  • Python圖像特效之模糊玻璃效果

    Python圖像特效之模糊玻璃效果

    這篇文章主要為大家詳細(xì)介紹了Python圖像特效之模糊玻璃效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-09-09
  • PyTorch實(shí)現(xiàn)圖像識別實(shí)戰(zhàn)指南

    PyTorch實(shí)現(xiàn)圖像識別實(shí)戰(zhàn)指南

    圖像識別是從給定圖像中提取有意義的信息(例如圖像內(nèi)容)的過程,下面這篇文章主要給大家介紹了關(guān)于PyTorch實(shí)現(xiàn)圖像識別的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-02-02
  • python光學(xué)仿真學(xué)習(xí)wxpython創(chuàng)建手速測試程序

    python光學(xué)仿真學(xué)習(xí)wxpython創(chuàng)建手速測試程序

    這篇文章主要介紹了python光學(xué)仿真學(xué)習(xí)使用wxpython創(chuàng)建一個(gè)手速測試程序示例的實(shí)現(xiàn),有需要的朋友可以借鑒參考下,希望能夠有所幫助
    2021-10-10
  • 詳解python中常用配置的讀取方法

    詳解python中常用配置的讀取方法

    常見的應(yīng)用配置方式有環(huán)境變量和配置文件,對于微服務(wù)應(yīng)用,還會從配置中心加載配置,本文主要介紹了從環(huán)境變量、.env文件、.ini文件、.yaml文件等文件的讀取配置,需要的可以參考下
    2024-01-01
  • python中通過selenium簡單操作及元素定位知識點(diǎn)總結(jié)

    python中通過selenium簡單操作及元素定位知識點(diǎn)總結(jié)

    在本篇文章里小編給大家整理的是關(guān)于python中通過selenium簡單操作及元素定位的知識點(diǎn),有需要的朋友們可以學(xué)習(xí)下。
    2019-09-09
  • 一文帶你了解Python中pymysql的使用

    一文帶你了解Python中pymysql的使用

    pymysql就是聯(lián)通mysql實(shí)現(xiàn)python窗口與mysql數(shù)據(jù)庫交互的庫,十分方便操作,這篇文章將詳細(xì)說明如何掌握并使用該庫,感興趣的可以了解一下
    2023-02-02
  • python for循環(huán)remove同一個(gè)list過程解析

    python for循環(huán)remove同一個(gè)list過程解析

    這篇文章主要介紹了python for循環(huán)remove同一個(gè)list過程解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-08-08
  • 壓縮包密碼破解示例分享(類似典破解)

    壓縮包密碼破解示例分享(類似典破解)

    有一個(gè)壓縮包密碼忘了,寫了一個(gè)小腳本實(shí)現(xiàn)一個(gè)解密的功能,輸入自己常用密碼中的單詞后,腳本將這些密碼組合嘗試解壓壓縮包
    2014-01-01

最新評論