Warning:本文章旨在进行技术性探讨,不作为爬虫手段获得付费版权资源来进行商业性的目的,如有侵权,纯属巧合。
用到的工具:Fiddler,格式工厂,HLS流媒体播放器
最近疫情期间,我哥要给他设计师徒弟们看一些国外的建筑设计作品找找灵感。可惜,国内不能直接访问,我哥问我从技术的角度能否抓取视频。作为一个android工程师,这个提议引起了我的兴趣。
话不多说,上个视频网站实现我们的思路。
这是国外一个视频网站,视频不提供下载。
我们在浏览器中按F12键打开控制台。如意料中的一样,找不到视频资源的相关信息。
这个时候我们上工具,Flidder网络抓包工具。
注意:关于Https网站抓包得到的全是如图443的错误,什么资源都抓不到。请卸载Flidder里的相关证书,并重新安装。
重新刷新网站,发现出现好多请求。
点击这些请求,发现返回的url地址。
很显然是通过转码的。我们拿着这些unicode地址转中文。就得到如下图:
可以找到和视频相关的播放信息,包括视频的id,播放时长等等。我有想着是否该视频的地址的由一些字段拼接的,然后播放的时候地址拼在一起,因为移动开发经常这么干,哈哈。然后我们并没有从j字段里找到什么规律。
接着看抓包的地址,突然发现一个以m3u8结尾的连接引起我的关注。
m3u8是什么?
M3U8 是 Unicode 版本的 M3U,用 UTF-8 编码。"M3U" 和 "M3U8" 文件都是苹果公司使用的 HTTP Live Streaming(HLS) 协议格式的基础,这种协议格式可以在 iPhone 和 Macbook 等设备播放。
知道HLS就知道这是个流媒体播放器能直接支持的格式了。我们如果能从视频网站中找到这个跟m3u8相关的请求,就可以拿到这个资源文件。
浏览器直接打开地址,果然将m3u8文件下载下来了。原以为下载完成就能拿到视频地址,然而事情没那么简单,以文本格式打开文件是这样的:
没有发现以http或者https开头的地址,却又再次发现m3u8地址结尾的信息。看来是嵌套了好几层,网站提供了2种清晰度的视频。将新的文件地址替换掉原域名的文件地址,又下载了一个m3u8的文件,打开是这样的:
这就一目了然了。ts格式就是视频的格式了。该网站将一个视频切割成了33个片段,我们要想完整的视频,就需要将每个视频下载下来,然后拼接。
话不多说,将文件地址在之前下载的m3u8的域名结尾替换掉就能下载下碎片视频。下载完成后,我们用到了格式工厂将视频依次拼接,大功告成。