猿人学Python

python做个小视频批量下载器

这是猿人学读者:帅锅锅的第二篇投稿,快来向我投稿,每篇稿费300-500元噢。

远程上班第一天,老板让我下载一些关于疫情防控的教育视频,给各位同事群发一下,我起初以为很简单,直接在腾讯视频上下载不就行了,但是最后发现在腾讯下载的视频是QLV格式的,还必须要腾讯的播放器,这也太不够意思了,于是我又想到了you-get,但这个工具只能一个一个下载,也达不到我想要的效果,最终我还是决定用python做个爬虫工具,彻底解决小视频批量下载问题。

效果如下:

设计思路:

用PyQT5制作可视化界面,输入下载关键词、保存路径等信息,将批量下载程序与开始按钮绑定,将搜索的关键词视频保存到预定路径。

第一步:编写python批量下载腾讯视频程序

以“病毒 教育”关键词为例

Image

主要分为以下3个步骤:

1.在当前网页中找到每个视频的html地址,视频总共有20页,每页可以通过变化url的参数可以得到,打开浏览器自带流量分析工具

Image

先点击左上角清理按钮,再点击下一页,找到和网页变化有关的url

Image

如上图所示,每页的url由6个参数组成,其中ses可以去掉,q和needCorrect都是要搜索的关键词“病毒 教育”,stage是固定值,cur是当前页码,cxt是固定值,所以每页的url构造如下:

Image

然后用requests请求后用Beatifulsoup解析网页

Image

代码如下

Image

打印出结果

Image

2.试试在每个视频网页元素中找到视频的真实地址:

打开流量分析工具,播放视频,找到mp4等类型的文件

Image

复制这个请球地址,粘贴到迅雷中

Image

发现这个地址可以直接下载,那么这就是我们要找的视频真实地址,它的url可以分解为:

Image

其中,除了第三行guid是定值外,其余三个都是变化的,而且这三个参数都不能直接在网页元素或者数据交换中找到,涉及到JavaScript加密问题,这里不再继续深究。经查阅资料,发现视频解析接口,只需要每个视频的vid信息就可以返回以上所有数据

Image

而vid值可以在第一步最后打印信息中用正则表达式分离出来

Image

用此接口发送请求,返回结果如下:

Image

把我们需要的参数取出来

Image

多取1个title,作为保存视频的名字。

3.构造真实视频url并保存到本地

Image

第一行为构造的视频真实url,第二行用requests请求该地址,第三行为以mp4格式保存到本地,‘ab’为二进制保存方式。

第二步:用PyQt5制作可视化界面

1.先构造1个500X200的主窗口

Image

首先要创建应用程序对象:app=QApplication(sys.argv),参数sys.argv是命令行参数,这使得可以在电脑系统终端执行程序时,传入命令参数,来执行不同的逻辑代码。执行应用程序对象,进入消息循环等待退出: sys.exit(app.exec_()),Window()是主窗口的类,并添加titile

Image

效果如下

Image

2.以网格布局方式加入控件

主要是有以下几种方式

用QTextBrowser添加标签框

Image

最后一行四个参数分别是标签框内容、以网格布局时起始行数(从0起算)、起始列数(从0起算)、居中存放。

用QPushButton添加按钮框

Image

第三行用connect将start与“浏览按钮绑定”,当点击“浏览”按钮时,会启动start函数。

用QLineEdit添加输入框,以下是关键字输入框

Image

点击开始按钮后,将会把输入框的值取出

Image

并用于上述爬视频的代码中,构造url。

最终效果如下:

Image

这样,我们的小视频下载器就制作完成了。

完整代码可在公众号后台回复:spxz 获得

PS:另外皮一下

华为云开年采购季来了!

送8888元企业助力礼包,云服务产品低至1折

云服务器79元/年,更有WeLink免费办公!

ImageImage

Image