爬虫进阶-下载进度条显示

fansichao 2021-10-23 16:25:17
Categories: Tags:

多文件下载进度条

Progress Bar 2

大文件下载进度条

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
from tqdm import tqdm

filename = '_test.txt'
file_size = ''
url = ''

with tqdm(total=file_size, unit='B', unit_scale=True, unit_divisor=1024, ascii=True, desc=filename) as bar: # 打印下载时的进度条,实时显示下载速度
with requests.get(url, stream=True) as r:
r.raise_for_status()
with open(filename, 'wb') as fp:
for chunk in r.iter_content(chunk_size=512):
if chunk:
fp.write(chunk)
bar.update(len(chunk)) # 实时更新已完成的数据量

tqdm 常用参数说明

1
2
3
4
5
6
- total=file_size: 整个文件的大小,单位是 bytes
- unit='B': 默认是 unit='it' 按 bit 来计算的,所以我们需要改成按 Byte 来计算
- unit_scale=True: 会自动扩展单位,如果是 False,速度显示为 80625485.97B/s,如果是 True,速度显示为 62.6MB/s
- unit_divisor=1024: 由于默认是按 1000 来除,所以计算出来的文件大小和速度不对,应该按 1024 来除
- ascii=True: 进度条默认使用 unicode 字符 ▉,Windows 系统默认使用 cp936 编码,不会在同一行动态显示进度条,而是分多行显示,而 Linux 和 Mac 系统使用 utf-8 编码,所以一切正常。如果指定 ascii=True 则会用 123456789# 来填充进度条,此时大家都能正常地在同一行显示了
- desc=filename: 在进度条前面显示当前下载的文件名

参考资源