python解密m3u8播放_Python3 通过m3u8连接获取完整媒体文件(附全网视频VIP观看方法)...
全网VIP观看视频API:
https://jqaaa.com/jx.php?url=
将自己想要看的视频URL复制黏贴在该API地址后就能观看了,但是缺点是不能将视频下载下来。
抓包分析后发现视频资源是被分段成.TS格式的文件,且所有的.TS格式文件的URL被放入了m3u8格式的文件中。
于是编写以下代码用于下载媒体文件。
【!】用前须知:需要抓包获得视频m3u8文件的URL
代码目标:
实现输入M3U8下载连接,自动下载并合并媒体文件。
以下为全部代码。
import os
import requests
headers = {
'User-Agent': "Mozilla/5.0 (Windows NT 6.1; Win64; x64) "
"AppleWebKit/537.36 (KHTML, like Gecko) "
"Chrome/72.0.3626.109 Safari/537.36",
}
def get_url_content():
'''获取m3u8文件的内容并放入内存'''
m3u8_target = input('输入m3u8对应URL:').strip()
target = '/'.join(m3u8_target.split('/')[:-1])
# print(target)
m3u8_res = requests.get(m3u8_target,headers)
if m3u8_res.status_code != 200:
print('URL不能正常访问', m3u8_res.status_code)
m3u8_content = m3u8_res.content.decode('utf8')
return m3u8_content,target
def read_m3u8(m3u8_content):
'''获取m3u8中的下载连接'''
media_url_list = []
lines_list = m3u8_content.strip().split('\r\n')
if len(lines_list) < 3:
lines_list = m3u8_content.strip().split('\n')
if '#EXTM3U' not in m3u8_content:
raise BaseException('非M3U8连接')
for index,line in enumerate(lines_list):
# print(index,line)
if '#EXTINF' in line:
media_url_list.append(lines_list[index+1])
return media_url_list
def download_media(url_list,target,dir_path):
'''下载媒体文件'''
for index,url in enumerate(url_list):
try:
res = requests.get(url,headers)
except requests.exceptions.MissingSchema: #捕获不完整URL的异常
target_url =target+'/'+url
res = requests.get(target_url,headers)
media_file_path = dir_path+'full_media.mp4'
if res.status_code != 200:
print('下载URL连接访问失败')
break
with open(media_file_path,'ab')as f:
f.write(res.content)
print('下载进度:%.1f%%' % ((index + 1) / len(url_list) * 100))
flag = False
if index == len(url_list) - 1:
flag = True
return flag
def main():
file_name = input("输入媒体名称:")
dir_path = mkdir(file_name) #创建媒体名命名的文件夹
m3u8_content,target = get_url_content()
media_url_list = read_m3u8(m3u8_content)
flag = download_media(media_url_list,target, dir_path) # 用于校验是否成功下载媒体文件
if flag:
print('媒体下载完成')
else:
print('媒体下载失败')
print("*"*16)
def mkdir(path):
path = path.strip().rstrip('\\')
is_exists = os.path.exists(path)
if not is_exists: # 校验目录是否存在
os.makedirs(path)
print('创建媒体目录')
else:
print('媒体目录已经存在')
return path+'/'
if __name__ == '__main__':
print('''
使用方法:
推荐全网视频解析api:https://jqaaa.com/jx.php?url=
抓包获取m3u8的URL地址后复制使用
''')
while True:
main()
代码兼容了对于M3U8文件中是否包含完整URL的情况。
python解密m3u8播放_Python3 通过m3u8连接获取完整媒体文件(附全网视频VIP观看方法)...相关推荐
- 用Python制作音乐播放器(下,含完整源代码)
哈喽,大家不知道是上午好还是中午好还是下午好还是晚上好! 音乐播放器,大家应该不陌生吧!今天我们一起来学习如何用python制作音乐播放器.之所开头有一个"下",是因为我们以前已经 ...
- Python网络爬虫与信息提取笔记(续篇)(文末附教学视频)只供教学讲解,请勿对有robots协议的网站(如淘宝网)造成骚扰
接上篇博客:Python网络爬虫与信息提取笔记(文末附教学视频) 14:基于bs4库的HTML内容遍历方法 标签树的下行遍历: 用len(soup.body.contents)返回body标签的儿子节 ...
- m3u8播放插件,谷歌浏览器m3u8播放插件
转载地址:http://www.xiaoshu168.com/php/310.html
- python调用oracle过程 权限不足_Python连接Oracle的一些坑以及出现原因和解决方法...
前两天公司需要, 我用Python通过Oracle客户端instanceclient对接Oracle,遇到了一些问题: 提前一个小问题: Python连接Oracle需要一个第三方库:cx_Oracl ...
- python script文件夹在哪_Python获取当前脚本文件夹(Script)的绝对路径方法代码
Python脚本有一个毛病,当使用相对路径时,被另一个不同目录下的py文件中导入时,会报找不到对应文件的问题.感觉是当前工作目录变成了导入py文件当前目录.如果你有配置文件的读取操作,然后都放在一个p ...
- python检测excel是否打开_Python判断远程服务器上Excel文件是否被人打开的方法_学领未来...
最近工作中需要去判断远程服务器上的某个Excel文件是否被打开,如果被人打开,则等待,如果没人打开使用,则去填写数据进Excel文件. 开始想的很简单,和其他语言一样,比如C#,打开文件,如果报错说明 ...
- Python 实现 游戏EVE 自动化挖矿 注:模拟点击原理 附演示视频
出站挖矿 回站放矿 残血逃命 直接上代码.认真阅读前几行注释.而且建议绿色游戏,我写了这个代码,毁了我对这个游戏的热情.大家娱乐敲代码就好了.最后给大家一个演示视频. 演示视频,b站BV1pK4y1x ...
- 学霸大佬整理,超全 Python 学习路线图(附工具+视频+书籍+面试)
已经加小詹领取过的朋友,不需要重复领取哦! Python 有多火?据了解,Python 已经入驻小学生教材,未来不学 Python 不仅知识会脱节,可能与小朋友都没有了共同话题-- 不少读者总说想学 ...
- python中os.path.dirname(__file__)的使用(获取文件夹路径)(获取当前py文件绝对路径)
(1).当"print os.path.dirname(__file__)"所在脚本是以完整路径被运行的, 那么将输出该脚本所在的完整路径,比如: python d:/python ...
- Android音视频学习系列(七) — 从0~1开发一款Android端播放器(支持多协议网络拉流本地文件)
系列文章 Android音视频学习系列(一) - JNI从入门到精通 Android音视频学习系列(二) - 交叉编译动态库.静态库的入门 Android音视频学习系列(三) - Shell脚本入门 ...
最新文章
- python版本控制神器Virtualenvwrapper的使用
- php如何包含html模板,php html模板中怎么使用类似include的功能?
- SharePoint Online 创建和使用栏
- 鲁迅先生就ERP实施问题答记者问
- HuggingFace-transformers系列的介绍以及在下游任务中的使用
- MVC5管道处理模型
- vim 命令模式 筛选_10个步骤的筛选器模式
- Python namedtuple(命名元组)使用实例
- c# 路径下的最近文件夹_C#8.0的两个有趣的新特性以及gRPC
- android 8 ril,Android 8.0 RIL源码分析(二)
- 代码实现:输入某年某月某日,判断这一天是这一年的第几天?
- 解决PHPStudy8.1.1 mySQL服务启动失败 数据库工具报错卡死
- MyBatis使用总结+整合Spring
- gdb调试时的问题Missing separate debuginfos, use: debuginfo-install glibc-XXX
- mongos、nanomsg、zeroMQ简述和go-mongos使用实例
- navicat win32注册机下载 | 绿色版
- 学Python中道崩殂的人,大抵逃不过这3个原因!其中有你吗?
- Django框架中No installed app with label问题
- 如何将python转成app_将python脚本转换为webapp的最简单方法是什么?
- 怎样查看电脑中的开机启动项?简单方法!如何禁止电脑开机启动的选项?