上一篇
Python 进阶篇:爬取微博用户评论信息
Python爬虫抓取页面时,除了文字信息外,还有图片,音频,视频等等文件资源。cmd运行执行命令,窗口完全黑盒子化处理,没有输出提示下,程序员完全不知道执行到那里。
特别在下载较大的文件资源时,文件是多大,文件下载需要多久时间,完全不知道,只能傻傻的等待结束。这种没有反馈信息的下载,不利于程序员的日常维护,为此解决这种事,需要引入额外的库——tqdm进度条。
BSHpip install tqdm
参数名 | 必选 | 类型 | 说明 |
---|---|---|---|
iterable | 是 | Object | 进度条实体对象 |
total | 否 | Number | 进度条总大小 |
desc | 否 | String | 进度条文字描述 |
unit | 否 | String | 进度条下载单位,默认it |
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,方便测试进度条效果。
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 内容,保存,即可
PYimport sys
sys.setdefaultencoding('gb2312')
最新评论Latest comments