正文
首先,当我们请求 Requests 请求一个资源路径的时候,这个请求的响应体会被立即下载返回,这样的话我们就不能获取进度了,但是 Requests 为我们提供了 stream 流的方式来获取响应体,这样就有利于我们来获取实时的下载进度,例如下载 IDEA:
request_url = 'https://download.jetbrains.com/idea/ideaIU-2018.2.1.exe'
res = requests.get(request_url , stream=True)
当上面的语句被执行时,只有响应头被下载并返回给了我们,所以我们可以获取我们需要的数据,比如内容长度content-length
:
content_length = res.headers['content-length']
然后我们再使用 Response.iter_content 来控制工作流,来遍历获取资源数据;另外在 Python3 中在打印内容开头加入 \r
会使光标回到首行,并不会换行,这样就可以实现进度条的效果,所以最终的代码为:
import requests
from contextlib import closing
if __name__ == '__main__':
url = 'https://download.jetbrains.com/idea/ideaIU-2018.2.1.exe'
with closing(requests.get(url, stream=True)) as response:
chunk_size = 1024 # 单次请求最大值
content_size = int(response.headers['content-length']) # 内容体总大小
data_count = 0
with open('idea.exe', "wb") as file:
for data in response.iter_content(chunk_size=chunk_size):
file.write(data)
data_count = data_count + len(data)
now_jd = (data_count / content_size) * 100
print("\r 文件下载进度:%d%%(%d/%d) - %s" % (now_jd, data_count, content_size, url), end=" ")
效果为:
文件下载进度:6%(36305920/540246736) - https://download.jetbrains.com/idea/ideaIU-2018.2.1.exe
当然,你也可以根据自己的喜爱调整输入的内容,比如模仿 Centos 的下载进度 =>>>>
实现这样的效果
声明:本文为原创文章,版权归沃付网络所有,欢迎分享本文,转载请保留出处!
你可能也喜欢
- ♥ Java构造方法07/05
- ♥ Debian 12 修复 OpenSSH 远程代码执行高危漏洞:CVE-2024-638707/04
- ♥ 网站备份禁忌-站长必看07/05
- ♥ JavaScript实时监听歌曲播放进度显示对应歌词07/05
- ♥ 使用Zxing生成二维码并输出到Web07/05
- ♥ Java构造代码块及执行优先级07/05