Cracking the coding interview--Q12.5

题目

原文:

If you were designing a web crawler, how would you avoid getting into infinite loops?

译文:

如果你正在设计一个网络爬虫,何如避免进入无限循环?

解答

首先了解什么是网络爬虫,http://blog.csdn.net/navyifanr/article/details/21442653

网络爬虫的通用框架如图:

Cracking the coding interview--Q12.5_第1张图片

    网络爬虫的基本工作流程如下:

    1.首先选取一部分精心挑选的种子URL;

    2.将这些URL放入待抓取URL队列;

    3.从待抓取URL队列中取出待抓取在URL,解析DNS,并且得到主机的ip,并将URL对应的网页下载下来,存储进已下载网页库中。此外,将这些URL放进已抓取URL队列。

    4.分析已抓取URL队列中的URL,分析其中的其他URL,并且将URL放入待抓取URL队列,从而进入下一个循环。

    由上可知,当我们重新去解析一个已经解析过的网页时, 就会陷入无限循环。这意味着我们会重新访问那个网页的所有链接, 然后不久后又会访问到这个网页。最简单的例子就是,网页A包含了网页B的链接, 而网页B又包含了网页A的链接,那它们之间就会形成一个闭环。

         那么我们怎样防止访问已经访问过的页面呢,可以通过设置一个标志。 整个互联网就是一个图结构,我们通常使用DFS(深度优先搜索)和BFS(广度优先搜索) 进行遍历。所以,像遍历一个简单的图一样,将访问过的结点标记一下即可。


---EOF---


你可能感兴趣的:(Cracking the coding interview--Q12.5)