一、需求

在爬取数据过程中,发现不看输出日志是不知道当前的爬取进度,而单纯靠控制台输出日志信息也不方便判断。因此,就想办法给爬取过程加个进度条,实时展示当前的爬取进度。

有了这个需求和想法之后,那如何实现呢?目前有两类实现显示进度条的方案,一种是使用 Python 内置模块,比如 time 模块;另一种是引入第三方专用模块,比如 tqdm 模块,alive-progress 模块等。

二、内置模块实现进度条效果

1、简单进度条

import sys, timedef test_simple():for i in range(1, 101):print("\r", end="")print(f"当前爬取进度:{i}%:", "▋" * (i // 2), end="")sys.stdout.flush()time.sleep(0.05)

测试效果:

 2、带时间进度条

import timedef test_with_time():scale = 50start = time.perf_counter()for i in range(scale + 1):progress = "▋" * ipoint = "." * (scale - i)c = (i / scale) * 100during = time.perf_counter() - startprint("\r{:^3.0f}%【{}->{}】{:.2f}s".format(c, progress, point, during), end="")time.sleep(0.1)

测试效果:

三、第三方模块实现进度条效果

1、tqdm模块

tqdm 是专门用于快速生成进度条的模块,使用前先下载该模块:

pip install tqdm
实现代码:
import time
from tqdm import tqdmdef test_tqdm():# tqdm构造器内放入可迭代的对象for i in tqdm(range(1, 101)):# do somethingstime.sleep(0.1)

测试效果:

2、alive-progress模块

官网描述:alive-progress 是一个实时展示进度,具有非常酷炫动画效果的进度条工具。

先下载该模块:

pip install alive-progress

实现代码:

from alive_progress import alive_bardef test_alive_progress(task_num, totals, sleep_time):for i in range(task_num):  # 定义任务数with alive_bar(totals, bar='blocks', title=f'Task {i + 1}') as bar:for i in range(totals):time.sleep(sleep_time)bar()test_alive_progress(5, 150, 0.02)

测试效果:

参考了官网的文档,说是运行过程中会有动画效果(实操过程中并未看到呢?)!!

3、其他模块(了解)

3.1 progress模块:Easy progress reporting for Python!

官网地址:progress · PyPI

3.2 PySimpleGUI模块:是一款基于GUI界面展示工具,功能强大,可用于进度条展示。

官网地址:

PySimpleGUI · PyPI

四、总结

其实,第三方模块实现显示进度条功能,底层也是基于内置模块的第二种方式。因此,这里不打算使用第三方库实现进度条,而是采用内置模块实现,选择第二种,并嵌入到代码中。

接下来,将我之前爬取天气数据的方法 operate_selenium() 改造一下,代码如下:

def common_selenium(url, citys, path):scale = len(citys)start = time.perf_counter()  # 起始计时点for i in range(len(citys) + 1):# 进度条相关计算progress = "▋" * ipoint = "." * (scale - i)c = (i / scale) * 100# 最后一次列表不存在元素,避免异常,不执行if i == scale:passelse:browser = webdriver.Chrome()  # 使用谷歌浏览器browser.maximize_window()  # 窗口最大化browser.get(url)  # get请求天气网地址time.sleep(2)# 搜索指定城市天气today_weathers = operate_selenium(browser, citys, pos=i, path=path)# print(f'city:{citys[i]},today_weathers:{today_weathers}')write_log(today_weathers, citys[i], path)# 休眠5s,再关闭浏览器time.sleep(5)browser.quit()# 进度条实时显示during = time.perf_counter() - startprint("\r{:^3.0f}%[{}->{}]{:.2f}s".format(c, progress, point, during), end="")time.sleep(0.01)

循环爬取城市列表,当爬取到某一座城市的天气信息时,天气数据获取的进度如下:

25 %[▋->...]34.66s

50 %[▋▋->..]51.63s

100%[▋▋▋▋->]69.58s

这下看进度就清晰多了~

【爬虫系列】Python如何实现进度条效果?相关推荐

  1. 6行Python代码实现进度条效果(Progress、tqdm、alive-progress​​​​​​​和PySimpleGUI库)

    目录 1.Progress库 2.tqdm库 3.alive-progress库 4.PySimpleGUI库 在项目开发过程中加载.启动.下载项目难免会用到进度条,如何使用Python实现进度条呢? ...

  2. 飘逸的python - 实现控制台进度条效果

    我们要怎么在同一行中刷新输出呢? 答案是回车. 注意,回车跟换行不是同一个东西. 回车:将当前光标移动到行首.(\r, return, CR, Carriage Return) 换行:光标位置不变,换 ...

  3. python控制台进度条_飘逸的python - 实现控制台进度条效果

    我们要怎么在同一行中刷新输出呢? 答案是回车. 注意,回车跟换行不是同一个东西. 回车:将当前光标移动到行首.(\r, return, CR, Carriage Return) 换行:光标位置不变,换 ...

  4. python 酷炫效果_六种酷炫Python运行进度条效果的实现代码

    六种酷炫Python运行进度条效果的实现代码,进度条,代码,六种,效果,酷炫 六种酷炫Python运行进度条效果的实现代码 易采站长站,站长之家为您整理了六种酷炫Python运行进度条效果的实现代码的 ...

  5. android 动态进度条,Android实用view系列------炫酷的进度条

    不知不觉距离上次写文章已经过去大半个月了,原本计划每周写一篇的想法在坚持几周之后最终还是被生活中各种各样的琐事打乱,无奈中夹杂这对自己的一点失望. 心痛.jpg 当初的愿望实现了吗 事到如今只好祭奠吗 ...

  6. python中实现进度条的四种方法

    文章目录 (一): python程序中使用time模块可以让程序休眠 timesleep(t) 参数t是推迟执行的秒数 import time for i in range(0, 101, 2):ti ...

  7. [Python] 实现文本进度条

    目录 简单的开始 单行动态刷新 带刷新的文本进度条 简单的开始 进度条是计算机处理任务或执行软件中常用的增强用户体验的重要手段,它能度条功能.今天我们将利用 Python 字符串处理方法实现文本进度条 ...

  8. Python 命令行进度条

    python 命令行进度条 实现简单的命令行进度条功能, 同时可以在进度条前后显示信息 github:https://github.com/Att100/ProgressBar-python PS:如 ...

  9. 小米视频加载进度条效果实现

    原文:小米视频加载进度条效果实现 好吧,其实这些都是我闲暇时自己做着玩的,以前总是拿来主义,现在分享一下让我也为大家做一点贡献好了.废话不说了,看效果. 好吧 其实没什么技术含量 直接上代码好了 和我 ...

最新文章

  1. 清华计算机学院新成立,清华AI更进一步:清华大学成立人工智能国际治理研究院...
  2. 读《编程珠玑》 (三)
  3. 【机器学习】机器学习实践中的 7 种常见错误
  4. OSGi –带有服务的简单Hello World
  5. css 外弧_css 弧度
  6. Spring Cloud 服务安全连接 1
  7. ECCV 2020 | 图匠数据、华中师范提出低质退化文本识别算法PlugNet
  8. 小记一下:CentOS里用多个iso镜像安装Xen虚拟机
  9. HDU4712 Hamming Distance (随机化)
  10. SpringMvc的 @Valid 拦截到的异常如何抛出
  11. 字符串的首地址做形参不能将变化传递回主函数
  12. 计算理论导论第1章答案 Michael Sipser
  13. 全面解释java中StringBuilder、StringBuffer、String类之间的关系
  14. egg mysql 模糊搜索_使用egg-mysql操作mysql数据库
  15. Object-C使用ICE
  16. Vue项目中常见问题(23)动态展示Floor组件
  17. Arduino提高篇23—OLED电子时钟
  18. Python 网易邮箱简单发送邮件
  19. 水位传感器c语言程序,基于STC89C51单片机的水位传感器控制系统设计.doc
  20. 未办理过业务被多收费 中移动屡遭客户投诉乱收费

热门文章

  1. 烟囱式架构与共享式架构
  2. 一个好的企业所应具备的企业制度
  3. [丁香医生]百亿保健帝国权健,和它阴影下的中国家庭---保存一下
  4. 腾讯入股之际 国美双线闪电袭京东
  5. 从入门到精通 Discuz模版风格制作…
  6. 酷睿i712700什么水平 i7 12700参数
  7. 麦芒6刷Android10,麦芒6刷机包 EMUI5.1 186精简优化 高级设置 稳定实用-刷机之家
  8. 读课文|读笔记|读小说|甚至读漫画|教你如何让书开口说话
  9. wifi改装无线打印服务器,wifi打印服务器方案定制USB共享打印机模块定制
  10. Windows-Word显示目录