点击上方“Python爬虫与数据挖掘”,进行关注

回复“书籍”即可获赠Python从入门到进阶共10本电子书

吾日三省吾身:为人谋而不忠乎?与朋友交而不信乎?传不习乎?

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

【一、项目背景】

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

                                    【二、项目目标】

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

                                    【三、项目实施】

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

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

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

                                    【四、实现步骤】

1.分析网页结构

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

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

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

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

1.获取视频大小

def download(url, file_name): \#下载视频urllib3.disable_warnings()rep=requests.get(url,headers=headers)head=rep.headersrep=requests.get(url,headers=headers)head=rep.headers \#获取请求头字典length=head.get('Content-Length') \#获取到视频的大小,单位是字节
若想让他以MB为单位,则需除以两个1024file_size = int(length) \#视频大小用int转换if os.path.exists(file_name): \#判断文件名是否存在first_byte = os.path.getsize(file_name) \#获取文件名大小else:first_byte = 0if 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 xx=1for 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轻松拆分Excel为多个CSV文件

  • 手把手教你4种方法用Python批量实现多Excel多Sheet合并

  • 手把手教你用Python爬取百度搜索结果并保存

欢迎大家点赞,留言,转发,转载,感谢大家的相伴与支持

想加入Python学习群请在后台回复【入群

万水千山总是情,点个【在看】行不行

/今日留言主题/

随便说一两句吧~

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

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

    点击上方"Python爬虫与数据挖掘",进行关注 回复"书籍"即可获赠Python从入门到进阶共10本电子书 今 日 鸡 汤 桃之夭夭,灼灼其华. /1 前言/ ...

  2. 手把手教你用Python打造一款批量下载视频并能可视化显示下载!

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

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

    3.直接上代码和注释. #解析页面def parser: ab=[] rep=requests.get('http://v.u00.cn:93/iappce.htm#sp',timeout=5,hea ...

  4. 微信小程序下载视频到相册(带进度条)

    微信小程序下载视频到相册,并带进度条 <button class="desc-note my-button u-font-32" @click="toUpload( ...

  5. python opencv 批量将视频转化为图片

    单个的视频转换图片参看: python opencv 把视频转为图片 对于多个视频,采用多线程处理方法 video_path为待转换视频的路径,pic_path为输出图像的路径,输出的图像统一保存在p ...

  6. 视频倒退编辑android,视频倒放剪辑app下载-视频倒放剪辑 v2.6.3 安卓版 - 下载吧...

    视频倒放剪辑app是一款多功能视频编辑软件,能够让您制作精美的短视频,应用主要是把视频进行倒放和替换,把原来的视频进行编辑,再根据个人的需要任意修改,打造完美的作品:此应用支持抖音.快手等各个短视频平 ...

  7. python 视频播放 拖动_视频画中画效果,拖动进度条可以seek到相应视频帧显示

    在视频开发中,我们常常看到这样的效果,拖动进度条时,或是在进度条上方或是在屏幕中间,显示拖动进度条位置时刻的某一帧画面. 这个需求,如果是你,你会如何做? 通常一个需求,不仅要考虑实现,还有考虑一些是 ...

  8. python打造最全画地图,可视化数据

    注意:这里的版本是 pyecharts-0.1.9.4 注意:这里的版本是 pyecharts-0.1.9.4 注意:这里的版本是 pyecharts-0.1.9.4 很多人学习python,不知道从 ...

  9. 手机上照片怎么做视频?照片变视频快速教程,原来效果这么炫酷!

    手机上照片做视频,只是那种简单的转变,没有什么效果可言. 然而现在比较受欢迎的照片视频,都是有很多酷炫切换效果的视觉体验,这样分享到社交平台也能得到更多赞和更多关注.想要做出好看效果的照片视频,一般还 ...

最新文章

  1. 《LeetCode力扣练习》第39题 组合总和 Java
  2. 基于 Jenkins 快速搭建持续集成环境--转
  3. Vue.js 单元测试
  4. Sales Order 中的User Exit开发
  5. freemarker ftl模板_Spring Boot2 系列教程(十)Spring Boot 整合 Freemarker
  6. kubernetes-Deployment部署无状态服务的原理详解(七)
  7. 网络安装centos5.4
  8. 开发iOS百度地图大头针可以重复点击
  9. python读取idx_使用groupby和transform获取idxmaxp
  10. [你的灯亮着吗]读书笔记
  11. 如何查看 Linux 服务器性能参数指标?
  12. IDEA 编写JDBC 第一个示例
  13. Maxon无刷直流电机学习分享
  14. bootstrap视频教程 jsp_家政服务系统(JAVA,SSM,BOOTSTRAP,JSP,AJAX,MYSQL)+手把手系列视频教程...
  15. 《1024伐木累》-小白篇之丽姐(前篇)-总章节四
  16. [SQL Server][Machine Learning]Realtime评分(预测)
  17. C语言:判断一个数是否为素数
  18. 高一c语言期末试题,江苏省海安高中2020-2021学年高一上学期期中考试信息技术试题 Word版含答案...
  19. 【STM32】基础知识 第一课 单片机简介
  20. 期权系统搭建-期权软件开发

热门文章

  1. 【GEOS】GEOS库学习之几何关系判断
  2. 关于出版社、学术期刊、学术会议、IF影响因子、中科院分区、SCI等概念之间的联系
  3. 东北大学Origin上机实验报告——应力应变图
  4. docker虚拟技术redis dockerfile源码安装、RDM绿色压缩包
  5. 基于区块链/Hyperledger Fabric的商品交易溯源系统搭建步骤
  6. 阿里巴巴62亿控股文化中国背后原因解读
  7. Flutter下载网络图片到本地
  8. 架构-计算机体系结构
  9. easyExcel导出excel
  10. 菜鸟来也!50行Python代码一键整理桌面