目录
一、视频网站的工作原理
二、抓取视频步骤
2.1、找到m3u8文件
2.2、把m3u8下载到ts文件
2.3、ts文件合并为mp4文件
古老的视频网站的视频一般是在源码放一个,用户点击播放视频,会跳转到src的连接进行视频资源的获取进行播放。
缺点:视频加载速度慢
正常的视频网站,用户上传视频或者获取到的视频资源-->转码(把视频进行处理,分成2K,1080,标清等画质)-->切片处理(把一个完整的视频进行切片,例如一个60分钟的视频,分割成很多个几十秒的视频),用户在移动进度条时,会加载这一部分的切片视频内容(这时不必加载整个视频)。
但需要一个文件进行记录:1、视频播放顺序 2、视频存放的路径-->保存这些东西的文件-->统一规定为M3U8文件-->但本质上是文本
优点:视频加载速度快
关键词:转码、切片、
1)向页面发起请求,看页面源代码是否在video标签(有时不是video标签,是video被其它标签包含)包含了m3u8链接,包含则直接请求到该链接即可;
2)页面源代码不包含m3u8链接(找video),则使用抓包工具,抓取XHR类型的包(js处理的数据包),查看哪一个链接存在m3u8的具体链接,请求到该链接即可获取m3u8文件;
3)下面是一种m3u8的反爬过程
假设我们访问了目标网站的54812-1-1.html文件,客户端发起一个请求,服务器响应请求返回数据包(这时的数据包包含了动态生成的一个note=xxxxx),我们在点击播放视频时,会向服务器在次发送一个请求(这时的请求包含了服务器第一次返回给我们的note=xxxxx),服务器响应(这时服务器会对比我们带过去的noet=xxxx是不是和第一次的相同,相同则返回内容,不同则重复第一次请求的过程,或者不返回视频)并把视频文件返回,视频开始播放。
问题:
第一次直接请求到m3u8文件可能会被反爬,拿不到文件
解决办法:
在请求时,应该先向服务器发起一次请求拿到服务器给我们的note=xxxx,然后在第二次发送请求拿到m3u8文件;
1)获取到了m3u8文件链接,直接发送请求即可获取到m3u8文件;
2)使用文件的I/O操作即可(注意要分好每一部分视频的顺序,最好有规律命名);
3)在进行文件的I/O操作时,数量很多,需要提速,使用多线程、携程、多进程等方法提速;
4)保存的文件后缀应该是.ts。
1)存在很多个小的ts文件,需要合成一个大的mp4文件-->剪辑工具合成(quicktime);
2)代码合成(这个不知道咋弄);