2015-09-23 110 views
2

我正在寫一個網絡爬蟲,發現鏈接並處理頁面信息。動態長度的Python進度條

因爲這可能是一個沒有結束的過程,所以我不知道構建進度條時有多少元素,比如完成了5個鏈接/誰知道我們什麼時候完成。

但我知道我訪問了多少個鏈接,以及我檢測到了多少個鏈接。

因此訪問的鏈接數/檢測到的鏈接。

我想要做的就是使用api之類的點擊或其他來製作進度條。

在酒吧的長度可以改變的地方,即我可以更新檢測到的酒吧......認爲加載酒吧和用戶是90%,突然下降到10%。 Aw無聲大聲'

看着點擊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) 

Progress Bar

我可以做什麼我上面使用點擊進度條描述?

如果我不能做什麼,我需要做一個進度欄,其中完成的價值隨着... 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) 

的想法似乎並沒有工作,雖然......或者說我不理解它

回答

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.pos0,則會得到一個零除錯誤。 +1是爲了避免這種情況。