爬取钉钉直播回放

在这里插入图片描述


第一 找到m3u8文件的网址,教程: 超链接日后放上


第二 下载ffpmeg,下载教程: 链接日后放上


第三 上代码

import requests
import os

class Dingding():
    '''
    url: m3u8文件网址 
    请提前下载好ffmpeg应用
    video_name: 视频名称
    '''
    def __init__(self,url,video_name):
        self.url = url                           # m3u8的网址
        self.urls_name = 'Ding_m3u8_url.txt'     # 存放网址的文件名
        self.urls_path = Dingding.get_url(self)  # 存放网址的文件名所在的路径
        self.video_name = video_name             # 最终视频的名字

    # 获得m3u8,保存到当前文件夹下的网址.txt文件
    def get_url(self):
        r = requests.get(self.url)
        with open(self.urls_name,'w') as f:      # 保存到网址.txt
            f.write(r.text)

        path = os.getcwd() + f'\{self.urls_name}'# 路径
        return path

    # 爬取每个网址的数据
    def get_save_data(self):
        m = 1                                    # m表示第m个网址
        with open(self.urls_path,'r') as f:      # 读取网址文件
            for line in f:                       # 遍历文件里的网址
                if len(line) > 50:     # 判断当网址为视频网址时
                    url = f'https://dtliving.alicdn.com/live_hp/{line.rstrip()}' # 注意用.rstrip()方法去掉\n这个字符,如果时打印出来时发现不了这个问题的
                    jindu = format(m/408,'.2%')  # 百分比进度
                    print(f'正在下载第{m}个片段(进度{jindu})...') # 打印进度
                    r2 = requests.get(url)       # 爬取数据
                    # r2.encoding = 'utf-8'      # 如果数据乱码就解码

                    video_file_path = os.getcwd() + r'\video'
                    if os.path.exists(video_file_path) == False:      # 创建一个名叫video的文件夹用来存放一堆ts视频
                        os.mkdir(video_file_path)

                    with open(fr'.\video\{m}.ts','wb', ) as f:        # 保存到video文件夹里的ts文件,wb:覆盖写入
                        f.write(r2.content)      # 写入数据
                    m += 1
        Dingding.filelist(self)                  # 生成filelist
        Dingding.concat_video(self)              # 合并为一个文件

    # 生成ts路径,保存到filelist.txt ffmpeg合并视频时要用到
    def filelist(self):
        files = os.listdir(os.getcwd() + r"\video")  # 获取一堆.ts的文件名
        files.sort(key=lambda x: int(x[:-3]))        # 将文件名按数字大销排序
        with open('filelist.txt', 'w') as f:         # 创建filelist.txt文件
            for file in files:
                ts_path = os.getcwd() + r"\video" + f'\{file}'
                data = f"file  '{ts_path}'"          # 写入的格式要符合规范
                f.write(data)
                f.write('\n')

    # 再cmd端用ffmpeg执行ts合并为mp4命令
    def concat_video(self):
        ''''
        video_file_name: 存放一堆ts视频的文件夹名称
        '''
        print('合并视频中...')
        # 一:进入video文件夹,二:合并文件夹里的ts视频,保存再video文件夹里
        order = fr'cd video && ffmpeg -f concat -safe 0 -i ..\filelist.txt -c copy {self.video_name}.mp4'
        os.system(order)

if __name__ == '__main__':
    url = 'https://dtliving.alicdn.com/live_hp/5218c5f5-aee1-495c-b213-ef7a48812936_merge.m3u8'
    dingding = Dingding(url,'回放') # url是m3u8的网址,'回放'是爬取视频的名称
    dingding.get_save_data() # 爬取视频并保存再vedio文件夹里

运行完代码会发现,视频就出现在当前路径的video文件夹里。
在这里插入图片描述

  • 3
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值