继前一篇,来补充自制一个小功能,让这个程序会好用一些些。
爬虫在爬的时候,看 console 的画面空荡荡的,是不是会有一种莫名的空虚感,而且也不知道剩下多少还没爬
所以这篇文章主要教大家怎麽做一个 Progress Bar,让人可以知道爬虫目前的进度!
其实 Python 也有套件可以直接用,但了解原理之後我觉得自己做并不难,而且可以依照自己的需求做设计,使用上也会比较有弹性。
所以~我们来动手做吧!
class ProgressBar:
bar_string_fmt = "\rProgress: [{}{}] {:.2%} {}/{}"
cnt = 0
def __init__(self, total, bar_total=20):
# task 的总数
self.total = total
# progress bar 的长度,可依个人喜好设定
self.bar_total = bar_total
def update(self, step=1):
# 更新 progress bar 的进度
total = self.total
self.cnt += step
# bar 的数量
bar_cnt = (int((self.cnt/total)*self.bar_total))
# 空白的数量
space_cnt = self.bar_total - bar_cnt
# 显示 progress bar
# "\r" 的意思代表 replace,print 出来的字串不会印在新的一行而是 replace 原本那行同个位置的字符
# {:.2%},表示 format 进来的值会以百分比显示,并只取到小数点後两位
progress = self.bar_string_fmt.format(
"█" * bar_cnt,
" " * space_cnt,
self.cnt/total,
self.cnt,
total
)
print(progress, end="")
percent = self.cnt/total
# 100%
if percent == 1:
print("\n")
elif percent >= 1:
print("")
if __name__ == '__main__':
# 测试
total = 10000
progress_bar = ProgressBar(total)
for _ in range(total):
# do something...
progress_bar.update()
输出(GIF):
bar_total = 30(静态图):
bar_total = 50(静态图):
我们把它套用在上一篇自动更新每日个股日成交资讯的爬虫里面。
稍微对 DailyPriceSpider 这个类别做一些修改,才能使用 Progress Bar。
要改的地方不多,重复的程序码我就不放了。
class DailyPriceSpider:
def __init__(self, progress_bar=None):
# 重复使用 TCP 连线
self.req = requests.Session()
self.url = "https://www.twse.com.tw/exchangeReport/STOCK_DAY"
self.headers = self.req.headers
# 伪装 User-Agent
ua = UserAgent()
self.headers["User-Agent"] = ua.random
# 加入 progress bar 这个类别
if progress_bar:
self.progress_bar = progress_bar
# ...省略
def scrape(self, date, stock_no, save_path=""):
res = self.__get(date, stock_no)
if save_path:
res_text = res.text
self.__save_file(res_text, save_path)
# 更新 progress bar
if self.progress_bar:
self.progress_bar.update()
return res
另外主程序的部分:
if __name__ == '__main__':
# ...省略
stock_info_list = stock_info_list_file.get("stock", [])
# 加入 progress bar
progress_bar = ProgressBar(len(stock_info_list))
dps = DailyPriceSpider(progress_bar=progress_bar)
# ...省略
这样就能看到我们的爬虫进度罗!
(静态图)
以上就是 Progress Bar 的教学!
那整个系列文也差不多到这边结束罗!如果有任何疑虑的地方,还请多多指教!
好啦!之前介绍过了如何用Backtesting套件来实做均线的策略, 前面也介绍过了如何安装Ta-l...
前情提要 昨天我们完成了英雄细节元件 HeroDetailComponent,并且使用属性系结(pr...
光头古早味手工蛋饼 地点:台南市新营区东兴路203号 时间:6:00~11:30 如果仔细看可以发现...
回顾一下上篇提到的binlog纪录作用,可以用来做资料复原和主从机制下的重要数据纪录。 开始前先了...