使用requests下载文件并显示网速和下载进度
程序员文章站
2023-12-30 14:36:52
...
# -*- coding: utf-8 -*-
import time
import requests
# 请求下载地址,以流式的。打开要下载的文件位置。
with requests.get('http://down.360safe.com/setup.exe', stream=True) as r, open('setup.exe', 'wb') as file:
# 请求文件的大小单位字节B
total_size = int(r.headers['content-length'])
# 以下载的字节大小
content_size = 0
# 进度下载完成的百分比
plan = 0
# 请求开始的时间
start_time = time.time()
# 上秒的下载大小
temp_size = 0
# 开始下载每次请求1024字节
for content in r.iter_content(chunk_size=1024):
file.write(content)
# 统计以下载大小
content_size += len(content)
# 计算下载进度
plan = (content_size / total_size) * 100
# 每一秒统计一次下载量
if time.time() - start_time > 1:
# 重置开始时间
start_time = time.time()
# 每秒的下载量
speed = content_size - temp_size
# KB级下载速度处理
if 0 <= speed < (1024 ** 2):
print(plan, '%', speed / 1024, 'KB/s')
# MB级下载速度处理
elif (1024 ** 2) <= speed < (1024 ** 3):
print(plan, '%', speed / (1024 ** 2), 'MB/s')
# GB级下载速度处理
elif (1024 ** 3) <= speed < (1024 ** 4):
print(plan, '%', speed / (1024 ** 3), 'GB/s')
# TB级下载速度处理
else:
print(plan, '%', speed / (1024 ** 4), 'TB/s')
# 重置以下载大小
temp_size = content_size