【问题标题】:Is this web crawler doing a breadth-first search or a depth-first search?这个网络爬虫是在做广度优先搜索还是深度优先搜索?
【发布时间】:2013-11-03 23:55:14
【问题描述】:

有谁知道the web crawler described here 使用深度优先还是广度优先搜索?我的直觉告诉我这是广度优先搜索,但我不能 100% 确定这一点。

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

【问题讨论】:

    标签: java web-crawler breadth-first-search depth-first-search


    【解决方案1】:

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

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

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

    希望这会有所帮助!

    【讨论】:

    • 感谢您的帮助!最后一个问题,如果你不介意?如果这家伙要使用BFS,是不是去根节点,将所有相关链接存储在一个列表中,然后遍历这个列表并做同样的事情?
    猜你喜欢
    • 1970-01-01
    • 2018-02-02
    • 2011-01-31
    • 1970-01-01
    • 1970-01-01
    • 2016-02-16
    • 1970-01-01
    • 1970-01-01
    • 2012-05-23
    相关资源
    最近更新 更多