《2.2、页面搜集原理、技术和系统--搜集过程》中我们知道调度器会派发URL给各个蜘蛛进行网页的抓取,但是怎样才能避免同一个URL会被重复的抓取呢?调度器是如何确保分配给每个蜘蛛都是最合理的呢?本文黄聪就和大家分析一下。

下面我们就看看调度器是怎么实现避免网页重复搜集的:

如何避免网页重复搜集

上图中,我们发现调度器中有一个重要的模块是URL库,URL库又由已访问URL库和未访问URL库来组成。调度器就和通过这个URL库来实现避免网页重复搜集的。

调度器的工作流程

  • 1、从未访问URL表中依次取出URL,分配给各个蜘蛛。
  • 2、蜘蛛得到URL,进行抓取,得到网页的源代码,对该源代码进行URL的提取,获得该网页包含的所有URL。
  • 3、调度器依次查看得到的URL是否在已访问URL库中存在。如果存在,则说明已经被抓取过,那么将该URL丢弃;如果不存在,说明这个URL没有被抓取过,则顺序添加到未访问URL表中,等待之后抓取。
  • 4、重复步骤1,直到未访问表为空。

小结

虽然调度器通过已访问URL表和未访问URL表理论上实现了避免网页重复搜集的问题,但是由于域名和IP存在一对一、一对多、多对一、多对多的情况,难免还是会存在个别网页重复搜集的问题,这些就不在本文展开来讲了。

下一节我们来看《2.5、页面搜集原理、技术和系统--如何首先搜集重要的网页》