返回顶部
首页 > 资讯 > 后端开发 > Python >利用python爬取m3u8格式视频的具体实现
  • 948
分享到

利用python爬取m3u8格式视频的具体实现

2024-04-02 19:04:59 948人浏览 八月长安

Python 官方文档:入门教程 => 点击学习

摘要

目录m3u8原理脚本环境爬取步骤步骤的具体实现python细节处理说明参考代码总结 m3u8原理 当我们在网页播放视频时,网页向服务器发起一个以.m3u8结尾的连接请求,服

m3u8原理

当我们在网页播放视频时,网页向服务器发起一个以.m3u8结尾的连接请求,服务器会将具体的.ts文件链接路径发送给网页,网页接收这写链接路径,并向这些链接发送请求,请求到的资源就是.ts视频文件,他和我们常见的mp4文件只是封装格式的不同,而且.ts文件的大小很小,我爬取的.ts文件只有六秒的视频文件。之后网页将这些.ts文件整合在一起并进行播放。

脚本环境

python3.8、win 10

爬取步骤

Python要做的事情

1、选择可以爬取的视频网站

2、获取.m3u8的URL路径

3、通过requests.get获取.ts文件路径

4、保存.ts文件

5、合并.ts文件为mp4格式

步骤的具体实现

1、视频网站:https://www.3s8m.com/

2、随便选择一个视频进入播放页面,按下F12或者Fn+F12,打开审查元素,选择网络,刷新页面,暂停视频,在审查元素的网络页面选择XHR(没有可以直接在全部搜索m3u8),找到以m3u8结尾的数据包,点击获取URL

3、python 编写代码请求该URL,打印返回的数据;代码如下

import requests
url = “用第二部找到的URL填入”
results = requests.get(url) #发送get请求
results.encoding=“utf8” #设置编码格式,从网页源码中的head中可以看编码格式,这步不关键
print(results.text) #打印结果
results.close() #关闭

4、可以发现第3步中打印结果有很多URL地址,这些地址就是ts文件的地址,python下载ts文件

import request
url =“填入获取到的ts文件的URL”
results = requests.get(url)
results.encoding =“utf8”
with open("./a.ts",“wb”) as file:
file.write(results.content)
results.close()

5、合并全部的ts文件,调用python的os库,使用系统命令(copy /b a.ts+b.ts a.mp4)进行合并

import os
os.system(“copy /b a.ts+b.ts a.mp4”)

python细节处理说明

1、上述是通过手动查找获取的m3u8地址,那么为什么不用python去爬取,如果用python去爬取那么就需要对爬取的内容进行分析检索,我使用正则进行检索,也可以用xpath、bs4等方式进行检索。

2、一个m3u8地址会对应多个ts文件地址,我们应该对同一个m3u8的ts地址进行整体保存,下载后进行整合在一起变为一个m3u8对应一个视频

3、我们在浏览上述提供的网站时会发现,有些资源有不通播放源,有些版源不能用,那么我们在进行检索的时候可以多加一个进行源切换的操作

4、至于保存的文件名、文件路径这些自己返回,具体的代码下面会提供一个参考。

参考代码

使用代码的前提条件及说明:

1、在代码文件的目录下建一个名为ts_path的文件夹用于保存爬取过程中的临时文件(.ts文件)

2、保存的视频会存放与代码文件同一目录线下,视频名称为 集数.mp4

3、视频下载完,ts_path中的文件需要手动删除,由于之前使用os.system进行删除,误删了我不少源码,决定不加删除代码防止意外

4、代码只是用与上述提供的网站,其他网站需要自己进行修改

import requests
import re
import os

URL = "输入URL" #视频URL
resources = 0   #播放源选择

episode_urls = [] #存放章节URL
episode_names = [] #存放章节名称
m3u8_urls = []  #存放ts文件的URL

