前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >显示进度下载图片

显示进度下载图片

作者头像
叶子陪你玩
发布2020-04-23 10:31:39
3.7K0
发布2020-04-23 10:31:39
举报

上篇文章讲了如何实现模拟的进度条,这篇文章就来实践一下。通过下载一张图片作为案例,当然换成其它软件的链接也可以,把保存的文件后缀名改成相应的内容就可以。

获取图片大小

首先到网上找一个图片网站,通过鼠标右键复制链接。这里使用的是国外的一个免费网站。

编写代码,获取图片文件大小,r是返回的Response对象,有一个headers属性,是一个字典的数据类型,通过它的Content-Length可以获取文件的大小,单位是byte字节。

下载图片

利用with open方法将图片的内容r.content写入img.jpg中,模式要用wb,表示二进制格式写入。

程序运行完成后,会在当前程序文件所在位置生成一张图片,这就是爬取一张图片的原理了,更多网络爬虫的知识将在爬虫与数据处理专题讲解。

换一种写入文件方式

上面的方式虽然可以写入,但是如果文件大一点,可能加载到内存的内容就会非常大了,通过iter_content设置每次加载内容大小,然后直接写进文件中,flush的作用是将内容写到文件中,而不是关闭一次性写入。(write() 方法用于向文件中写入指定字符串。在文件关闭前或缓冲区刷新前,字符串内容存储在缓冲区中,这时你在文件中是看不到写入的内容的。)

加上进度条

接下来就可以把之前的进度条内容搬过来了。因为有实际内容了,不需要再去用循环模拟了。a表示已经下载的,b表示剩余未下载的,c表示下载的和总的比例,最后格式化输出就可以了

丰富进度条

上面的进度条已经实现最核心的功能了,下载速度,大小,所剩时间可以自己去计算,放到显示里面就可以了。

加上剩余时间。

总结

进度条原理很简单,分别是下载内容,未下载内容,总内容大小的关系,如果还要算速度和时间,那就再就加入一个计时功能,最后可以尝试将其封装成也给模块函数,以后只要传入参数就可以重复使用了。

(全文完)

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-04-21,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 叶子陪你玩编程 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 获取图片大小
  • 下载图片
  • 换一种写入文件方式
  • 加上进度条
  • 丰富进度条
  • 总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档