爬取m3u8视频

网址:https://www.bhlsm.com/cupfoxplay/609-3-1/

相关代码:

python 复制代码
#采集网址:https://www.bhlsm.com/cupfoxplay/609-3-1/
#正常视频网站:完整视频内容
# pip install pycryptodomex
#流媒体文件:M3U8(把完整的视频内容,分割成N个视频片段,ts文件)
"""
第一次请求:获取m3u8文件链接  / 视频标题
    1.发送请求:
        - 请求网址:视频播放页面链接
    2.获取数据:
        - 服务器返回响应数据
    3.解析数据:
        - 提取么u3u8文件链接 / 视频标题
AES-128:
    1. key:密钥 enc.key https://v.gsuus.com/play/QBY0yWKa/enc.key
"""
import requests
#导入正则表达式模块
import re
#导入加密模块
from Cryptodome.Cipher import AES
#模拟浏览器
headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Safari/537.36'
    }
#请求网址
for page in range(1,4):
    url = f'https://www.bhlsm.com/cupfoxplay/609-3-{page}/'
    #发送请求
    response = requests.get(url=url,headers=headers)
    # print(response)
    html_data = response.text
    #解析数据,提取视频标题 -> re.findall('匹配数据','数据源')
    # re.findall('<h1 class="movie-list-title">(斗罗大陆1 第01集)在线播放</h1>')
    title = re.findall('<h1 class="movie-list-title">(.*?)在线播放</h1>',html_data)[0]
    #提取m3u8链接
    m3u8_url = re.findall('"url":"(.*?)","url_next":',html_data)[0].replace('\/','/')

    print(title,m3u8_url)

    #获取密钥(每一集的密钥不相同)
    # key_url = 'https://v.gsuus.com/play/QBY0yWKa/enc.key'
    key_url = f'https://v.gsuus.com/play/{m3u8_url.split("/")[-2]}/enc.key'
    key = requests.get(url=key_url,headers=headers).content
    #解码器
    ci = AES.new(key,AES.MODE_CBC)
    # print(html_data)

    # print(title)
    """
    第二次请求:获取所有ts文件链接
    1.发送请求:
        - 请求网址:m3u8文件链接
    2.获取数据:
        - 服务器返回响应数据
    3.解析数据:
        - 提取  ts文件链接(230个视频片段)
    """
    #发送请求 + 获取数据
    m3u8_data = requests.get(url=m3u8_url,headers=headers).text
    #解析数据,提取ts链接
    ts_list = re.findall(',\n(.*?)\n#',m3u8_data)


    """
    ,
    https://gs.gszyi.com:999/hls/46/20230223/1034032/plist-00001.ts
    #
    """
    # print(m3u8_data)
    #for循环遍历,提取列表里面元素

    # print(ts_list)

    for ts in ts_list:
        """
        第三次请求:获取视频内容
            1.发送请求:
                - 请求网址:ts文件链接
            2.获取数据:
                - 获取视频内容
            3.保存数据:
                - 把所有视频派那段保存成一个完整的视频内容
        
        """
        # print(ts)
        #发送请求ts链接+ 获取视频数据
        ts_content = requests.get(url=ts,headers=headers).content
        #进行解码
        content = ci.decrypt(ts_content)
        with open('video\\' + title + '.mp4',mode='ab') as f:
            f.write(content)
        print(ts)
        #break

爬取过程:

查找url:

相关推荐
计算机源码社7 分钟前
【大数据项目实战】基于大数据的影视内容生态综合质量分析与可视化-基于数据挖掘的影视内容类型共现与口碑聚类分析系统
大数据·人工智能·python·数据挖掘·数据分析·毕业设计·课程设计
C^h18 分钟前
pytorch 适合初学者 0基础学习
人工智能·pytorch·python
小柯南敲键盘40 分钟前
跨马翻译:AI批量图片翻译工具,跨境电商视频字幕翻译与智能抠图一体搞定
人工智能·python·音视频
2601_962297251 小时前
Python里behave和pytest-bdd哪个更适合中大型项目?为什么?
python·bdd·行为驱动开发·behave·pytest-bdd
智塑未来3 小时前
2026年音频博客制作工具体验分享:三款不同方向的选择
音视频
YCOSA20253 小时前
系统工具使用检测.exe (仅供娱乐)
python·microsoft
2601_962295333 小时前
如何python实现网页的自动化
python·selenium·beautifulsoup·requests·网页自动化
ofoxcoding3 小时前
GPT Image 2.5 API 实战:Python 调用实现图片生成与编辑
人工智能·python·gpt·ai
张小姐的猫4 小时前
【AI大模型接入SDK】 —— Gemini接入封装
android·数据结构·数据库·c++·人工智能·python
Elastic 中国社区官方博客4 小时前
Elasticsearch Python DSL 客户端开发
大数据·数据库·python·elasticsearch·搜索引擎·全文检索