def get_episode(URL,resources): #获取章节名和路径
    results = requests.get(URL)
    results.encoding = "utf-8"
    all = results.text
    results.close()
    episode = re.findall('<ul class="dslist-group">.*?</ul>', all, flags=re.S)
    b = re.finditer('href=".*?</a>', episode[resources],flags=re.S)
    for i in b:
        i = i[0].replace('href="', "").replace('"', "")
        episode_urls.append("Https://www.3s8m.com" + i.split('>', 1)[0])
        episode_names.append(i.split('>', 1)[1].replace("</a>", ""))
    print(episode_names)
    print(episode_urls)


def get_ts(episode_urls): #获取ts文件路径
    for i in episode_urls:
        results = requests.get(i)
        results.encoding = "utf8"
        results = re.search('https:.*?\.m3u8', str(results.text),flags=re.S)
        m3u8_urls.append(results[0].replace("\\", ""))
    print(m3u8_urls)


def download_video(episode_names, m3u8_urls): #下载ts文件并整合为mp4文件
    for i in range(len(m3u8_urls)):
        try:
            print(m3u8_urls[i])
            results = requests.get(m3u8_urls[i])
            results.encoding = "utf8"
            all = re.finditer("https://.*?#", results.text, flags=re.S)
            results.close()
            cmd = []
            n = 0
            for j in all:
                n += 1
                ts_url = j[0].replace("\n#", "")
                cmd.append(f'{n}.ts')
                results = requests.get(ts_url,)
                results.encoding = "utf8"
                with open(f"./ts_path/{n}.ts", "wb") as file:
                    file.write(results.content)
                results.close()
                print(f"{n}.ts 下载完成")
            os.chdir("ts_path")
            if ("ts_path" in os.getcwd()):
                cmd = "+".join(cmd)
                cmd = f"copy /b {cmd} {episode_names[i]}.mp4"
                os.system(cmd)
                os.system(f"move {episode_names[i]}.mp4 ../")
            os.chdir("../")
            print(f"{episode_names[i]}.mp4 下载成功")
        except Exception as e:
            print(e)
            exit(0)

if __name__ == '__main__':
    get_episode(URL, resources)
    get_ts(episode_urls)
    download_video(episode_names, m3u8_urls)

脚本跟目录

总结 

到此这篇关于利用python爬取m3u8格式视频的文章就介绍到这了,更多相关python爬取m3u8格式视频内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: 利用python爬取m3u8格式视频的具体实现

