python爬虫视频m3u8实战

最近我接触到了大数据方面的工作,其中需要爬取视频数据。今天我们在爬取视频网站时使用了m3u8格式来进行视频播放。我特意去搜了一下m3u8,发现现在大部分视频客户端都采用了HTTP Live Streaming(HLS)技术,这是苹果为了提高流播效率开发的一项技术。与直接播放MP4等视频文件不同,HLS将流媒体切分为若干TS片段,并通过一个扩展的M3U8列表文件将这些TS片段批量下载供客户端播放器实现实时流式播放。因此,在爬取HLS流媒体文件时,我们一般的思路是先下载M3U8文件并分析其中的内容,然后根据文件中定义的TS片段进行批量下载,最后将它们组合成MP4文件或直接保存TS片段。虽然这个过程听起来很简单,但在实际操作中会遇到一些复杂的问题;例如m3u8文件下载不下来,ts片段文件被加密了,甚至加密ts片段的密钥也被加密了。本文将分享一个实际案例供大家参考。

还是按照爬虫的基本规则:

  1. 打开视频播放地址分析视频的规律,尝试可以独立打开视频下载链接
  2. 编写python获取视频列表下载视频脚本

一、视频的分析
网站链接

让我们 打开F12 从响应时间中找一下那些有肯能是视频链接的请求接口

接着我们点那个搜索输入m3u8刷新

然后显示有带.ts的我们继续观察发现有个带m3u8 

 发现里面有许多.ts,这个就是我们需要的m3u8 .ts所有列表了,我们取这个url获取ts,当然这个地址需要拼接下

二、代码

上完整代码,我没合并哈,

import requests
import re
import os

#获取ts列表
def get_ts(url):
    resp_m3u8=requests.get(url).content.decode('utf-8')#返回网页获取信息
    list_ts=re.findall(r'(.*?).ts',resp_m3u8)#通过正则表达式提取ts列表

    return list_ts



def download_ts(paths,url_lis):
    #检查路径是否存在

    if not os.path.exists(paths):
        os.makedirs(paths)
    con=0
    # print(len(url_lis))
    for i in url_lis:

        m3u8_url=f'https://m3u8i.vodfile.m1905.com/202308181134/b5cbc61e114a6a945227fa5513529198/movie/2021/12/17/m20211217COB1O9SRFTA2840Y/{i}.ts'
        print(m3u8_url)
        # # 设置保存的地址
        path_1=paths+'\\'+str(con)+'.ts'

        try:
            video=requests.get(m3u8_url).content
            with open(path_1,'wb') as m3u8:
                m3u8.write(video)

            print(f"下载成功,已第{con}个")
            con+=1
        except:

            print("下载失败")






if __name__ == '__main__':
    path=r'E:\测试\1905电影\ts'
    path2=r'E:\测试\1905电影\视频'
    url=''获取m3u8链接自己填
    m3u8_ts=get_ts(url)
    download_ts(path,m3u8_ts)
    # merge(path,path2)


看效果

我这里省流,就没去合并视频,后面合并的步骤也简单。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值