4.用python爬取保存在text中的格式为m3u8的视频

2024-05-08 22:36

本文主要是介绍4.用python爬取保存在text中的格式为m3u8的视频,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

  • 一、爬取过程详解
    • 1.寻找视频的m3u8链接
    • 2.从网页源码中寻找视频的m3u8链接的第二部分内容
    • 3.从视频的m3u8链接获取视频
  • 二、完整的代码


一、爬取过程详解

1.寻找视频的m3u8链接

这个文档承接了爬虫专栏的 第一节.python爬虫爬取视频网站的视频可下载的源url,首先我们打开一个爬取的可以播放的视频链接,然后按F12,然后选择Network,可以看到这个网站的视频不是mp4格式的视频,而是m3u8格式的视频流,这样就不能按照mp4格式那样直接下载了,就需要下载视频流的所有视频文件然后合并得到视频。
具体的,在打开了Network后,我们可以看到一个为m3u8的文件,点开这个m3u8,这个链接就是我们真实的要获取的视频信息的链接。如下图所示。可以看到,视频的链接(1)和和视频的请求链接(3)不是同一个,这是网站做了加密的处理,也是防止爬取的一种手段。但是这个其实很简单的可以寻找到规律。
我们以图中的链接为例https://v.cdnlz3.com/20240503/23140_990db975/2000k/hls/mixed.m3u8,我们打开多个爬取的不同的视频的下载链接,以同样的方式查看其m3u8链接会发现,会发现不同的视频的m3u8的链接其实都是很相似的,链接可以拆为三部分,https://v.cdnlz3.com/+20240503/23140_990db975/+ 2000k/hls/mixed.m3u8
其中第一部分和爬取的视频的下载链接的v.cdnlz3.com/share/3893f9f84823afc5f68339ed89374d81的前面是一致的,这个信息我们已经有了,然后第三部分所有视频m3u8链接都是相同的,这个我们也有了。唯一需要寻找的信息就是第二部分的那段了。所以接下来我们就从源代码中寻找这部分的内容。
在这里插入图片描述

2.从网页源码中寻找视频的m3u8链接的第二部分内容

我们直接在F12中源码中搜索我们要找的内容20240503/23140_990db975/,直接就定位到了我们要找的位置了。由于这个内容也是js中渲染出来的,所以我们还是要使用requests_html来渲染网站从而获得视频的第二部分信息。然后将三部分拼起来就是视频的m3u8的链接https://v.cdnlz3.com/20240503/23140_990db975/2000k/hls/mixed.m3u8
在这里插入图片描述

3.从视频的m3u8链接获取视频

我们执行一下代码:

	resp = requests.get(m3u8_url, headers)data = resp.textprint(data)

得到输出,输出的所有结尾为ts的名字就是我们要爬取的所有的ts视频,我们将上面的m3u8链接https://v.cdnlz3.com/20240503/23140_990db975/2000k/hls/mixed.m3u8的最后的mixed.m3u8换成爬取到的.ts就可以得到一个视频片段,然后按顺序依次获得所有的视频片段并拼接就可以得到完整的视频了。
在这里插入图片描述

二、完整的代码

