Python爬虫实战第三例【三】【上】

零.实现目标

爬取视频网站视频

视频网站你们随意,在这里我选择飞某速(狗头保命)。

例如,作者上半年看过的“铃芽之旅”,突然想看了,但是在正版网站看要VIP,在盗版网站看又太卡了,没办法,那只好祭出我们的白嫖大法了(狗头保命

一.准备工作

1.打开网址

我们先用谷歌浏览器,找到我们的铃芽之旅的网址:

铃芽之旅 百度云网盘_在线播放-70看看

进入之后,是介个样子的:

2.寻找视频文件

右键页面空白处,找到我们的检查,进入开发者工具,点击Network网络)。

(不过这个网址有点针对我们,右键不了,我们使用"shift + ctrl + i"快捷键打开)

点击我们的Fetch/XHR

可以看到有.m3u8后缀文件也有.ts文件,小伙伴可能会说,这都是啥啊我也看不懂,不要急我们先来科普一下:

2.1什么是TS文件

TS(Transport Stream,传输流)是一种封装的格式,它的全称为MPEG2-TS。MPEG2-TS是一种标准数据容器格式,传输与存储音视频、节目与系统信息协议数据,主要应用于数字广播系统,譬如DVB、ATSC与IPTV

2.2什么是.m3u8文件

.m3u8文件一般与.ts文件同时出现,主要记录.ts文件的索引,即某一个.ts文件对应视频中的某一段时间,而所有的.ts文件合并在一起就是一整个视频啦。

我们观察两个.m3u8文件,进入它们的预览,查看谁的格式是对的,如下图所示:

这种格式就代表是准确的.m3u8文件。

此时,我们已经找到了需要的.m3u8文件,我们开始分析这个m3u8文件。

2.3分析.m3u8文件

首先我们要先查看文件的URL,我们查看它的请求头可以发现,并不需要我们修改什么,我们只需要赋值一整串即为我们需要的URL。

接下来,我们需要查看我们在后续爬虫中需要构造的headers,也就是请求头:

通过分析查看,上述的所有请求头并不需要人为修改,并且在爬取过程中也不会动态变化

为此,我们只需要将这些全部复制下来并构造成请求头即可。

三.构造爬取.m3u8文件代码

3.1获取.m3u8文件内容

通过第二步的分析,我们知道了URL和请求头,那还等什么,直接开始写代码吧!

import requests
import osdef get_ts_txt():#4请求URLurl = "https://s8.fsvod1.com/20230703/J6BHjLy3/1500kb/hls/index.m3u8"#请求头headers = {"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36"}#创建get请求对象reponse = requests.get(url=url,headers=headers)#获取get请求对象的返回值get_txt = reponse.textprint(get_txt)if __name__ == "__main__":get_ts_txt()

 值得注意的是,我们在headers构造中,并没有用全在第二步寻找到的请求头元素,这是因为在一般情况下我们只使用“User-Agent”来反爬就能成功了,如果不成功,我们再加上嘛,又不浪费时间。

效果图:

可以看到内容极其杂乱,并且不利于后面的使用,为此我们需要分析并提取出有效信息,也就是.ts信息。

3.2提取.m3u8中有效信息

仔细看可以发现,每个.ts文件之后跟着一个“”,为此我们可以使用正则表达式,来匹配出.ts文件名。

使用:“\b\w+\.ts\b”,即可匹配出对应的.ts文件。

为此,我们可以改下代码为如下格式:

import requests
import os
import redef get_ts_txt():#4请求URLurl = "https://s8.fsvod1.com/20230703/J6BHjLy3/1500kb/hls/index.m3u8"#请求头headers = {"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36"}reponse = requests.get(url=url,headers=headers)get_txt = reponse.text#正则匹配出.ts后缀数据ts_files = re.findall(r"\b\w+\.ts\b",get_txt)#将.ts数据写入到文件中中with open("get_ts.txt","w") as file:for i in ts_files:i = i + "\n"file.write(i)print("获取ts文件成功.")return ts_filesif __name__ == "__main__":print(get_ts_txt())

同时,我们还将对应的.ts文件名保存到一个.txt文件中,方便查看。

效果:

至此,我们已经成功获取所有.ts视频文件名了,接下来只需要构建对应的爬取代码下载即可啦~

四.构造爬取.ts文件代码

4.1分析.ts文件

我们在开发者工具中随便打开一个.ts文件(你也可以打开多个查看不同点),找到URL部分,例如我打开的这个:

通过打开多个.ts文件查看,可以发现所有的.ts文件的URL只有后缀是不同的,而后缀恰恰是这个.ts文件的名字,为此我们就可以构造爬取代码了。

4.2构造爬取.ts代码

在爬取.ts之前,我们先创建一个文件夹用来存放:

def create_filedir():path = os.getcwd() + "/爬取数据"if os.path.exists(path):print("\\爬取视频文件夹已存在,本次不创建.")else:os.mkdir(path)print("创建\\爬取文件夹成功.")

通过这串代码可以轻松创建一个文件夹。

接下来,我们来构造爬取.ts代码:

