用Python打造批量下载视频并能可视化下载进度的炫酷下载器

Irene181 等级 1630 0 0

大家好,我是Python进阶者,今天给大家整点好玩的,一起来看看吧~

【一、项目背景】

平时宅在家的我们最爱做的事莫过于追剧了,但是有时候了,网络原因,可能会让你无网可上,这个时候那些好看的电视剧和电影自然是无法观看了,本期我们要讲的就是怎样下载这些视频。

 【二、项目目标】

通过Python程序对所感兴趣的视频进行批量下载,正好小编近期看到一些不错的视频,因为想往安卓方向走,但又苦于重新学习太复杂,有没有简单点的,之前好像有什么e4a但是要学易语言就放弃了,于是乎在茫茫网络发现了一个小众的编程语言---裕语言。好家伙,不说了,赶紧下载,盘它。

 【三、项目实施】

采用sublime text 3 编写程序,先看看效果:

用Python打造批量下载视频并能可视化下载进度的炫酷下载器

用Python打造批量下载视频并能可视化下载进度的炫酷下载器

C:\Users\Administrator\Desktop\232.jpg

接下来,由小编我为大家展现程序的具体实现步骤。

 【四、实现步骤】

1.分析网页结构

老样子,审查元素定位,如下图:

用Python打造批量下载视频并能可视化下载进度的炫酷下载器

C:\Users\Administrator\Desktop\1212.jpg

发现视频全都在a标签里面,因为这个页面的视频比较多,所以我们继续分析页面,发现一个神奇的事情。哈哈,原来所有的视频都在class为videoDown的a标签里,有了这个重要的信息就什么都好办了。

#解析页面

def parser():

ab=[]

rep=requests.get('http://v.u00.cn:93/iappce.htm#sp',timeout=5,headers=headers)

rep.encoding='utf-8'

soup=BeautifulSoup(rep.text,'html.parser')

res=soup.find_all('a',class_='videoDown')#寻找所有class为videoDown的a标签

for y in res:

        ab.append('http://v.u00.cn:93'+y.attrs['href'])
        #将获取到的视频URL地址添加到列表中

        return ab #返回所有视频地址的列表

这样就轻轻松松拿到了页面所有的视频地址,怎么样,是不是超级简单了。

2.下载文件

因为我们讲的是批量下载,所以在此之前需要先了解单个下载,当然,单个下载是很耗费时间,而且系统资源利用率太低。

我们来看看这个下载函数如何实现:

#下载函数

def down(y,x):

print('------下载第',str(x),'课-------')

ss=str(y.split('.')[3:4]) \#截取文件名

sa=ss.replace('[','').replace(']','')\#替换文件名中的特殊符号

ree=requests.get(y)

with open('%d.%s.mp4'%(x,sa),'wb') as f:

        f.write(ree.content) \#保存文件

无非就是一些常用的字符串分隔以及文件操作罢了,不过此种因为比较单一,下载多个文件就行不通了,所以一般只要不是大批量下载,这种方法就够了。

然后在给他套一个函数用来简化他的启动之路。

def main():

for y in range(len(parser())):

down(parser()[y],y) \#下载

main()

最后调用主函数main,轻轻松松完成单个文件下载。

3.获取文件大小并给下载文件添加缓冲

在下载视频的时候如果我们一下子把所有的资源你都拿出来放进CPU读取,那么很快就会崩溃,所以我们需要设置一个缓冲,等他缓冲区满了然后拿出来读取,听起来好像挺抽象,让我们一起来看一下吧。

用Python打造批量下载视频并能可视化下载进度的炫酷下载器

C:\Users\Administrator\Desktop\4343.jpg

图中所示即为视频大小值和请求范围的值。

1.获取视频大小

def download(url, file_name): \#下载视频

urllib3.disable_warnings()

rep=requests.get(url,headers=headers)

head=rep.headers

rep=requests.get(url,headers=headers)

head=rep.headers \#获取请求头字典

length=head.get('Content-Length') \#获取到视频的大小,单位是字节
若想让他以MB为单位,则需除以两个1024

file_size = int(length) \#视频大小用int转换

if os.path.exists(file_name): \#判断文件名是否存在

        first_byte = os.path.getsize(file_name) \#获取文件名大小

else:

        first_byte = 0

