我正在编写一个网络抓取工具,可以发现链接并处理网页信息。
由于这可能是一个没有结束的过程,我不知道在构建进度条时我有多少元素,比如完成了5个链接/谁知道我们什么时候完成。
但我知道我访问了多少链接以及我检测到了多少链接。
访问/检测到链接的链接数量。
我想做的是使用点击或类似的api来制作进度条。
栏的长度可以改变,即我可以更新检测到的栏...想一个加载栏,用户是90%,突然下降到10%。哇笨蛋哈哈'
查看点击API,似乎有两种方法可以使用他们的进度条。
with click.progressbar(all_the_users_to_process) as bar:
for user in bar:
modify_the_user(user)
或
with click.progressbar(length=total_size,
label='Unzipping archive') as bar:
for archive in zip_file:
archive.extract()
bar.update(archive.size)
我可以使用点击进度条制作我上面描述的内容吗?
如果我不能做什么我需要制作一个进度条,其中完成的值随着变化而变化... 90% - > 10% - > 20%。
谢谢!
编辑:更多详情
我有一个名为LinkElements的对象列表。这些元素有一个访问过的布尔值。
我以为我可以更新迭代器:
with click.progressbar(like_elements_list) as link_elements:
for link in link_elements:
... do stuff with link ....
link_elements.update(like_elements_list)
这个想法似乎不起作用......或者我不理解它
答案 0 :(得分:1)
它不受支持,但您可以使用点击来提供您正在寻找的功能。
import click
links_visited = 0
links_detected = 100
with click.progressbar(length=1000) as bar:
for link in link_elements_list:
# ... do stuff ...
links_visited += 1
links_detected += 0 # Increment how many more new links were found
progress = float(links_visited) / float(links_detected)
bar.pos = int(progress * 999) + 1
bar.update(0)
您可以通过bar.pos
手动移动进度条,然后调用update(0)
。由于update()
方法以增量方式工作,因此您只需传入0
即可进行渲染。
现在,我必须注意以下几点:
length=1000
我正在对1000
的值进行硬编码,因此我们可以提供介于0-1000之间的“百分比”。bar.pos = int(progress * 999) + 1
为什么+1
?好吧,当你致电update()
时,它会尝试计算平均时间,这意味着bar.pos
0
,你会得到零除错误。 +1
是为了避免这种情况。