首页 > 编程语言 >手把手教你用Python打造一款批量下载视频并能可视化显示下载进度的下载器

手把手教你用Python打造一款批量下载视频并能可视化显示下载进度的下载器

时间:2023-04-23 11:34:58浏览次数:41  
标签:视频 Python 教你用 headers file rep 下载 size


桃之夭夭,灼灼其华。

/1 前言/

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

/2 项目目标/

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

/3 效果展示/

1、采用sublime text 3 编写程序,先看看效果。

手把手教你用Python打造一款批量下载视频并能可视化显示下载进度的下载器_文件名

手把手教你用Python打造一款批量下载视频并能可视化显示下载进度的下载器_Python_02

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

/4 实现步骤/

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

手把手教你用Python打造一款批量下载视频并能可视化显示下载进度的下载器_进度条_03

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读取,那么很快就会崩溃,所以我们需要设置一个缓冲,等他缓冲区满了然后拿出来读取,听起来好像挺抽象,让我们一起来看一下吧。

手把手教你用Python打造一款批量下载视频并能可视化显示下载进度的下载器_文件名_04

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

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'


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

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_description("【正在下载视频 %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、最后启动程序即可。

Fd()

/5 小结/

1、不建议抓取太多数据,容易对服务器造成负载,浅尝辄止即可。

2、希望通过这个项目,能够帮助大家更好的了解如何去采集视频。

3、本文基于Python网络爬虫,利用爬虫库,实现视频数据的采集,方法行之有效。

4、批量下载视频文件是一个不可多得的技术,程序写的并不够好,比如程序没有添加多线程,多进程,协程,也没有异步操作。感兴趣的朋友可以入手拓展下。

5、如果本文源码的小伙伴,请在后台回复“下载视频”四个字进行获取,觉得不错,记得给个Star噢~

------------------- End -------------------


标签:视频,Python,教你用,headers,file,rep,下载,size
From: https://blog.51cto.com/u_13389043/6216917

相关文章

  • 手把手教你使用Python生成图灵智能小伙伴,实现工作助手/闲聊功能
    /1前言/在家闲着,做个小项目,基于Python,实现一个语聊小机器人,分享给大家。项目整体比较简单,官方文档介绍的非常详细,可快速上手。/2 目标/将图灵机器人放到桌面,实现工作助手/陪聊功能。/3 涉及的库/V1.0版本:requests、jsonV2.0版本:requests、json、selenium(实现功能:如图灵返回结果......
  • 一篇文章带你用Python网络爬虫实现网易云音乐歌词抓取
    前几天小编给大家分享了数据可视化分析,在文尾提及了网易云音乐歌词爬取,今天小编给大家分享网易云音乐歌词爬取方法。本文的总体思路如下:找到正确的URL,获取源码;利用bs4解析源码,获取歌曲名和歌曲ID;调用网易云歌曲API,获取歌词;将歌词写入文件,并存入本地。本文的目的是获取网易云......
  • 关于python爬虫解析的问题
    在进行Python爬虫解析时,需要注意以下事项:1、良好的网站使用协议:需要遵守网站的robots.txt文件,以确保你的爬虫程序不会将网站拦截下来。2、编码问题:需要正确设置HTTP头和解析器的编码,以确保爬虫程序能够正确地解析网站的信息。3、数据解析:需要适当地处理HTML文档中的标签,以便从......
  • python变量名规则&大小写敏感
    1.变量名由英文字母、下划线_或数字组成(不能包含空格、%、-、*、/、&、^等),并且第一个字符必须是英文字母或下划线。 2.变量名不能是Python关键字。(关键字指的是Python本身“已经在使用”的名字,Python已经占用了这些名字,所以我们不能用)常见的关键字:True False None(注意......
  • Python time 库常用函数
    time模块中时间表现的格式主要有三种:timestamp时间戳,时间戳表示的是从1970年1月1日00:00:00开始按秒计算的偏移量struct_time时间元组,共有九个元素组。formattime格式化时间,已格式化的结构使时间更具可读性。包括自定义格式和固定格式。使用time库前先用import导......
  • python3-hex
    hex函数,参数可以是一个int整数或一个bytes类型元素,转为0x的十六进制字符串形式withopen(file='J:/新建文本文档.txt',mode='rb')asf:s=f.read()print(type(s),s)result=''foriins:result+=hex(i)print(result)<class'......
  • SQL Server2022以及SQL Server Management Studio(SSMS)的下载和安装
    1.下载安装包:浏览搜索SQLSERVER2022 2.进入页面后,点击下载 3.页面下拉,选择安装windows版,点击选择安装设置 4.选择在window上安装 5.填写自己信息:姓名手机号邮箱等;(这里可以随便填) 6.点击Downloadnow,等待下载完成 7.下载之后打开下载文件,选择下载介质 8.......
  • 基于 Python 开发的外星人入侵小游戏
    访问【WRITE-BUG数字空间】_[内附完整源码和文档]玩家通过鼠标控制飞船行动和射击,若能在敌人到达游戏界面底端之前消灭所有敌人,则游戏胜利,否则游戏失败。导语写了个低配版的外星人入侵小游戏来作为19年的第一更吧~让我们愉快地开始吧~开发工具**Python版本:**3.6.4相关模块:pygame......
  • Python 字符串占位符
    字符串不能修改使用+运算符拼接字符串,字符串与非字符串不能直接拼接。 弊端:如果变量过多,拼接起来很麻烦;字符串与非字符串之间无法进行拼接 name="Tom"info="%sis18yearsold"%name %s是占位符:%表示要占位s表示将引入的变量转为字符串放入该......
  • Python使用GARCH,EGARCH,GJR-GARCH模型和蒙特卡洛模拟进行股价预测|附代码数据
    全文下载链接:http://tecdat.cn/?p=20678最近我们被客户要求撰写关于GARCH的研究报告,包括一些图形和统计输出。在本文中,预测股价已经受到了投资者,政府,企业和学者广泛的关注。然而,数据的非线性和非平稳性使得开发预测模型成为一项复杂而具有挑战性的任务在本文中,我将解释如何将 ......