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的视频
文章目录 一、爬取过程详解1.寻找视频的m3u8链接2.从网页源码中寻找视频的m3u8链接的第二部分内容3.从视频的m3u8链接获取视频 二、完整的代码 一、爬取过程详解 1.寻找视频的m3u8链接 这个文档承接了爬虫专栏的 第一节.python爬虫爬取视频网站的视频可下载的源url࿰…...
240503-关于Unity的二三事
240503-关于Unity的二三事 1 常用快捷键 快捷键描述CtrlP播放/停止Ctrl1打开Scene窗口Ctrl2打开Game窗口Ctrl3打开Inspect窗口Ctrl4打开Hierarchy窗口Ctrl5打开Project窗口Ctrl6打开Animation窗口 2 关联VisualStudio2022 3 节约时间:将最新声明的参数移动到最上…...
顺序栈的操作
归纳编程学习的感悟, 记录奋斗路上的点滴, 希望能帮到一样刻苦的你! 如有不足欢迎指正! 共同学习交流! 🌎欢迎各位→点赞 👍 收藏⭐ 留言📝既然选择了远方,当不负青春…...
STM32 各外设GPIO配置
高级定时器TIM1/TIM8 通用定时器TIM2/3/4/5 USART SPI I2S I2C接口 BxCAN SDIO ADC/DAC 其它I/O功能...
React-hooks相关知识点总结
前言 随着函数式组件的不断流行,React从类式组件走上了函数式组件的时代,那么在新的React函数式编程中,hooks也成为了这个时期最广泛使用的一种方式。现在让我们总结下react hooks吧。 Hooks 是什么 react-hooks是react16.8以后,…...
20240508日记
今天工作内容: 1.二号机S3点位焊接测试,调整位置精度。 2.一号机送针位置调整 3.自定义焊接功能测试 4.EAP服务启动测试 明日计划: 1.EAP流程修改功能开发 1.1 Read Barcode Complete 事件,上传料盘码和设备ID,等EA…...
Web实操(6),基础知识学习(24~)
1.[ZJCTF 2019]NiZhuanSiWei1 (1)进入环境后看到一篇php代码,开始我简单的以为是一题常规的php伪协议,多次试错后发现它并没有那么简单,它包含了基础的文件包含,伪协议还有反序列化 (2&#x…...
JavaSE——方法详解
1. 方法的概念 方法就是一个代码片段 . 类似于 C 语言中的 " 函数 " 。 方法存在的意义 : 1. 是能够模块化的组织代码(当代码规模比较复杂的时候). 2. 做到代码被重复使用, 一份代码可以在多个位置使用. 3. 让代码更好理解更简单. 4. 直接调用现有方法开发, 不…...
iBarcoder for Mac:一站式条形码生成软件
在数字化时代,条形码的应用越来越广泛。iBarcoder for Mac作为一款专业的条形码生成软件,为用户提供了一站式的解决方案。无论是零售、出版还是物流等行业,iBarcoder都能轻松应对,助力用户实现高效管理。 iBarcoder for Mac v3.14…...
学习R语言第六天
文章目录 绘制图形的方式计算字符的数量的方式提取字符变量的方式根据名称查询前缀的方式转化大小写的方式大写小写的获取数据长度的方式生成一个序列的方式从1开始到10,每次增加2从1到3 重复2次将函数到数据框中的方式生成数据rnorm 生成30行数据,nrow是6列数据计算…...
LeetCode算法题:9. 回文数(Java解法)
给你一个整数 x ,如果 x 是一个回文整数,返回 true ;否则,返回 false 。 回文数 是指正序(从左向右)和倒序(从右向左)读都是一样的整数。 例如,121 是回文,…...
VALSE 2024 Workshop报告分享┆面向实际场景体验的多模态大模型DeepSeek VL
2024年视觉与学习青年学者研讨会(VALSE 2024)于5月5日到7日在重庆悦来国际会议中心举行。本公众号将全方位地对会议的热点进行报道,方便广大读者跟踪和了解人工智能的前沿理论和技术。欢迎广大读者对文章进行关注、阅读和转发。文章是对报告人…...
RFC 791 (1)-导论
目录 浅论 IP是啥 IP可以管啥 操作 范例查看 提示:本系列将会开始RFC文档阅读,这里会给出我的一些笔记 浅论 我们这篇RFC文档描述的是IP和ICMP协议,我们都知道,在传统的OSI七层或者是现在被简化的五层:应用层&…...
力扣hot100:199. 二叉树的右视图/437. 路径总和 III(dfs/回溯/树上前缀和/哈希表)
文章目录 一、LeetCode:199. 二叉树的右视图二、LeetCode:437. 路径总和 III 一、LeetCode:199. 二叉树的右视图 LeetCode:199. 二叉树的右视图 差点因为是个中等题打退堂鼓。其实比较简单。 右视图实际上只需要找到,…...
浅谈 HTTPS
文章目录 HTTPS 简介HTTPS 特点HTTPS 缺点与 HTTP 的区别HTTPS 工作流程1. 服务端生成密钥对2. 服务端申请数字证书3. 服务端发送数字证书4. 客户端验证数字证书5. 客户端解析证书内容6. 客户端传送加密信息7. 服务端解密信息8. 双方协商生成会话密钥并交换9. 使用会话密钥进行…...
js手动实现unshift
js 手动实现数组的unshift unshift是什么? unshift() 方法可向数组的开头添加一个或更多元素,并返回新的长度。 注意: 该方法将改变数组的数目。 语法: array.unshift(item1,item2, ..., itemX)代码实现 首先,在…...
Failed to get DISPLAY: Error: All configured authentication methods failed 解决方法
Vscode一连接远程服务器就报错: 这个时候我们是无法使用Xming显示图像的。 尝试后发现,Windows电脑能够ping通服务器ip,但是服务器ping不通Windows电脑: 在网上查攻略,设置Windows电脑ip地址白名单,但…...
随便聊一下 显控科技 控制屏 通过 RS485 接口 上位机 通讯 说明
系统搭建: 1、自己研发的一个小系统(采集信号,将采集的信号数字化)通过COM口,连接显控屏 COM3 口采用 485 协议送到显控屏(显控科技)的显示屏展示出来)。 2、显控屏 将 展示的数据…...
C++学习笔记(多线程)
Multithreading 1、线程的基本操作1.1、创建线程1.2、等待线程和分离线程1.3、获取线程id 2、互斥锁3、条件变量4、例程 1、线程的基本操作 从C11开始推出关于多线程的库和函数,相比于Linux所配套的资源,C11提供的函数更加容易理解和操作,对…...
解决Redis的键值前出现类似\xAC\xED\x00\x05t\x00*这样的字符序列
文章目录 1.问题2.解决方法3.StringRedisTemplate和RedisTemplate的区别 1.问题 在使用RedisTemplate对Redis进行操作时,发现Reids键值对前有\xAC\xED\x00\x05t\x00*这样的字符序列 如图所示: 虽说不影响使用,但是听影响观感的 2.解决方法 查找了很多方法,可以指定RedisTem…...
在软件开发中正确使用MySQL日期时间类型的深度解析
在日常软件开发场景中,时间信息的存储是底层且核心的需求。从金融交易的精确记账时间、用户操作的行为日志,到供应链系统的物流节点时间戳,时间数据的准确性直接决定业务逻辑的可靠性。MySQL作为主流关系型数据库,其日期时间类型的…...
OpenLayers 可视化之热力图
注:当前使用的是 ol 5.3.0 版本,天地图使用的key请到天地图官网申请,并替换为自己的key 热力图(Heatmap)又叫热点图,是一种通过特殊高亮显示事物密度分布、变化趋势的数据可视化技术。采用颜色的深浅来显示…...
简易版抽奖活动的设计技术方案
1.前言 本技术方案旨在设计一套完整且可靠的抽奖活动逻辑,确保抽奖活动能够公平、公正、公开地进行,同时满足高并发访问、数据安全存储与高效处理等需求,为用户提供流畅的抽奖体验,助力业务顺利开展。本方案将涵盖抽奖活动的整体架构设计、核心流程逻辑、关键功能实现以及…...
通过Wrangler CLI在worker中创建数据库和表
官方使用文档:Getting started Cloudflare D1 docs 创建数据库 在命令行中执行完成之后,会在本地和远程创建数据库: npx wranglerlatest d1 create prod-d1-tutorial 在cf中就可以看到数据库: 现在,您的Cloudfla…...
视频字幕质量评估的大规模细粒度基准
大家读完觉得有帮助记得关注和点赞!!! 摘要 视频字幕在文本到视频生成任务中起着至关重要的作用,因为它们的质量直接影响所生成视频的语义连贯性和视觉保真度。尽管大型视觉-语言模型(VLMs)在字幕生成方面…...
反射获取方法和属性
Java反射获取方法 在Java中,反射(Reflection)是一种强大的机制,允许程序在运行时访问和操作类的内部属性和方法。通过反射,可以动态地创建对象、调用方法、改变属性值,这在很多Java框架中如Spring和Hiberna…...
九天毕昇深度学习平台 | 如何安装库?
pip install 库名 -i https://pypi.tuna.tsinghua.edu.cn/simple --user 举个例子: 报错 ModuleNotFoundError: No module named torch 那么我需要安装 torch pip install torch -i https://pypi.tuna.tsinghua.edu.cn/simple --user pip install 库名&#x…...
无人机侦测与反制技术的进展与应用
国家电网无人机侦测与反制技术的进展与应用 引言 随着无人机(无人驾驶飞行器,UAV)技术的快速发展,其在商业、娱乐和军事领域的广泛应用带来了新的安全挑战。特别是对于关键基础设施如电力系统,无人机的“黑飞”&…...
ubuntu22.04有线网络无法连接,图标也没了
今天突然无法有线网络无法连接任何设备,并且图标都没了 错误案例 往上一顿搜索,试了很多博客都不行,比如 Ubuntu22.04右上角网络图标消失 最后解决的办法 下载网卡驱动,重新安装 操作步骤 查看自己网卡的型号 lspci | gre…...
FFmpeg avformat_open_input函数分析
函数内部的总体流程如下: avformat_open_input 精简后的代码如下: int avformat_open_input(AVFormatContext **ps, const char *filename,ff_const59 AVInputFormat *fmt, AVDictionary **options) {AVFormatContext *s *ps;int i, ret 0;AVDictio…...
