全网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观看方法)...相关推荐

  1. 用Python制作音乐播放器(下,含完整源代码)

    哈喽,大家不知道是上午好还是中午好还是下午好还是晚上好! 音乐播放器,大家应该不陌生吧!今天我们一起来学习如何用python制作音乐播放器.之所开头有一个"下",是因为我们以前已经 ...

  2. Python网络爬虫与信息提取笔记(续篇)(文末附教学视频)只供教学讲解,请勿对有robots协议的网站(如淘宝网)造成骚扰

    接上篇博客:Python网络爬虫与信息提取笔记(文末附教学视频) 14:基于bs4库的HTML内容遍历方法 标签树的下行遍历: 用len(soup.body.contents)返回body标签的儿子节 ...

  3. m3u8播放插件,谷歌浏览器m3u8播放插件

    转载地址:http://www.xiaoshu168.com/php/310.html

  4. python调用oracle过程 权限不足_Python连接Oracle的一些坑以及出现原因和解决方法...

    前两天公司需要, 我用Python通过Oracle客户端instanceclient对接Oracle,遇到了一些问题: 提前一个小问题: Python连接Oracle需要一个第三方库:cx_Oracl ...

  5. python script文件夹在哪_Python获取当前脚本文件夹(Script)的绝对路径方法代码

    Python脚本有一个毛病,当使用相对路径时,被另一个不同目录下的py文件中导入时,会报找不到对应文件的问题.感觉是当前工作目录变成了导入py文件当前目录.如果你有配置文件的读取操作,然后都放在一个p ...

  6. python检测excel是否打开_Python判断远程服务器上Excel文件是否被人打开的方法_学领未来...

    最近工作中需要去判断远程服务器上的某个Excel文件是否被打开,如果被人打开,则等待,如果没人打开使用,则去填写数据进Excel文件. 开始想的很简单,和其他语言一样,比如C#,打开文件,如果报错说明 ...

  7. Python 实现 游戏EVE 自动化挖矿 注:模拟点击原理 附演示视频

    出站挖矿 回站放矿 残血逃命 直接上代码.认真阅读前几行注释.而且建议绿色游戏,我写了这个代码,毁了我对这个游戏的热情.大家娱乐敲代码就好了.最后给大家一个演示视频. 演示视频,b站BV1pK4y1x ...

  8. 学霸大佬整理,超全 Python 学习路线图(附工具+视频+书籍+面试)

    已经加小詹领取过的朋友,不需要重复领取哦! Python 有多火?据了解,Python 已经入驻小学生教材,未来不学 Python 不仅知识会脱节,可能与小朋友都没有了共同话题-- 不少读者总说想学 ...

  9. python中os.path.dirname(__file__)的使用(获取文件夹路径)(获取当前py文件绝对路径)

    (1).当"print os.path.dirname(__file__)"所在脚本是以完整路径被运行的, 那么将输出该脚本所在的完整路径,比如: python d:/python ...

  10. Android音视频学习系列(七) — 从0~1开发一款Android端播放器(支持多协议网络拉流本地文件)

    系列文章 Android音视频学习系列(一) - JNI从入门到精通 Android音视频学习系列(二) - 交叉编译动态库.静态库的入门 Android音视频学习系列(三) - Shell脚本入门 ...

最新文章

  1. python版本控制神器Virtualenvwrapper的使用
  2. php如何包含html模板,php html模板中怎么使用类似include的功能?
  3. SharePoint Online 创建和使用栏
  4. 鲁迅先生就ERP实施问题答记者问
  5. HuggingFace-transformers系列的介绍以及在下游任务中的使用
  6. MVC5管道处理模型
  7. vim 命令模式 筛选_10个步骤的筛选器模式
  8. Python namedtuple(命名元组)使用实例
  9. c# 路径下的最近文件夹_C#8.0的两个有趣的新特性以及gRPC
  10. android 8 ril,Android 8.0 RIL源码分析(二)
  11. 代码实现:输入某年某月某日,判断这一天是这一年的第几天?
  12. 解决PHPStudy8.1.1 mySQL服务启动失败 数据库工具报错卡死
  13. MyBatis使用总结+整合Spring
  14. gdb调试时的问题Missing separate debuginfos, use: debuginfo-install glibc-XXX
  15. mongos、nanomsg、zeroMQ简述和go-mongos使用实例
  16. navicat win32注册机下载 | 绿色版
  17. 学Python中道崩殂的人,大抵逃不过这3个原因!其中有你吗?
  18. Django框架中No installed app with label问题
  19. 如何将python转成app_将python脚本转换为webapp的最简单方法是什么?
  20. 怎样查看电脑中的开机启动项?简单方法!如何禁止电脑开机启动的选项?

热门文章

  1. vsftpd不支持目录软链接的解决办法
  2. MongoDB聚合运算之mapReduce函数的使用(11)
  3. DE4-530的OpenCL开发环境搭建
  4. Android点亮屏幕
  5. SNS网站中怎样获取MSN联系人信息
  6. OEMAddressTable介绍(转)
  7. 利用集成学习(Adaboost(DTs))对高光谱影像数据集(mat)分类
  8. 遥感数字图像处理——第三章——空间域处理方法
  9. 【ArcGIS|空间分析|网络分析】9 使用位置分配选择最佳商店位置
  10. 查找算法-------插值查找