无聊自学爬虫,想追剧,找到了在线观看的网址,然后想有什么办法能把网站上播放的视频下载下来。
我的m3u8格式是这样的(链接已打码),用的AES128加密
#EXTM3U
#EXT-X-VERSION:3
#EXT-X-TARGETDURATION:9
#EXT-X-PLAYLIST-TYPE:VOD
#EXT-X-MEDIA-SEQUENCE:0
#EXT-X-KEY:METHOD=AES-128,URI="https:********/hls/key.key"
#EXTINF:5,
https://********hls/aGmWudvF.ts
#EXTINF:3.52,
https://********/hls/1JAJqOdf.ts
首先获取m3u8文件中的信息,提取出所有的ts文件链接地址和加密秘钥
def get_ts(url_m3u8):
d_m3u8 = requests.get(url=url_m3u8,headers=header).content.decode('utf-8') # 访问网页获取返回信息
ts_list = re.findall(r'(.*?\.ts)', d_m3u8) # 正则提取出列表
key_url = re.findall(r'URI="(.*?)"',d_m3u8)[0] #正则提取出秘钥
return ts_list,key_url
下载单个tsw文件代码,在使用的时候前面加上retry装饰符,遇上网络不好执行出错的时候可以重复几次
def download_one_file(ts_url,download_path,index):
ts_path = download_path + "/{:0>4d}.ts".format(index)
file_name = ts_url.split("/")[-1]
if not os.path.isfile(ts_path):
# print("ts_url", ts_url)
#print("开始下载 %s" % file_name)
time.sleep(2) # 防止爬虫间隔时间过短被禁止请求
try:
#随机挑选一个代理,以防被锁断开连接
headers = {'User-Agent': str(UserAgent().random