python下载结合tqdm进度条

python下载结合tqdm进度条

本篇内容知识点:
1.tqdm库展现可迭代对象控制台进度条
2.requests简单数据爬取并下载文件

安装:
pip install tqdm
pip install requests

可迭代对象什么意思:
以Python为例,可迭代对象的意思是指存储了元素的一个容器对象,且容器中的元素可以通过iter( )方法或getitem( )方法访问。并不是指某种具体的数据类型。常见的可迭代对象包括:集合数据类型,如list、tuple、dict、set、str等…

下载

import requests
url='xxx'
response=requests.get(url) # 向地址发送一个get请求以获取响应对象
with open('文件名.后缀名','wb') as f:
	f.write(date)

tqdm库简单使用

使用tqdm必须知道的几个常见参数:
iterable:可迭代的对象 默认None
total:进度条总长度大小(int or float)默认None
desc:进度条的前缀内容(str)默认None
unit:进度条的单位(str)默认 it ,实际表带为 it/s

一、迭代对象的处理

import time
from tqdm import tqdm

for i in tqdm(iterable=range(100),desc='我是前缀',unit='我是单位'):
    time.sleep(0.1) #延时0.1秒 

效果如下
一、迭代对象的处理
二、自定义进度条的增长间隔

import time
from tqdm import tqdm

lt = ["a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w",
      "x", "y"]
with tqdm(iterable=lt, desc='遍历字母', unit='个', total=len(lt)) as pgbr:
    for index, l in enumerate(lt):
        if index % 5 == 0:
            time.sleep(1)  # 延时1秒
            pgbr.update(5)  # 进度条一次增长5个单位
        print(l)

效果如下
二、需要自定义进度条的增长间隔
下载文件结合tqdm用法

import requests
from tqdm import tqdm

url = 'https://dldir1.qq.com/qqtv/TencentVideo11.14.4043.0.exe'
response = requests.get(url, stream=True)  # 设stream流传输方式为真
print(response.headers)  # 打印查看基本头信息
data_size = round(response.headers['Content-Length']) / 1024 / 1024  # 字节/1024/1024=MB
with open('测试.exe', 'wb') as f:
    for data in tqdm(iterable=response.iter_content(1024 * 1024), total=data_size, desc='正在下载', unit='MB'):
        f.write(data)


效果如下
头信息
下载文件结合tqdm用法

要点解释:
1.response.get(stream=True) 这一点必须为True,其详细解释请查iter_content函数的说明,或者找其他资料理解
2.iter_content(chunk_size) chunk_size参数的理解见下图
3.关于TqdmWarning: clamping frac to range [0, 1]full_bar = Bar(frac, … 的警告提示看补充。
补充:关于第三点的警告问题,是因为data_siez获得到的是用int()函数转型为整形的变量,所以在除以1024之后会向下取整,导致小于实际的文件大小出现警告,所有可以加一个round()函数进行上去整,保证目标的data_size>=实际的文件大小,就不会出现警告了。

理解chunk_size
在这里插入图片描述
在这里插入图片描述
因此我将iter_content(chunk_size)->chunk_size理解为一个列表的容量, 而iterable=response.iter_content(1024*1024)理解为分割字符串的函数, 将response.content分割为每个元素的长度是1024*1024大小的列表,在对每个部分进行下载。 这只是助于理解chunk_size的一个方法 而response.iter_content 是流传输(简单说就是边下载边写入磁盘),如果将chunk_size设置的很小,意味着每次 下载和存在很小的一部分,下载的速度也会很慢,如果设置的很大,则进度条的进度会错乱,因此我们在确定chunk_size 大小的时候应该对应文件大小,data_size除以多少,chunk_size就乘以多少,才能使进度条对应。

END

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值