回答

2

這是深度優先搜索。注意:此代碼:

//get all links and recursively call the processPage method 
Elements questions = doc.select("a[href]"); 
for(Element link: questions){ 
    if(link.attr("href").contains("mit.edu")) 
     processPage(link.attr("abs:href")); 
} 

此代碼通過充分發掘的第一個鏈接,一切將可達遞歸探索所有的網頁上找到的鏈接,那麼第二個鏈接,一切訪問,等等。因此,這種探索在深度 - 第一時尚。

這就是說,這將是真的慢,因爲只有一個線程正在做探索。如果將其重寫爲修改後的BFS,將未探索的頁面放入工作列表並且有一堆線程抓取未探索的頁面並處理它們,這可能會更有效。

探索網頁鏈接時使用遞歸也不是一個好主意。如果你嘗試這樣做,你會輕易地吹掉調用堆棧,因爲任何足夠大的網站都會有鏈接遍佈整個地方。當我試圖在維基百科上做一個DFS時,我從中得出了這個想法。 :-)

希望這有助於!

+0

謝謝你的幫助!最後一個問題,如果你不介意?如果這個人使用BFS,是否是轉到根節點,將所有相關鏈接存儲在列表中,然後遍歷此列表並執行相同操作的情況? – user2950150