当前位置: 首页 » 综合知识 » it知识 » 正文

如何用Python打造批量下载视频并可视化下载进度的下载器

发布时间:2023-07-31 以下文章来源于网友投稿,内容仅供参考!

【一、项目背景】

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

【二、项目目标】

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

【三、项目实施】

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

【四、实现步骤】

1.分析网页结构

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

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

#解析页面  def parser():  ab=[]  rep=requests.get('v.u00: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('v.u00: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读取,那么很快就会崩溃,所以我们需要设置一个缓冲,等他缓冲区满了然后拿出来读取,听起来好像挺抽象,让我们一起来看一下吧。

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

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()
  • • Linux Ecdsa密钥长度选择有何依据

    在Linux

  • • Linux Khook在内核监控中的应用如何

    Linux

  • • Linux Gsoap是否支持异步通信

    GSOAP是

  • • Linux Coremail如何提升用户体验

    提升Linu

  • • Linux Ecdsa算法有哪些局限性

    ECDSA

  • 哎呀音乐钢琴键盘学习《 钢琴主人训练营》 西瓜学琴
    郭蝈 陪练钢琴 30节课时 考级刚需 让孩子每一次练琴都是高质量的
    30天轻松学会五线谱 流行钢琴自学初级教程 牙牙学琴
    流行爵士钢琴实战技巧VIP课 - 继伟 哎呀音乐
    【海上钢琴师】原版 MT1990钢琴谱
    百首经典流行钢琴实战曲集 - 继伟
    雷费尔德电钢琴重锤88键专业考级儿童初学者数码电子钢琴家用
    小练咖 真人钢琴陪练 1v1服务 2999随时退 1课时50分钟 考级刚需
    雅马哈电钢琴88键重锤CLP735智能数码电子钢琴家用专业初学者考级
    【原装进口】Yamaha/雅马哈钢琴 b121 SC2原声静音钢琴
  • 珠海专业调钢琴
  • 天津宝坻区调钢琴
  • 天津静海区钢琴调音
  • 成都简阳市钢琴调律
  • 大连瓦房店市钢琴调音
  • 眉山调钢琴联系方式
  • 惠州大亚湾钢琴调琴师
  • 长治调琴师
  • 厦门湖里区钢琴调音师
  • 上海普陀区钢琴调音师