2017-04-23 33 views
0

我在Python中使用BeautifulSoup4編寫了一個程序,該程序從隨機維基百科文章開始,僅抓取段落部分中的前兩個鏈接。我想創建一棵樹,在那裏獲取隨機文章的前兩個鏈接,然後轉到這兩個鏈接並抓取這些頁面上的前兩個鏈接,依此類推。自然地,使用遞歸是有意義的,但我被卡住了。Python中的遞歸網站樹

這裏是我的抽象代碼:

def tree(link): 
    branch = get_links(link) # Function returns the first two links on the article in a list of strings 
    return tree(branch[0]), tree(branch[1]) 

origin = get_random_article() # Returns a link to a random Wikipedia article as a string 

links = tree(origin) 

此代碼創建一個無限循環,很顯然,我需要某種形式的迭代過程,或循環,以限制它。

這裏是我的堅持是什麼:

  1. 我需要某種限制的,以有多少分支創建,所以也沒有無限循環
  2. 的一種方式返回所有的鏈接它發現一旦它創建了指定數量的分支

我將輸出一個文件或某事的數據,但現在,任何關於如何創建這棵樹的幫助非常感謝。

謝謝你在前進,

盧卡斯

+0

你可以保持全局計數器或傳遞一個額外的參數的極限 –

+1

不知道的方法,爲什麼你使用beautifulsoup獨自做到這一點。 https://docs.scrapy.org/en/latest/faq.html –

回答

0

使用隊列或堆棧。從隨機文章開始獲取兩個鏈接,將它們添加到隊列中。從隊列中獲取一個鏈接,然後重複。無論何時從隊列中獲取文章,都會增加計數。如果計數大於您想要的限制,請停止。

然而,正如@ cricket_007提到嘗試scrapy

+1

或者一個堆棧,取決於「深度優先」vs「寬度優先」 –

+1

謝謝。這幫助我弄明白了。 – Lukesta72