if first_byte \>= file_size:

        return file_size \#返回文件大小

header = {"Range": "bytes=%s-%s" % (first_byte, file_size),

        'user-agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36
(KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36'

 } \#设置请求头,标明请求范围

2.配置进度条

pbar = tqdm( \#配置进度条模块,设置文件大小,文件字节数,文件的进度

total=file_size, initial=first_byte,

unit='B', unit_scale=True, desc=url.split('/')[-1])

#关于tqdm 具体用法大家可以百度tqdm模块。

3.添加缓冲


with closing(requests.get(url, headers=header, stream=True)) as req:
#关闭连接

with open(file_name,'wb') as f: \#打开文件

        for chunk in req.iter_content(chunk_size=1024\*2): \#设置缓冲

            if chunk:

                pbar.set_description("【正在下载视频 %s】"%str(f.name))

                f.write(chunk) \#写入文件

                pbar.update(1024) \#更新当前进度条

            pbar.close() \#关闭进度条

        return file_size \#返回文件大小

4.构建下载视频并显示进度条函数

def fd(): \#下载并显示进度条

global x

x=1

for y in parser():

        print('----正在下载',x,'课-----')

        ss=str(y.split('.')[3:4])

        sa=ss.replace('[','').replace(']','') \#文件名

        download(y, "{}.{}.mp4".format(str(x),sa)) \#下载

        print('----完成下载',x,'课-----')

        x+=1

5.启动程序

Fd()
 【五.总结】

批量下载视频文件是一个不可多得的技术,程序写的并不够好,比如程序没有添加多线程,多进程,协程,也没有异步操作,可能是因为自己比较懒吧,哈哈哈。

不过也挺简单,多线程就是threading.Thread 顺便加锁 Lock,也可以用多进程multiprocessing中的Process或者进程池Pool,或者协程genvent,或者异步asynic

**-----**------**-----**---**** End **-----**--------**-----**-****

用Python打造批量下载视频并能可视化下载进度的炫酷下载器

往期精彩文章推荐:

用Python打造批量下载视频并能可视化下载进度的炫酷下载器

欢迎各位大佬点击链接加入群聊【helloworld开发者社区】:https://jq.qq.com/?_wv=1027&k=mBlk6nzX进群交流IT技术热点。

本文转自 https://mp.weixin.qq.com/s/t25QgSgU_KoTbbDFCICqog,如有侵权,请联系删除。

收藏
评论区

相关推荐

教你用Python制作炫酷的词云
相信大家也都通过各种渠道了解了老干妈与鹅厂的爱恨纠缠,当然其中还混入了迷惑行为的“骗子”、吃瓜吃得飞起的“阿里系”以及连称此事与我无关的“某搜索引擎”。 不过这是一篇技术文,所以无心管他到底是谁的老千妈,一心只想给大家介绍这个惊艳的好东西。 (https://imghelloworld.osscnbeijing.aliyuncs.com/4
太酷炫了!我用Python画出了北上广深的地铁路线动态图
大家好,我是小五🐶 今天教大家用python制作地铁线路动态图,这可能是全网最全最详细的教程了。坐标点的采集小五之前做过类似的地理可视化,不过都是使用网络上收集到的json数据。但很多数据其实是过时的,甚至是错误/不全的。所以我们最好还是要自己动手,丰衣足食(爬虫大法好)。打开高德地图的地铁网页,http://map.amap.com/subway/ind
一个没法商用,但是好玩有趣的 Python 手绘图形库!
https://github.com/chenjiandongx/cutecharts今天,给大家介绍一个很酷的 Python 手绘风格可视化神包:cutecharts。和 Matplotlib 、pyecharts 等常见的图表不同,使用这个包可以生成下面这种看起来像手绘的各种图表,在一些场景下使用效果可能会更好。GitHub 地址:https://git
用Python打造批量下载视频并能可视化下载进度的炫酷下载器
大家好,我是Python进阶者,今天给大家整点好玩的,一起来看看吧【一、项目背景】 平时宅在家的我们最爱做的事莫过于追剧了,但是有时候了,网络原因,可能会让你无网可上,这个时候那些好看的电视剧和电影自然是无法观看了,本期我们要讲的就是怎样下载这些视频。 【二、项目目标】 通过Python程序对所感兴趣的视频进行批量下载,正好小编近期看到一些不错的视频,因为想
用Python打造批量下载视频并能可视化下载进度的炫酷下载器
大家好,我是Python进阶者,今天给大家整点好玩的,一起来看看吧【一、项目背景】 平时宅在家的我们最爱做的事莫过于追剧了,但是有时候了,网络原因,可能会让你无网可上,这个时候那些好看的电视剧和电影自然是无法观看了,本期我们要讲的就是怎样下载这些视频。 【二、项目目标】 通过Python程序对所感兴趣的视频进行批量下载,正好小编近期看到一些不错的视频,因为想
牛批了,1行python代码就可实现炫酷可视化
之前画图一直在用matlibplot、pyecharts,最近学习了一个新的可视化库cufflinks,用了两天我已经深深爱上它了 主要是因为它用法简单、图形漂亮、代码量少,用一两行代码,就能画出非常漂亮的图形下面我们一起来看看吧! 1.用法简单cufflinks库主要和dataFrame数据结合使用,绘图函数就是 dataFrame.iplot,记
打造炫酷通用的ViewPager指示器 - 玩转字体变色
1.概述 最近一直都在仿着其他项目的效果在做,仿内涵段子,二手车之家等等。会不会有一天被抓还真是有点心虚,我这分明是给这些APP打广告。等这些效果基本讲完就开始设计模式和系统框架一整套的视频也就会出来了,等总的访问量达到100万之后就会利用空余的时间去录制Java基础和Android基础,请各位多多start和suggest。我们来看一下效果:   
100行JS实现HTML5的3D贪吃蛇游戏
[js1k.com](https://www.oschina.net/action/GoToLink?url=http%3A%2F%2Fjs1k.com%2F)收集了小于1k的javascript小例子,里面有很多很炫很酷的游戏和特效,[今年规则](https://www.oschina.net/action/GoToLink?url=http%3A%2F%
IPFS实践之初体验
更多我的博客请关注:[https://kekbin.com/](https://www.oschina.net/action/GoToLink?url=https%3A%2F%2Fkekbin.com%2F) ### 概述 IPFS的全称是InterPlanetary File System(星际文件系统),从名称上看,这是一个很炫酷、很有野心的项目。简
H5酷炫效果
<!doctype html> <html lang="zh-CN"> <head> <meta charset="UTF-8"> <title>线性渐变动画</title> <style> body{ width:100%;
3D页面切换效果
最近看到魅族、小米等官网上面产品介绍页面做的很炫酷,于是找啊找,找到了类似的效果,大家可以看看学校学习,希望对你有用: Demo地址: [http://www.slashie.org/space.js/demo2.html](https://www.oschina.net/action/GoToLink?url=http%3A%2F%2Fwww.slas
10 个非常酷的基于jQuery的菜单效果插件
除了直观的界面效果外,炫酷的网站导航菜单或右键菜单也能为访问者带来眼前一亮的感觉。本文为你带来10个非常酷的基于jQuery的菜单效果插件。  **1.  右击菜单**  一个创建右击菜单的插件,简洁且易用。  ![](http://static.oschina.net/uploads/img/201112/20185535_
Android 贝塞尔曲线实战之网易云音乐鲸云特效
作者:哈哈将 -个推 Android 高级开发工程师 **前言** APP开发市场已经告别“野蛮生长”时代,人们不再满足于APP外形创新,而将目光转向全方面的用户体验上。在这过程中,动效化作为移动互联网产品的新趋势,如何实现酷炫丝滑的动画效果已然成为开发者们的新课题。实现方式其实很简单。本文将为你剖析理论基础以及具体应用。咱们日常使用的 APP 的时候,
Flutter 实现酷炫的3D效果
![](https://oscimg.oschina.net/oscnet/2a34303ee391c70540d1747e4aa521b0b5e.png) > 老孟导读:此文讲解3个酷炫的3D动画效果。 下面是要实现的效果: ![](https://oscimg.oschina.net/oscnet/cacf46143ca941c8a
Python 全栈开发
**如果你已经玩转了 Python 编程语言语法,肯定想用这些知识,开发一款应用程序,它可以是在网上,可以炫耀或出售,那就需要全栈式开发 Python。具体如何创建,部署和运行生产 Python Web 应用程序,参考 [Full Stack Python](https://www.oschina.net/action/GoToLink?url=https%