整体系统介绍
搜索引擎大致可以分为四个部分:搜集、分析、索引、查询:
- 搜集,就是我们常说的利用爬虫爬取网页;
- 分析,主要负责网页内容抽取、分词,构建临时索引,计算 PageRank 值这几部分工作;
- 索引,主要负责通过分析阶段得到的临时索引,构建倒排索引;
- 查询,主要负责响应用户的请求,根据倒排索引获取相关网页,计算网页排名,返回查询结果给用户;
搜集
搜索引擎把整个互联网看作数据结构中的有向图,把每个页面看作一个顶点。如果某个页面中包含另外一个页面的链接,那我们就在两个顶点之间连一条有向边。我们可以利用图的遍历搜索算法,来遍历整个互联网中的网页。我们前面介绍过两种图的遍历方法,深度优先和广度优先。搜索引擎采用的是广度优先搜索策略。具体点讲的话,那就是,我们先找一些比较知名的网页(专业的叫法是权重比较高)的链接(比如新浪主页网址、腾讯主页网址等),作为种子网页链接,放入到队列中。爬虫按照广度优先的策略,不停地从队列中取出链接,然后去爬取对应的网页,解析出网页里包含的其他网页链接,再将解析出来的链接添加到队列中。
爬虫在爬取网页的过程中,涉及的四个重要的文件。其中,links.bin 和 bloom_filter.bin 这两个文件是爬虫自身所用的;另外的两个 doc_raw.bin 和 doc_id.bin 是作为搜集阶段的成果,供后面的分析、索引、查询用的。
待爬取网页链接文件:links.bin
我们可以把整个页面看作一个大的字符串,然后利用字符串匹配算法,在这个大字符串中,搜索这样一个网页标签,然后顺序读取之间的字符串 – 这其实就是网页链接。在广度优先搜索爬取页面的过程中,爬虫会不停地解析页面链接,将其放到队列中。于是,队列中的链接就会越来越多,可能会多到内存放不下。所以,我们用一个存储在磁盘中的文件(links.bin)来作为广度优先搜索中的队列。爬虫从 links.bin 文件中,取出链接去爬取对应的页面。等爬取到网页之后,将解析出来的链接,直接存储到 links.bin 文件中。这样用文件来存储网页链接的方式,还有其他好处。比如,支持断点续爬。也就是说,当机器断电之后,网页链接不会丢失;当机器重启之后,还可以从之前爬取到的位置继续爬取。