def down_video(item):#对item进行解包,提取出ts文件和ts文件索引index,ts = item[0],item[1]#拼接文件序号if 0 <= index <=9:index = "000" + str(index)elif 10 <= index <= 99:index = "00" + str(index)elif 100 <= index <= 999:index = "0" + str(index)else:index = str(index)#爬取视频URLURL = "https://s8.fsvod1.com/20230703/J6BHjLy3/1500kb/hls/"#请求头headers = {"authority":"s8.fsvod1.com","method":"GET","path":f"/20221207/10692_4308abda/2000k/hls/{ts}","scheme":"https","Accept":r"*/*","Accept-Encoding":"gzip,deflate,br,zstd","Accept-Language":"zh-CN,zh;q=0.9","Origin":"https://test3.gqyy8.com:4438","Sec-Ch-Ua":'"Chromium";v="122","Not(A:Brand";v="24","Google Chrome";v="122"',"Sec-Ch-Ua-Mobile":"?0","Sec-Ch-Ua-Platform":"Windows","Sec-Fetch-Dest":"empty","Sec-Fetch-Mode":"cors","Sec-Fetch-Site":"cross-site","User-Agent":"Mozilla/5.0(WindowsNT10.0;Win64;x64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/122.0.0.0Safari/537.36"}#拼接视频urlURL = URL + "/" + tstry:r = requests.get(url=URL,headers=headers,timeout=10)with open(f"{os.getcwd()}/爬取数据/" + index + ".ts", "wb") as file:file.write(r.content)except Exception as e:if not file_flag:fil_list.append([int(index),ts])print(index,"写入失败,原因",e,sep="->")returnprint(index,"写入成功.",sep="->")

因为.ts文件是乱码且无序的,为此我们需要人为的给.ts文件按照下载的顺序进行重命名

效果图:

在本次文章中,我们初步完成了怎么爬取一个.ts文件,下一章我们讲解怎么一次性爬取所有的.ts文件。

好了,我们先讲到这里,后面请期待:“爬虫实战第三例【三】【下】

地址是:Python爬虫实战第三例【三】(下)-CSDN博客

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/724266.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2024年腾讯云轻量16核32G28M服务器优惠价格3468元15个月

2024年腾讯云轻量16核32G28M服务器优惠价格3468元15个月&#xff0c;380GB SSD云硬盘&#xff0c;6000GB月流量。 一张表看懂腾讯云服务器租用优惠价格表&#xff0c;一目了然&#xff0c;腾讯云服务器分为轻量应用服务器和云服务器CVM&#xff0c;CPU内存配置从2核2G、2核4G、…

Linux下du命令和df命令的使用

du命令作用是估计文件系统的磁盘已使用量&#xff0c;常用于查看文件或目录所占磁盘容量。df命令是统计磁盘使用情况&#xff0c;可以用来查看磁盘已被使用多少空间和还剩余多少空间。du命令语法du [选项] [文件或目录名称]参数&#xff1a;-a&#xff1a;--all&#xff0c; 列…

C#,数值计算,求解微分方程的预测校正法(修正欧拉法)算法与源代码

Leonhard Euler 1 微分方程 微分方程&#xff0c;是指含有未知函数及其导数的关系式。解微分方程就是找出未知函数。 微分方程是伴随着微积分学一起发展起来的。微积分学的奠基人Newton和Leibniz的著作中都处理过与微分方程有关的问题。微分方程的应用十分广泛&#xff0c;可…

To 有缘看到的朋友,To myself

To 有缘看到的朋友&#xff0c;To myself 零、00时光宝盒 我们生而为人&#xff0c;而不是什么神仙妖怪&#xff0c;自然逃不脱凡尘种种不易。 世界并不完美&#xff0c;面对很多事情我们都很无奈甚至悲哀&#xff0c;但生活总要继续下去&#xff0c;当困难悄悄地来临&#xff…

【vue3之组合式API】

组合式API 一、setup1.写法2.如何访问3.语法糖4.同步返回对象 二、reactive()和ref()1.reactive()2.ref() 三、computed四、watch函数1侦听单个数据2.侦听多个数据3. immediate4. deep5.精确侦听对象的某个属性 五、生命周期函数六、组件通信1.父传子2. 子传父 七、模版引用1. …

shell脚本一键部署docker

Docker介绍 Docker 是一个开源的平台&#xff0c;用于开发、交付和运行应用程序。它利用容器化技术&#xff0c;可以帮助开发人员更轻松地打包应用程序及其依赖项&#xff0c;并将其部署到任何环境中&#xff0c;无论是开发工作站、数据中心还是云中。以下是 Docker 的一些关键…

【Linux】软件包管理器yum

目录 一、yum是什么&#xff1f; 二、查看软件包 三、安装与卸载软件 1、如何安装软件 2、如何卸载软件 四、yum源的配置 一、yum是什么&#xff1f; 在Linux下安装软件, 一个通常的办法是下载到程序的源代码, 并进行编译, 得到可执行程序. 但是这样太麻烦了, 于是有些人…

如何在华为云服务器部署安防监控EasyCVR平台?