from requests_html import HTMLSession
import requests_html
from bs4 import BeautifulSoup
import os
import requests
import randomif __name__ == '__main__':user_agent_list = [# 在这里可以写多个headers,然后随机选一个进行访问,这样可以防止频繁访问ip被封"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36",]headers = {'user-agent': random.choice(user_agent_list),'Connection': 'close'}# 放视频下载链接的文件夹路径url_path = 'D:\\project\\爬虫\\爬取的视频'# 下载视频的保存路径save_path = 'D:\\project\\爬虫\\video'# 读取放视频下载链接的文件夹下的所有text文件filenames = os.listdir(url_path)for filename in filenames:print(filename)with open(os.path.join(url_path, filename), 'r') as file:# 读取text文件内容content = file.read()# try:session = HTMLSession()first_page = session.get(content)first_page.html.render(sleep=1)  # 留出网页渲染的时间session.close()soup = BeautifulSoup(first_page.html.html, features="lxml")  # 这里要用lxmlvideo_url = soup.findAll('script', attrs={'type': 'text/javascript'})video_url = video_url[2].stringlines = video_url.splitlines()key_url = lines[16][24:49]# print(key_url)content = content.split('/')# 爬取的有的视频的播放链接为空,所以进行一下异常测试try:head_url = content[0]+ '//' + content[2]except:print('链接无效')# print(head_url)m3u8_url = f'{head_url}{key_url}2000k/hls/mixed.m3u8'# print(m3u8_url)resp = requests.get(m3u8_url, headers)data = resp.text#print(data)url2 = f'{head_url}{key_url}2000k/hls/'index = 0for ts in data.splitlines():if ts[0] != '#':print(ts)index = index + 1url_add = url2 + tsprint(url_add)res = requests.get(url_add, headers=headers)data = res.contentwith open(os.path.join(save_path, filename+'.ts'), 'ab+') as f:f.write(data)f.flush()print("写入第{}文件成功".format(index))print("视频{}下载完毕!!!".format(filename))

这篇关于4.用python爬取保存在text中的格式为m3u8的视频的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/971627

相关文章

使用Python删除Excel中的行列和单元格示例详解

《使用Python删除Excel中的行列和单元格示例详解》在处理Excel数据时,删除不需要的行、列或单元格是一项常见且必要的操作,本文将使用Python脚本实现对Excel表格的高效自动化处理,感兴... 目录开发环境准备使用 python 删除 Excphpel 表格中的行删除特定行删除空白行删除含指定

Python通用唯一标识符模块uuid使用案例详解

《Python通用唯一标识符模块uuid使用案例详解》Pythonuuid模块用于生成128位全局唯一标识符,支持UUID1-5版本,适用于分布式系统、数据库主键等场景,需注意隐私、碰撞概率及存储优... 目录简介核心功能1. UUID版本2. UUID属性3. 命名空间使用场景1. 生成唯一标识符2. 数

Python办公自动化实战之打造智能邮件发送工具

《Python办公自动化实战之打造智能邮件发送工具》在数字化办公场景中,邮件自动化是提升工作效率的关键技能,本文将演示如何使用Python的smtplib和email库构建一个支持图文混排,多附件,多... 目录前言一、基础配置:搭建邮件发送框架1.1 邮箱服务准备1.2 核心库导入1.3 基础发送函数二、

Python包管理工具pip的升级指南

《Python包管理工具pip的升级指南》本文全面探讨Python包管理工具pip的升级策略,从基础升级方法到高级技巧,涵盖不同操作系统环境下的最佳实践,我们将深入分析pip的工作原理,介绍多种升级方... 目录1. 背景介绍1.1 目的和范围1.2 预期读者1.3 文档结构概述1.4 术语表1.4.1 核

基于Python实现一个图片拆分工具

《基于Python实现一个图片拆分工具》这篇文章主要为大家详细介绍了如何基于Python实现一个图片拆分工具,可以根据需要的行数和列数进行拆分,感兴趣的小伙伴可以跟随小编一起学习一下... 简单介绍先自己选择输入的图片,默认是输出到项目文件夹中,可以自己选择其他的文件夹,选择需要拆分的行数和列数,可以通过

Python中反转字符串的常见方法小结

《Python中反转字符串的常见方法小结》在Python中,字符串对象没有内置的反转方法,然而,在实际开发中,我们经常会遇到需要反转字符串的场景,比如处理回文字符串、文本加密等,因此,掌握如何在Pyt... 目录python中反转字符串的方法技术背景实现步骤1. 使用切片2. 使用 reversed() 函

Python中将嵌套列表扁平化的多种实现方法

《Python中将嵌套列表扁平化的多种实现方法》在Python编程中,我们常常会遇到需要将嵌套列表(即列表中包含列表)转换为一个一维的扁平列表的需求,本文将给大家介绍了多种实现这一目标的方法,需要的朋... 目录python中将嵌套列表扁平化的方法技术背景实现步骤1. 使用嵌套列表推导式2. 使用itert

使用Docker构建Python Flask程序的详细教程

《使用Docker构建PythonFlask程序的详细教程》在当今的软件开发领域,容器化技术正变得越来越流行,而Docker无疑是其中的佼佼者,本文我们就来聊聊如何使用Docker构建一个简单的Py... 目录引言一、准备工作二、创建 Flask 应用程序三、创建 dockerfile四、构建 Docker

Python使用vllm处理多模态数据的预处理技巧

《Python使用vllm处理多模态数据的预处理技巧》本文深入探讨了在Python环境下使用vLLM处理多模态数据的预处理技巧,我们将从基础概念出发,详细讲解文本、图像、音频等多模态数据的预处理方法,... 目录1. 背景介绍1.1 目的和范围1.2 预期读者1.3 文档结构概述1.4 术语表1.4.1 核

Python使用pip工具实现包自动更新的多种方法

《Python使用pip工具实现包自动更新的多种方法》本文深入探讨了使用Python的pip工具实现包自动更新的各种方法和技术,我们将从基础概念开始,逐步介绍手动更新方法、自动化脚本编写、结合CI/C... 目录1. 背景介绍1.1 目的和范围1.2 预期读者1.3 文档结构概述1.4 术语表1.4.1 核