最近想梳理一下搜索搜索引擎相关的理论与技术,从爬虫开始,总结一下这方面的问题与解决方案。
不论是分布式爬虫还是单体爬虫、主题爬虫等,最关键的是爬行算法,而作为爬虫数据源的互联网可以抽象的看作是一张有向图,现对该图定义如下:
1.将互联网定义为图
2.每个页面定义为图节点
3.页面中的链接定义为有向边
简而言之,爬虫通过遍历这张有向图来爬取相关信息,并使用这些信息创建索引供检索程序查询。
图的遍历算法有深度优先算法与宽度优先算法,而前者容易使爬虫陷入黑洞,所以宽度优先算法被用来实现爬虫的爬行算法,但是有时也不会完全按照宽度优先算法进行爬行,而是做相应的变通,如带偏好的爬行算法。
首先来看图的宽度的优先遍历算法,
图1为要遍历的图:
图-1 要遍历的有向图
选择A为遍历的根节点,则具体的遍历过程如下表所示:
操作 | 队列 |