|
阅读前声明:本文因技术交流、尊重著作权、尊重原创、科学互联网、非法途径、安全技术使用、技术使用不当而造成不良后果,本人不负责任
目录
显示问题的起源网络分析代码示例结果
问题起源
最近想学英语,想看几节课,建议在里面看美剧。里面推荐了几部美剧,好像不错。还没读完呢。有兴趣的人可以看。(大卫亚设,北方执行部队)!
阴影列表如下:
《安娜》 《时尚女魔头》 《行动目标希特勒》朋友推荐了“人电影”的资源,是我自己的网络问题,还是网站服务器是外部的,
网络分析
例如,以《安娜》为例,开发人员模式查询网络传输,首先查找m3u8的请求。这里是双层嵌套,但没有加密,加密暂时没有办法。网络上有很多例子。很多尝试都没有成功。
说明:m3u8是以记录版本号、加密方法、文件列表等信息的文件列表形式存在的流媒体格式。
首先查找第一级索引文件,如下图所示

将请求URL直接复制到浏览器,下载m3u8文件,然后使用记事本/记事本打开。文件内容如下:这里是实际的m3u8文件路径

播放片段,找到ts片段,检查当前请求域路径。

连接前域路径和前一层的m3u8路径。
获取实际的m3u8请求

重复上一步:将整个连接复制到浏览器-下载
在这里获取所有ts路径和顺序,解释合并。
就可以了

代码示例
import requests,os
def download_ts_file(url,num,total):
"""单个ts文件下载"""
# 这里可以用自己的,也可以使用 fake_useragent 生成随机请求头
headers={'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36'}
response=requests.get(url,headers=headers)
data = response.content
file_name = url.split("/")[-1]
ts_path = os.path.join(tmp_path,file_name)
with open(ts_path,'wb') as f:
f.write(data)
f.close()
print(f"第【{num+1}/{total}】个ts片段{file_name}下载完成")
return None
# ts临时存储路径
tmp_path = os.path.join(os.getcwd(),"tmp_path")
# 读取并解析ts链接
f = open("index.m3u8","r",encoding="utf-8")
m3u8 = f.readlines()
f.close()
url_list = [url.split("\n")[0] for url in m3u8 if "https" in url]
# 循环下载各个ts片段--这里可以使用多线程,这里出于安全考虑没有加速,感兴趣的可以自己试试
[download_ts_file(url,url_list.index(url),len(url_list)) for url in url_list]
----------重要的事情说三遍,注意安全注意安全注意安全--------
----------重要的事情说三遍,注意安全注意安全注意安全--------
----------重要的事情说三遍,注意安全注意安全注意安全--------
—————————————————————————————————————————————————————
-----------分割线,多线程速度贼快,注意安全哦!----------
-----------本来不想用多线程的,奈何单线程实在太慢----------
import requests,os
def download_ts_file(num,url_list):
"""单个ts文件下载"""
url,total = url_list[num],len(url_list)
# 这里可以用自己的,也可以使用 fake_useragent 生成随机请求头
headers={'User-Agent':'xxxxx'}
response=requests.get(url,headers=headers)
data = response.content
file_name = url.split("/")[-1]
ts_path = os.path.join(tmp_path,file_name)
with open(ts_path,'wb') as f:
f.write(data)
f.close()
print(f"第【{num+1}/{total}】个ts片段{file_name}下载完成")
return None
# ts临时存储路径
tmp_path = os.path.join(os.getcwd(),"tmp_path")
# 读取并解析ts链接
f = open("index.m3u8","r",encoding="utf-8")
m3u8 = f.readlines()
f.close()
url_list = [url.split("\n")[0] for url in m3u8 if "https" in url]
# 循环下载各个ts片段--这里可以使用多线程,这里出于安全考虑没有加速,感兴趣的可以自己试试
from concurrent.futures import ThreadPoolExecutor # 线程池
p = ThreadPoolExecutor(8)
for num in range(len(url_list)):
p.submit(download_ts_file, num,url_list)
———————————————————我又是一条分割线——————————————
——————————————下面是怎么把ts合成成MP4格式——————————
#方法一:直接读取写入,注意按照m3u8文件给出的顺序读取写入
import os
# ts临时存储路径
tmp_path = os.path.join(os.getcwd(),"tmp_path")
# 读取并解析ts链接
f = open("index.m3u8","r",encoding="utf-8")
m3u8 = f.readlines()
f.close()
url_list = [url.split("\n")[0] for url in m3u8 if "https" in url]
with open('安娜2019.mp4','wb') as f2:
for url in url_list:
file_name = url.split("/")[-1]
ts_path = os.path.join(tmp_path,file_name)
f1 = open(ts_path,"rb")
data = f1.read()
f1.close()
f2.write(data)
f2.close()
合并ts还有一种方法,但是上限只能合并450个,我们这里是大视频不适用,可以了解参考下,当然有方法规避这个bug,这里不细讲了,有兴趣的自己查下资料
python合并大量ts文件成mp4格式(ps:上限是450,亲测)
结果展示


 |
|