python做个小视频批量下载器
这是猿人学读者:帅锅锅的第二篇投稿,快来向我投稿,每篇稿费300-500元噢。
远程上班第一天,老板让我下载一些关于疫情防控的教育视频,给各位同事群发一下,我起初以为很简单,直接在腾讯视频上下载不就行了,但是最后发现在腾讯下载的视频是QLV格式的,还必须要腾讯的播放器,这也太不够意思了,于是我又想到了you-get,但这个工具只能一个一个下载,也达不到我想要的效果,最终我还是决定用python做个爬虫工具,彻底解决小视频批量下载问题。
效果如下:
设计思路:
用PyQT5制作可视化界面,输入下载关键词、保存路径等信息,将批量下载程序与开始按钮绑定,将搜索的关键词视频保存到预定路径。
第一步:编写python批量下载腾讯视频程序
以“病毒 教育”关键词为例
主要分为以下3个步骤:
1.在当前网页中找到每个视频的html地址,视频总共有20页,每页可以通过变化url的参数可以得到,打开浏览器自带流量分析工具
先点击左上角清理按钮,再点击下一页,找到和网页变化有关的url
如上图所示,每页的url由6个参数组成,其中ses可以去掉,q和needCorrect都是要搜索的关键词“病毒 教育”,stage是固定值,cur是当前页码,cxt是固定值,所以每页的url构造如下:
然后用requests请求后用Beatifulsoup解析网页
代码如下
打印出结果
2.试试在每个视频网页元素中找到视频的真实地址:
打开流量分析工具,播放视频,找到mp4等类型的文件
复制这个请球地址,粘贴到迅雷中
发现这个地址可以直接下载,那么这就是我们要找的视频真实地址,它的url可以分解为:
其中,除了第三行guid是定值外,其余三个都是变化的,而且这三个参数都不能直接在网页元素或者数据交换中找到,涉及到JavaScript加密问题,这里不再继续深究。经查阅资料,发现视频解析接口,只需要每个视频的vid信息就可以返回以上所有数据
而vid值可以在第一步最后打印信息中用正则表达式分离出来
用此接口发送请求,返回结果如下:
把我们需要的参数取出来
多取1个title,作为保存视频的名字。
3.构造真实视频url并保存到本地
第一行为构造的视频真实url,第二行用requests请求该地址,第三行为以mp4格式保存到本地,‘ab’为二进制保存方式。
第二步:用PyQt5制作可视化界面
1.先构造1个500X200的主窗口
首先要创建应用程序对象:app=QApplication(sys.argv),参数sys.argv是命令行参数,这使得可以在电脑系统终端执行程序时,传入命令参数,来执行不同的逻辑代码。执行应用程序对象,进入消息循环等待退出: sys.exit(app.exec_()),Window()是主窗口的类,并添加titile
效果如下
2.以网格布局方式加入控件
主要是有以下几种方式
用QTextBrowser添加标签框
最后一行四个参数分别是标签框内容、以网格布局时起始行数(从0起算)、起始列数(从0起算)、居中存放。
用QPushButton添加按钮框
第三行用connect将start与“浏览按钮绑定”,当点击“浏览”按钮时,会启动start函数。
用QLineEdit添加输入框,以下是关键字输入框
点击开始按钮后,将会把输入框的值取出
并用于上述爬视频的代码中,构造url。
最终效果如下:
这样,我们的小视频下载器就制作完成了。
完整代码可在公众号后台回复:spxz 获得
PS:另外皮一下
华为云开年采购季来了!
送8888元企业助力礼包,云服务产品低至1折
云服务器79元/年,更有WeLink免费办公!