python下载大文件mp4_手把手教你用Python打造一款批量下载视频并能可视化显示下载器...

原标题:手把手教你用Python打造一款批量下载视频并能可视化显示下载器

前言

通常在家里我们做的大多数事情,但有时候,网络的原因,可能会让你没有网络。不能看电视和电影,这就是我们想说的下载视频。

项目目标

通过一个Python程序批量下载感兴趣的视频。小编最近看到一些好的视频,因为想去的方向android,但努力学习太复杂,有一个简单的点,像e4a但在学习一门语言很容易放弃,并发现了一个利基在广阔的网络编程语言——语言。不要说,一个人快速下载

实现步骤

1、分析网页结构。老样子,审查元素定位,如下图所示。

402a537ecf20407788d548283ee0b115.jpeg

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

3、直接上代码和注释。

#解析页面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 #返回所有视频地址的列表

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

4、接下来就是下载文件。因为我们讲的是批量下载,所以在此之前需要先了解单个下载,当然,单个下载是很耗费时间,而且系统资源利用率太低。我们来看看这个下载函数如何实现,代码如下所示。

#下载函数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) \#保存文件

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

6、然后再给它套一个函数用来简化它的启动之路。

def main: for y in range(len(parser)): down(parser[y],y) \#下载main

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

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

4652718d9da6437896ae743640c40d78.jpeg

9、上图中所示即为视频大小值和请求范围的值。接下来我们使用代码来获取视频大小。

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_deion("【正在下载视频 %s】"%str(f.name)) f.write(chunk) \#写入文件 pbar.update(1024) \#更新当前进度条 pbar.close \#关闭进度条 return file_size \#返回文件大小

10、配置对应的进度条,如下所示。

pbar = tqdm( \#配置进度条模块,设置文件大小,文件字节数,文件的进度total=file_size, initial=first_byte,unit='B', unit_scale=True, desc=url.split('/')[-1])#关于tqdm 具体用法大家可以百度tqdm模块。

11、添加缓冲

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_deion("【正在下载视频 %s】"%str(f.name)) f.write(chunk) \#写入文件 pbar.update(1024) \#更新当前进度条 pbar.close \#关闭进度条 return file_size \#返回文件大小

12、构建下载视频并显示进度条函数。

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

13、最后启动程序即可。

责任编辑:

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值