有人知道the web crawler described here是使用深度优先还是广度优先搜索?我的直觉说这是一个广度优先的搜索,但我不是百分之百确定。
此外,网络抓取工具使用这些搜索方式(特别是使用递归)是否常见?
答案 0 :(得分:3)
这是深度优先搜索。请注意以下代码:
//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时从经验中得出结论。 : - )
希望这有帮助!