CSDN个人主页: 高智商白痴
原文地址: https://blog.csdn.net/qq_44700693/article/details/109124334?utm_source=app
很多人学习python,不知道从何学起。
很多人学习python,掌握了基本语法过后,不知道在哪里寻找案例上手。
很多已经做案例的人,却不知道如何去学习更加高深的知识。
那么针对这三类人,我给大家提供一个好的学习平台,免费领取视频教程,电子书籍,以及课程的源代码!??¤
QQ群:623406465
日常跳转:
导入
前段时间我已经将B站的爬取方法做了一个总结:Python爬虫:哔哩哔哩(bilibili)视频下载。
这一次,我将继续分享 AcFun 视频网站的解析,其实相对于B站,A站的反爬机制更为简单:
为了能够方便的解析与说明,就肯定会拿一个例子来才好的哇:
【仙女UP特辑】AcFun Family Party ——成都站(今天又是
lsp的一天呢~~)
直接在浏览器端打开并抓包该链接发现,在 XHR 的数据下,第一条(又或者某一次)的请求就加载了视频的真实请求链接:
在找遍了 XHR 数据无果后,我决定去看一看网页源码:
当我用 m3u8 文件的请求链接在网页源码中搜索后发现,链接就出现在源码中:
为了后续能够选择清晰度,所以我还进行了清晰度的爬取:
到此,我们已经可以拿到视频的 m3u8 文件的地址,那么现在就来开始解决之前遗留的一个小问题:如何通过 m3u8 文件下载视频?
首先,我们拿到一个 m3u8 文件来作为案例:
为了方便,在这里我手动的写了一个 m3u8 文件来作为例子。
通过以上方法,我们就可以通过 m3u8 文件来获取每一段的视频链接了,接下来,我们再将下载的功能进行完善:
下载的基本思路还是和我以前的一篇文章的思路一样:Python爬虫:用最普通的方法爬取ts文件并合成为mp4格式
代码注解:
- 1、为了最后得到的只有视频,所以在视频下载完后,自动的将当前视频的 m3u8 文件进行了删除操作。
- 2、
line.replace('\n', '')
的原因:读取到的 m3u8 文件的每一行结尾都含有一个 " \n "。
终于,到现在我们已经可以整合代码并运行看一看了:
效果:
既然要从番剧入手,那肯定就还是拿一个例子来说明吧:
租借女友 (又是
lsp的呢~~)
针对这部番剧,我们直接从单个视频解析方式来获取经验 -----> 直接从网页源码开始:
代码注解:
- flag :用于判断是否已经选择了下载时的清晰度。
- qua : 保存选择的清晰度。
- rel_path :更改番剧下载的位置(番剧名的文件夹下)。
- first_json = json.loads(re.findall(‘window.pageInfo = window.? = (.?)};’, html)[0] + ‘}’, strict=False) :更改视频信息的匹配正则表达式,可以同时用来匹配单个视频和番剧视频。
知道了某一集怎么下载,总不可能要每一集都要去手动输入链接吧!!!遇到只有几集的番剧还好,要是遇到这样的:
同样的,我们还是从网页源码出发:
我们很容易的就可以发现:
- https://www.acfun.cn/bangumi/aa6002917 :番剧的主页链接。
- 36188 :一串不知道有什么用的数字,不过我发现它并没有什么用,都是固定的:
举几个例子:
租借女友 :第2话 前女友和女友:https://www.acfun.cn/bangumi/aa6002917_36188_1740687
租借女友 :第3话 海和女友:https://www.acfun.cn/bangumi/aa6002917_36188_1741409
镇魂街 :第2话:https://www.acfun.cn/bangumi/aa5020166_36188_232386
…
同样的点回第一集时也可以看到第一集的链接也可以写成:
镇魂街 :第1话:https://www.acfun.cn/bangumi/aa5020166_36188_232383
租借女友 :第1话 租借女友:https://www.acfun.cn/bangumi/aa6002917_36188_1739760
…
- 1740687 :每一集的 ID ,在源码中以 itemId 字段保存。
于是,我们就可以写出获取每一集视频链接的代码:
代码注解:
- self.aa :为了更好的适应性,简单的解决一下,传入某一集的链接,但是可以下载全番剧的情况。
全部源码:
效果示例: