我想出了一个面试问题,我想知道你对此的看法。问题在于设计网络爬虫:
1)你会用DFS和BFS打什么样的页面?
2)你如何避免陷入无限循环?
如果有人能回答,我很感激。
答案 0 :(得分:5)
1)你会用DFS和BFS打什么样的页面?
在大多数情况下,我会使用BFS算法来实现一个蜘蛛,因为我想从网页获得的大部分有价值的信息都没有太多的链接深度,否则我认为该网站因为不好而爬行没什么价值设计。
如果我想从一个页面获取一些特定数据以及来自几个跳跃的其他相关数据,同时我想在蜘蛛运行后很快看到结果,那么我可能会选择DFS算法。说,我想从stackoverflow获取所有标签。标签页为here。与此同时,我想让谁回答标签中的问题。我想检查蜘蛛是否正常运行。然后我使用DFS算法在蜘蛛运行后立即获取数据 tag-questions-answers 。
总之,这取决于使用场景。
2)你如何避免陷入无限循环?
这个问题可能很简单。解决方案如下:
我记得scrapy似乎可以解决第二个问题。您可以阅读其源代码以搜索更好的解决方案。