本文链接: https://lsjlt.com/news/119856.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 利用python爬取m3u8格式视频的具体实现
    目录m3u8原理脚本环境爬取步骤步骤的具体实现python细节处理说明参考代码总结 m3u8原理 当我们在网页播放视频时,网页向服务器发起一个以.m3u8结尾的连接请求,服...
    99+
    2024-04-02
  • Python爬虫小练习之爬取并分析腾讯视频m3u8格式
    目录普通爬虫正常流程:环境介绍分析网站开始代码导入模块数据请求提取数据遍历保存数据运行代码普通爬虫正常流程: 数据来源分析 发送请求 获取数据 解析...
    99+
    2024-04-02
  • Python爬虫之m3u8文件里提取小视频的正确姿势
    目录前言1. HLS协议与m3u8文件3. 合成mp4文件4. 完整代码5. 结束语前言   在网上爬取的小视频(.ts格式)打不开怎么搞?使用IDM下载有时候还会出现数据受法律保护,IDM无...
    99+
    2022-06-02
    Python提取m3u8文件小视频 Python m3u8视频
  • Python+Selenium实现短视频热点爬取
    目录涉及知识点目标分析1. 分析热榜目录2.分析视频播放页面3. 分析弹出框核心代码1. 遍历热点目录2. 获取真实短视频url3. 下载视频4. 关闭弹出的登录窗口5. 保存日志示...
    99+
    2024-04-02
  • android 获取视频,图片缩略图的具体实现
    1、获取视频缩略图有两个方法(1)通过内容提供器来获取(2)人为创建缩略图 (1)缺点就是必须更新媒体库才能看到最新的视频的缩略图 [java] 代码如下:  &nb...
    99+
    2022-06-06
    图片 缩略图 Android
  • Python+Selenium怎么实现短视频热点爬取
    本篇内容介绍了“Python+Selenium怎么实现短视频热点爬取”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!涉及知识点selenium...
    99+
    2023-06-30
  • 利用Golang和FFmpeg实现视频格式转换的方法
    要利用Golang和FFmpeg实现视频格式转换的方法,你可以按照以下步骤进行操作:1. 安装FFmpeg:首先需要在计算机上安装F...
    99+
    2023-10-08
    Golang
  • Python格式化输出的具体实现
    目录“%”的使用字符串输出(%s)浮点数输出(%f)format的使用位置匹配格式转换高阶用法format变形用法“%”的使用 格式符...
    99+
    2024-04-02
  • Django实现视频播放的具体示例
    view视图 import re import os import mimetypes from wsgiref.util import FileWrapper from djang...
    99+
    2024-04-02
  • 利用Python实现普通视频变成动漫视频
    目录容我废话一下一、思路流程二、图像转动漫三、视频帧读取与视频帧写入容我废话一下 最近几个月,毒教材被曝光引发争议,那些编写度教材的人着实可恶。咱程序员也没有手绘插画能力,但咱可以借...
    99+
    2024-04-02
  • 如何实现python爬虫爬取视频时实现实时进度条显示
    目录一、全部代码展示二、解释1.with closingwith用法(实现上下文管理)closing用法(完美解决上述问题)2.文件流stream3.response.headers...
    99+
    2024-04-02
  • 以视频爬取实例讲解Python爬虫神器Beautiful Soup用法
    1.安装BeautifulSoup4 easy_install安装方式,easy_install需要提前安装 easy_install beautifulsoup4 pip安装方式,pip也需要提前...
    99+
    2022-06-04
    爬虫 神器 实例
  • python怎么利用第三方库爬取热门视频和音乐
    本篇内容介绍了“python怎么利用第三方库爬取热门视频和音乐”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!前言安装pippip3 ...
    99+
    2023-06-02
  • 利用Golang和FFmpeg实现视频帧提取的方法
    要利用Golang和FFmpeg实现视频帧提取,你可以使用Go的os/exec包来运行FFmpeg命令。下面是一个简单的示例代码:`...
    99+
    2023-10-08
    Golang
  • 基于python实现的抓取腾讯视频所有电影的爬虫
    我搜集了国内10几个电影网站的数据,里面近几十W条记录,用文本没法存,mongodb学习成本非常低,安装、下载、运行起来不会花你5分钟时间。 # -*- coding: utf-8 -*- # by a...
    99+
    2022-06-04
    爬虫 腾讯 电影
  • Python实现爬取某站视频弹幕并绘制词云图
    目录前言爬取弹幕爬虫基本思路流程导入模块代码制作词云图导入模块读取弹幕数据前言 [课 题]: Python爬取某站视频弹幕或者腾讯视频弹幕,绘制词云图 [知识点]: 1. 爬虫基本流...
    99+
    2024-04-02
  • 利用Python轻松实现视频转GIF动图
    目录前言1. 准备工作2. 初探3. 截取区域转动图4. 固定区域转动图5. 添加自定义文本前言 不知道大家是不是有过类似的经历,在看视频的时候觉得某段非常有意思想弄成动图,但是无从...
    99+
    2024-04-02
  • 如何使用Python实现视频去重的小工具
    同级目录下新建dup_videoimport json import os import shutil import cv2 import imagehash from PIL import Image from loguru impor...
    99+
    2023-05-14
    Python
  • Python利用pangu模块实现文本格式化小工具
    其实使用pangu做文本格式标准化的业务代码在之前就实现了,主要能够将中文文本文档中的文字、标点符号等进行标准化。 但是为了方便起来我们这里使用了Qt5将其做成了一个可以操作的页面应...
    99+
    2024-04-02
  • Python如何实现爬取某站视频弹幕并绘制词云图
    这篇文章主要为大家展示了“Python如何实现爬取某站视频弹幕并绘制词云图”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Python如何实现爬取某站视频弹幕并绘制词云图”这篇文章吧。前言[课 题...
    99+
    2023-06-22
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作