2

有谁知道这里描述的网络爬虫使用深度优先还是广度优先搜索?我的直觉说这是广度优先搜索,但我对此不是 100% 确定的。

此外,网络爬虫使用这些搜索方式(特别是使用递归)是否很常见?

4

1 回答 1

5

这是深度优先搜索。注意这段代码:

//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,将未探索的页面放入工作列表并拥有一堆线程来抓取未探索的页面并处理它们,这可能会更有效率。

在浏览 Web 链接时使用递归也不是一个好主意。如果您尝试这样做,您将很容易破坏调用堆栈,因为任何足够大的网站都会有遍布各处的链接。我在尝试在 Wikipedia 上进行 DFS 时从经验中发现了这一点。:-)

希望这可以帮助!

于 2013-11-03T23:58:17.397 回答