最近有一个采集看看新闻网指定电视栏目的需求,正好是m3u8+ts的模式,就写个文章记录一下
去网页上看了一眼传过来的是一堆ts文件和一个m3u8文件
点开m3u8文件之后看到里面是一堆的ts文件的路径
看一下m3u8的传参
一个开始时间一个结束时间,还有一个auth_key和一个on,看起来只有auth_key有点麻烦,直接换个开始时间和结束时间试一下可以不可以有正常返回
结束时间换成了540,返回正常,说明auth_key固定住就可以了
接着拿一个ts请求去postman上看一眼
save Response一下,会自动帮你格式定义为ts文件,然后保存到本地打开发现是可以打开的,所以整个流程是走通的,接下来直接上代码
main.py
import requests
import re
import iooo
import time
import datetime
import os
def get_start():
return str(time.mktime(time.strptime(str(datetime.date.today())+" 07:00:00","%Y-%m-%d %H:%M:%S")))[:-2]
def get_end():
return str(time.mktime(time.strptime(str(datetime.date.today()) + " 08:59:00", "%Y-%m-%d %H:%M:%S")))[:-2]
if __name__ == '__main__':
url = "https://aliyun-stream.kksmg.com/live/dfws.m3u8?aliyunols=on&auth_key=1656488421-19295786-0-ff475baa64aa54cc62c97f6a381cd834&" \
"lhs_start_unix_s_0={}&lhs_vodend_unix_s_0={}".format(get_start(),get_end())
payload={}
headers = {}
response = requests.request("GET", url, headers=headers, data=payload)
s=response.text
pattern=re.compile("(dfws/.*?)\n")
iooo.mkdir(r"E:\kankan\看东方\{}".format(str(datetime.date.today())))
i=1
for x in re.findall(pattern,s):
url = "https://aliyun-stream.kksmg.com/live/{}".format(x)
payload = {}
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.5060.53 Safari/537.36 Edg/103.0.1264.37',
'Accept': '*/*',
'Accept-Encoding': 'gzip, deflate, br',
'Accept-Language': 'zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6',
'Connection': 'keep-alive',
'Host': 'aliyun-stream.kksmg.com',
'Origin': 'https://live.kankanews.com',
'Referer': 'https://live.kankanews.com/',
'sec-ch-ua': '" Not;A Brand";v="99", "Microsoft Edge";v="103", "Chromium";v="103"',
'sec-ch-ua-mobile': '?0',
'sec-ch-ua-platform': '"Windows"',
'Sec-Fetch-Dest': 'empty',
'Sec-Fetch-Mode': 'cors',
'Sec-Fetch-Site': 'cross-site'
}
response = requests.request("GET", url, headers=headers, data=payload)
with open(r'E:\kankan\看东方\{}\{}.ts'.format(str(datetime.date.today()),str(i).zfill(5)), 'wb') as f:
f.write(response.content)
i=i+1
os.system(r"copy /b E:\kankan\看东方\{}\*.ts E:\kankan\看东方\{}.mp4".format(str(datetime.date.today()),str(datetime.date.today())))
iooo.py
def mkdir(path):
'''
创建指定的文件夹
:param path: 文件夹路径,字符串格式
:return: True(新建成功) or False(文件夹已存在,新建失败)
'''
# 引入模块
import os
# 去除首位空格
path = path.strip()
# 去除尾部 \ 符号
path = path.rstrip("\\")
# 判断路径是否存在
# 存在 True
# 不存在 False
isExists = os.path.exists(path)
# 判断结果
if not isExists:
# 如果不存在则创建目录
# 创建目录操作函数
os.makedirs(path)
print(path + ' 创建成功')
return True
else:
# 如果目录存在则不创建,并提示目录已存在
print(path + ' 目录已存在')
return False
最后那行是运行cmd指令,把所有的ts文件合并成一个大的MP4文件,搞定