随着视频技术的快速发展&#xff0c;安防视频汇聚平台EasyCVR可支持的协议也在不断拓展&#xff0c;平台兼容多类型的协议接入&#xff0c;包括&#xff1a;国标GB28181、RTSP/Onvif、RTMP&#xff0c;以及厂家的私有协议与SDK&#xff0c;如&#xff1a;海康ehome、海康sdk、大…

YOLOv7创新改进:SPPF创新涨点篇 | SPPELAN:SPP创新结合ELAN ,效果优于SPP、SPPF| YOLOv9

💡💡💡本文独家改进:新颖SPPF创新涨点改进,SPP创新结合ELAN,来自于YOLOv9,助力YOLOv7,将SPPELAN代替原始的SPPF 💡💡💡在多个私有数据集和公开数据集VisDrone2019、PASCAL VOC实现涨点 收录 YOLOv7原创自研 https://blog.csdn.net/m0_63774211/category…

C语言常见关键字:一文打尽

关键字 1. 前言2. 什么是关键字3. extern-声明外部符号4. auto-自动5. typedef-类型重定义&#xff08;类型重命名&#xff09;6. register-寄存器6.1 存储器6.2 register关键字的作用 7. static-静态7.1 static修饰局部变量7.1.1 代码对比7.1.2 原理分析 7.2 static修饰全局变…

Java中常见延时队列的实现方案总结

&#x1f3f7;️个人主页&#xff1a;牵着猫散步的鼠鼠 &#x1f3f7;️系列专栏&#xff1a;Java全栈-专栏 &#x1f3f7;️个人学习笔记&#xff0c;若有缺误&#xff0c;欢迎评论区指正 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&…

2024/3/6打卡最短编辑距离---线性DP

题目&#xff1a; 给定两个字符串 A 和 B&#xff0c;现在要将 A 经过若干操作变为 B&#xff0c;可进行的操作有&#xff1a; 删除–将字符串 A 中的某个字符删除。插入–在字符串 A 的某个位置插入某个字符。替换–将字符串 A 中的某个字符替换为另一个字符。 现在请你求出&a…

springboot基于java的中医院门诊挂号诊断就诊系统ssm+jsp

主要研究内容&#xff1a; 医院门诊挂号系统分为护士&#xff0c;医生&#xff0c;药房&#xff0c;收费&#xff0c;管理员等权限。 护士&#xff1a;挂号、退号、查询病人。挂号——就诊科室(发热门诊、骨科、妇科等等)&#xff0c;就诊医生数据库获取&#xff0c;挂号类型—…

测试遍历1e5,1e8数组耗时

1e8大概0.38秒&#xff0c;即380ms 1e5耗时1ms左右&#xff1a; 代码使用方式来自&#xff1a;clock - C Reference (cplusplus.com)

python_读取txt文件绘制多条曲线III

先把文件中指定列&#xff0c;去重提取出来&#xff0c;然后根据指定列去匹配数据&#xff0c;最后完成多条数据的绘图&#xff1b; import matplotlib.pyplot as plt import re from datetime import datetime from pylab import mplmpl.rcParams["font.sans-serif"…

【python 1】----Pytest基础知识

定义 用于编写和执行Python测试全功能测试框架&#xff08;工具&#xff09;&#xff0c;是一个第三方库 安装 pip insatll pytest 安装pytest --version 校验 pytest的组成构成 不写调用语句也可以执行函数内容 在用例运行语句里面&#xff1a; -s:指的是开启与终端的…

vue3 setup函数与setup语法糖之间的区别

普通setup函数构建的组件 import {ref} from vueexport default {setup(){const countref(0)const handleUpdate()>{count.value}return{count,handleUpdate}}} </script>使用setup语法糖构建的组件 <script setup>import {ref} from vueconst countref(0)con…

【Linux】常见指令1(ls指令、pwd指令、cd指令、touch指令、mkdir指令、rmdir指令、man指令、cp指令、mv指令、cat指令)

目录 01.ls指令与ll指令 02.pwd指令 03.cd指令 04.touch指令 05.mkdir指令 06.rmdir指令&&rm指令 07.man指令 08.cp指令 09.mv指令 10.cat指令 01.ls指令与ll指令 ls指令&#xff1a; 原型&#xff1a;list directory contents 语法&#xff1a;ls[选项][目录…

nodejs安装教程(及过程中的易错)

nodejs&#xff1a;Nodejs 是基于 Chrome 的 V8 引擎开发的一个 C 程序&#xff0c;目的是提供一个 JS 的运行环境。 npm&#xff1a;npm 是 Node Package Manager 的缩写&#xff0c;意思是 Node 的包管理系统&#xff0c;是最大的软件包仓库 下载nodejs 首先我们需要在node…

C# SwinV2 Stable Diffusion 提示词反推 Onnx Demo

目录 介绍 效果 模型信息 项目 代码 下载 C# SwinV2 Stable Diffusion 提示词反推 Onnx Demo 介绍 模型出处github地址&#xff1a;https://github.com/SmilingWolf/SW-CV-ModelZoo 模型下载地址&#xff1a;https://huggingface.co/SmilingWolf/wd-v1-4-swinv2-tagg…