1
有誰知道the web crawler described here是使用深度優先還是廣度優先搜索?我的直覺說,這是一個廣度優先的搜索,但我不能100%確定這一點。此網頁抓取工具是進行廣度優先搜索還是進行深度優先搜索?
此外,網絡爬蟲使用這些搜索方式(特別是使用遞歸)是否是一件普通的事情?
有誰知道the web crawler described here是使用深度優先還是廣度優先搜索?我的直覺說,這是一個廣度優先的搜索,但我不能100%確定這一點。此網頁抓取工具是進行廣度優先搜索還是進行深度優先搜索?
此外,網絡爬蟲使用這些搜索方式(特別是使用遞歸)是否是一件普通的事情?
這是深度優先搜索。注意:此代碼:
//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時,我從中得出了這個想法。 :-)
希望這有助於!
謝謝你的幫助!最後一個問題,如果你不介意?如果這個人使用BFS,是否是轉到根節點,將所有相關鏈接存儲在列表中,然後遍歷此列表並執行相同操作的情況? – user2950150