m3u8+ts模式的视频采集(看看新闻网)

文章目录

  • 前言
  • 调研
  • 代码处理

前言

最近有一个采集看看新闻网指定电视栏目的需求,正好是m3u8+ts的模式,就写个文章记录一下

调研

去网页上看了一眼传过来的是一堆ts文件和一个m3u8文件
m3u8+ts模式的视频采集(看看新闻网)_第1张图片
点开m3u8文件之后看到里面是一堆的ts文件的路径m3u8+ts模式的视频采集(看看新闻网)_第2张图片
看一下m3u8的传参
m3u8+ts模式的视频采集(看看新闻网)_第3张图片
一个开始时间一个结束时间,还有一个auth_key和一个on,看起来只有auth_key有点麻烦,直接换个开始时间和结束时间试一下可以不可以有正常返回
m3u8+ts模式的视频采集(看看新闻网)_第4张图片
结束时间换成了540,返回正常,说明auth_key固定住就可以了

接着拿一个ts请求去postman上看一眼
m3u8+ts模式的视频采集(看看新闻网)_第5张图片
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文件,搞定

你可能感兴趣的:(音视频,爬虫,python)