网页抓取解密(【】本次)

优采云 发布时间: 2022-01-31 13:08

  网页抓取解密(【】本次)

  俗话说,你感兴趣的地方,你就可以展示你的实力。所以有兴趣的学习可以事半功倍,更加努力,更加专心。显然,这个任务是在视频网站中抓取一些好看的小电影。地址不放(狗头救命),只记录过程。

  环境与依赖

  在PyCharm中创建一个项目会创建一个临时目录来存放环境和需要的包,所以把所有需要的包都添加到PyCharm中的Project Interpreter中,这个截图是这个项目的包列表,红框中为必备包, 也不知道其他包是干什么用的。

  

  开始我们的晚餐,爬取数据的第一步,我们需要解析目标网站,找到我们需要爬取视频的地址,F12打开开发者工具

  

  

  不幸的是,这个 网站 视频被打包并加载在 m3u8 视频片段中

  科普:m3u8文件本质上是一个播放列表,可能是Media Playlist,也可能是Master Playlist。但无论是哪种播放列表,其内部文本都使用 utf-8 编码。

  当m3u8文件作为媒体播放列表(Meida Playlist)时,其内部信息记录了一系列媒体剪辑资源,剪辑资源依次播放,充分展示多媒体资源。

  OK,本着“无不可解难”的原则,我们继续,还是开发者模式,从Elements模式切换到NetWork模式,去掉不必要的数据,我们找到了两个m3u8文件,一个key文件和一个ts文件

  分别点击后可以看到对应的地址

  

  OK,既然已经获取了地址,就可以开始我们的数据下载之路了。

  首先初始化,包括路径设置,伪装请求头等,然后我们通过循环下载所有的ts文件。至于如何定义循环次数,我们可以通过分析下载后的m3u8文件得到一个所有ts的列表,然后拼接地址再循环就可以得到所有的ts文件。

  一级

  #EXTM3U#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=500000,RESOLUTION=720x406500kb/hls/index.m3u8

  观察数据,而不是真实路径。二级路径可见第三行。结合我们对网站源码的分析,再次拼接字符串请求:

  二楼

  #EXT-X-VERSION:3#EXT-X-TARGETDURATION:2#EXT-X-MEDIA-SEQUENCE:0#EXT-X-KEY:METHOD=AES-128,URI="key.key"#EXTINF:2.000000,IsZhMS5924000.ts#EXTINF:2.000000,IsZhMS5924001.ts#EXT-X-ENDLIST

  但问题远非简单。下载的ts文件无法播放,是用AES的方式加密的,所以我们需要解密。m3u8加密方式可以在第二层地址下载的文件中找到:#EXT-X-KEY:METHOD=AES-128,URI="key.key"。采用 ASE-128 方法。

  我们应该感谢Python强大的模块功能,其中解密我们可以通过下载AES模块来实现。

  完成后,我们需要将所有ts合并成一个MP4文件。最简单的方法是在CMD命令下输入视频所在的路径,执行:

  copy /b *.ts fileName.mp4

  请注意,所有 TS 文件都需要按顺序排列。但是在这个项目中我们使用os模块直接合并和删除临时ts文件

  最后,简单的结合多线程来加速爬取

  完整代码:

  

  

  

  遇到的问题:

  一、一开始以为在电脑的Python环境下有一个模块就可以了,但最后发现需要在Pycharm的虚拟环境中添加对应的模块。

  二、没有名为 Crypto.Cipher 的模块,网上看了很多,最后通过添加pycryptodome模块解决了,电脑环境是Win10

  三、文件名不能收录感叹号、逗号或空格等特殊字符,否则执行合并命令时会显示错误。

  源码获取和群发文章乱码你学会了吗:1136192749

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线