首页/ 填坑/ 文章详情

Python 下载反馈机制:tqdm进度条的使用与中文异常处理

Python爬虫抓取页面时,除了文字信息外,还有图片,音频,视频等等文件资源。cmd运行执行命令,窗口完全黑盒子化处理,没有输出提示下,程序员完全不知道执行到那里。

特别在下载较大的文件资源时,文件是多大,文件下载需要多久时间,完全不知道,只能傻傻的等待结束。这种没有反馈信息的下载,不利于程序员的日常维护,为此解决这种事,需要引入额外的库——tqdm进度条。

tqdm 安装:

BSHpip install tqdm

tqdm 参数:

参数名 必选 类型 说明
iterable Object 进度条实体对象
total Number 进度条总大小
desc String 进度条文字描述
unit String 进度条下载单位,默认it

tqdm 例子:

PY# coding=utf-8

import requests
from tqdm import tqdm

if __name__ == '__main__':

	path = 'D://test//448681.mp3'	
	url = 'http://96.ierge.cn/14/224/448681.mp3' # 网上随便的的MP3资源
	result = requests.get(url,stream=True); # 设置stream流传输方式为真


	file_name = url.split('/')[-1];
	file_size = int(result.headers['Content-Length']) # 文件大小,单位B

	if file_size < 1024: # 单位B
		unit = 'B'
		iterable = result.iter_content(0)
		total = int(result.headers['Content-Length'])
	elif file_size >= 1024 and file_size < 1024 * 1024 : # 单位KB
		unit = 'KB'
		iterable = result.iter_content(1024)
		total = int(int(result.headers['Content-Length']) / 1024)
	else: # 单位MB
		unit = 'MB'
		iterable = result.iter_content(1024 * 1024)
		total = int(int(result.headers['Content-Length']) / 1024 / 1024)


	if result.status_code == 200:
		with open(path,'wb') as f:
			desc = ('{},文件大小:{}{}').format(file_name,total,unit).decode('UTF-8').encode('GBK')
			for chunk in tqdm(iterable=iterable, total=total, desc=desc, unit=unit):
				f.write(chunk)

现今的网络下载速度基本都能达到1MB/s以上,测试的mp3文件大小10MB,方便测试进度条效果。

tqdm 运行结果:

PYC:Python27>python tqdm.py
448681.mp3,文件大小:10MB:  10%|█▌             | 1/10 [00:00<00:08,  1.02MB/s
448681.mp3,文件大小:10MB:  20%|███            | 2/10 [00:01<00:07,  1.01MB/
448681.mp3,文件大小:10MB:  30%|████▌          | 3/10 [00:03<00:07,  1.01s
448681.mp3,文件大小:10MB:  40%|██████         | 4/10 [00:03<00:05,  1.01
448681.mp3,文件大小:10MB:  50%|███████▌       | 5/10 [00:04<00:04,  1.
448681.mp3,文件大小:10MB:  60%|█████████      | 6/10 [00:05<00:03,  1
448681.mp3,文件大小:10MB:  70%|██████████▌    | 7/10 [00:06<00:02,
448681.mp3,文件大小:10MB:  80%|████████████   | 8/10 [00:08<00:02,
448681.mp3,文件大小:10MB:  90%|█████████████▌ | 9/10 [00:09<00:0
448681.mp3,文件大小:10MB: 100%|██████████████| 10/10 [00:10<00:0
448681.mp3,文件大小:10MB: 11MB [00:10,  1.05MB/s]

※ 下载的文件太小,进度条直接快速到完成。

tqdm 参数desc含有中文的情况下,会突然报错:

PYUnicodeDecodeError:‘ascii’ code can’t decode byte 0xef in position 0: ordinal
not in range(128)

解决方案:

- 打开目录Python27Libsite-packages
- 新建文件 sitecustomize.py
- 编辑 sitecustomize.py 内容,保存,即可

sitecustomize.py 文件内容:

PYimport sys
sys.setdefaultencoding('gb2312')

文章评论0 records

最新 最早

0

最新评论Latest comments

big2catbig2cat 08-27 16:11
然而没什么用,smartpss不兼容老录像机,就算能看回放,很多时间点在回放里也看不到
HentaiCatHentaiCat 2020-12-30 10:22
考科目二全程很紧张,考了三次才过,有次侧方入库直接pass,100分扣完,呜呜呜~
猫猫酱猫猫酱 2020-11-12 10:56
一入多肉深似海,说多都是泪
soulkunsoulkun 2020-11-05 15:54
IconFont的图标真的很好用!!!
无限链霉球菌无限链霉球菌 2020-11-03 11:41
药店,了解一下(`・ω・´)