搜索引擎的工作原理

搜索引擎的工作原理非常复杂,大致可以分为三个阶段:爬行与抓取、预处理、排名,如图 1-4 所示,具体介绍如下。
图 1-4 搜索引擎的工作原理
1. 爬行与抓取爬行与抓取是搜索引擎第一步工作,也就是在互联网上发现、搜集网页信息,同时对信息进行提取和建立索引库。「爬行和抓取」的具体内容包括以下几点。
(1)搜索引擎蜘蛛
搜索引擎用来爬行和访问页面的程序被称为「蜘蛛」(spider)或网络机器人,这是一种按照一定规则自动抓取互联网信息的程序或者脚本。
蜘蛛的作用就是在互联中浏览信息,然后把这些信息都抓取到搜索引擎的服务器上,然后建立索引库。我们可以把蜘蛛比作一个用户,然后这个用户访问某一个网站后,把该网站的内容保存到自己的计算机上。
搜索引擎蜘蛛与浏览器一样,也有表明自己身份的代理名称,站长可以在网站日志文件中看到搜索引擎的特定代理名称,从而知道哪些搜索引擎蜘蛛何时爬行和抓取了自己网站页面。常见的搜索引擎蜘蛛有:百度蜘蛛、雅虎中国蜘蛛、雅虎英文蜘蛛、google 蜘蛛、微软 bing 蜘蛛、搜狗蜘蛛、搜搜蜘蛛、有道蜘蛛。
(2)跟踪链接为了抓取更多的页面,搜索引擎蜘蛛会跟踪页面上的链接,从一个页面爬行到下一个页面,就像蜘蛛在蜘蛛网上爬行一样。整个互联网是由相互连接的网站及页面组成,从理论上讲,蜘蛛从任何一个页面出发,都可以顺着链接爬行到互联网上的其他页面。
由于网站及页面链接结构异常复杂,蜘蛛需要采取一定的爬行策略才能爬完网上所有的页面。搜索引擎蜘蛛的爬行策略分为两种,一种是深度优先搜索,另外一种是广度优先搜索。
① 深度优先搜索
深度优先搜索指的是蜘蛛沿着发现的链接一直向前爬行,直到再也没有其他链接,然后返回到第一个页面,再沿着另一个链接一直向前爬行。
图 1-5 所示为一个无向图,如果蜘蛛从 a 点开始爬行(访问次序井不是唯一的,第二个点既可以是 c 点也可以是 b、d 点),则得到如下一个访问过程:a→b→e,这时没有下一条路了,就会回溯到 a 点,然后继续下一访问过程:a→c→f→h→g→d(没有路,最终回到 a),回到 a 点后,a 点没有未访问过的相邻结点,本次搜索结束。
② 广度优先搜索
广度优先搜索是指蜘蛛在一个页面上发现多个链接时,不是顺着一个链接一直向前,而是把页面上所有的第一层页面都爬一遍,然后再沿着第二层页面上发现的链接爬向第三层链接。如图 1-6 所示,蜘蛛从 a 页面顺着链接爬行到 b、c、d 页面,直到 a 页面上的所有链接都爬行完了,再从 b 页面的链接爬行到 e、f 页面中。
在深度优先搜索算法中,深度越大的结点越先得到扩展。如果在搜索中把算法改为按结点的层次进行搜索,本层的结点没有搜索处理完时,不能对下层结点进行处理,即深度越小的结点越先得到扩展,也就是说先产生的结点先得以扩展处理,这种搜索算法称为广度优先搜索法。
从理论上讲,无论是深度优先还是广度优先,只要给蜘蛛足够的时间,都能爬行完整个网络。但在实际工作中,蜘蛛的宽带资源和时间都是有限的,所以不可能爬完所有的页面。深度优先和广度优先通常是混合使用的,因为这样既可以照顾到更多的网站(广度优先),也能照顾到一部分网站的页面(深度优先),同时还考虑了页面权重、网站规模和外部链接等因素。
(3)吸引蜘蛛虽然理论上蜘蛛会抓取所有的网页,但实际上会因为多种因素影响而不能抓取所有的网页。因此,seo 人员想要自己网站有更多的页面被收录,就要想办法吸引蜘蛛爬行,那么哪些因素可以吸引蜘蛛爬行呢?
· 网站和页面权重。一般来说,质量高、时间久的网站,权重都比较高,搜索引擎蜘蛛爬行的次数也比较频繁。这种网站上页面被爬行的深度比较高,收录的网页也非常多。
· 页面的更新频率。蜘蛛每次爬行都会把页面数据存储起来,如果第二次爬行时发现页面与第一次收录的内容完全相同,说明页面没有更新,蜘蛛也就不会经常抓取了。页面内容经常更新,蜘蛛会更加频繁地访问页面,页面出现新的链接,自然会被蜘蛛更快地跟踪、抓取。
· 网站的原创内容。原创内容对于百度蜘蛛的吸引力非常大,也是搜索引擎蜘蛛每天都需要的。对于原创文章的撰写,站长需要有敏锐的观察力和文字功底,原创内容要有吸引力,不能老生常谈,或者观点模糊,否则就会失去对蜘蛛的吸引力。
· 网站地图。网站地图就像是一个指向标,只有清晰明了的指向标,才能指引蜘蛛抓取的路线。如果网站地图清晰明了,就非常容易吸引蜘蛛爬行。相反,如果网站内部链接很乱,蜘蛛经常迷路,那么蜘蛛就很少会爬行,不利于抓取网站页面。
(4)地址库为了避免蜘蛛重复爬行和抓取网址,搜索引擎会建立一个地址库,记录下己经被发现但还没有被抓取的页面,以及己经被抓取的页面。地址库中 url 主要来源于以下 4 个方面:
· 人工录入的种子网站。
· 蜘蛛抓取页面后,从 html 中解析出新的链接 url,与地址库中的数据进行对比,如果地址库中没有的该网址,就存入待访问地址库。
· 站长通过搜索引擎页面提交表格提交进去的网址。
· 站长通过 xml 网站地图、站长平台提交的网址。
蜘蛛按重要性从待访问地址库中提取 url,访问井抓取页面,然后把这个 url 从待访问地址库中删除,放进己访问地址库中。
一般来说,搜索引擎都会提供一个表格,供站长提交网址。不过这些提交来的网址都只是存入地址库而己,是否收录还要看页面的重要性。搜索引擎所收录的绝大部分页面是蜘蛛自己跟踪链接得到的。可以说提交页面基本上是毫无用处的,搜索引擎更喜欢自己沿着链接发现新页面。
(5)文件储存
文件储存是指搜索引擎蜘蛛抓取的数据被存入原始页面数据库。其中的页面数据与用户浏览器得到的 html 是完全相同的。每个 url 都有一个独特的文件编号。
(6)爬行时检测内容
众所周知,在搜索引擎索引环节中会进行去重处理,其实在蜘蛛爬行的时候己经在进行检测,当蜘蛛爬行和抓取文件时会进行一定程度的复制内容检测,遇到权重低的网站上大量转载或抄袭内容时,很可能不再继续爬行。
所以对于新站来说,切莫采集和抄袭其他网站内容,这也是为什么很多站长查看日志的时候发现了蜘蛛,但是页面却没有被抓取的原因,因为蜘蛛在爬行时发现是重复内容就放弃抓取,所以蜘蛛就只停留在爬行过的阶段。
2. 预处理蜘蛛对网站进行了爬行和抓取之后,还需要对页面进行预处理,也被称为「索引」。因为搜索引擎数据库中拥有数以亿计的网页,用户输入搜索后,搜索引擎的计算量太大,很难在极短的时间内返回搜索结果,因此必须对页面进行预处理,为最后的查询排名做准备。预处理主要包括如下几个步骤。
(1)提取文字
现阶段的搜索引擎主要以文字内容为基础。蜘蛛抓取到的页面中的 html 代码,除了用户在浏览器上可以看到的可见文字外,还包含了大量的 html 格式标签、javascript 程序等无法用于排名的内容。搜索引擎预处理首先要做的就是从 html 文件中去除标签和程序,提取出用于排名处理的网页面文字内容。
(2)中文分词
中文分词是中文搜索引擎特有的一步工作内容,中文的词与词之间没有任何分隔符,一个句子里面所有字和词都是连在一起的。因此,搜索引擎首先要分辨哪几个字是组成一个词的,哪些字本身就是一个词。中文分词有两种方法,一种是基于词典匹配分词法,另一种是基于统计分词法。
· 基于词典匹配分词,是指将待分析的一段汉字与一个事先造好的词典中的词进行匹配,在待分析汉字串中扫描到词典中己有的词条,则说明匹配成功,或者可以说切分出一个单词。
· 基于统计分词,是指对大量的文字样本进行分析,计算出字与字相邻出现的概率,字与字之间相邻出现的次数越多,就越可能形成一个单词。基于统计分词方法的优势是对新出现的词反应更快速,也有利于消除歧义。
在实际使用中,会综合使用两种分词方法。搜索引擎对页面的分词取决于词库的规模、准确性和分词算法的好坏,而不是取决于页面本身,所以从分词角度来说,seo 人员对于网站能做的很少。唯一能做的是在页面上用某种形式提示搜索引擎,某几个字应该被作为一个词处理,尤其在可能产生歧义的时候,比如在页面标题、h1 标签及黑体中出现关键词。如果某页面是关于「舞蹈培训」的内容,那么可以把「舞蹈培训」这几个字标为黑体这样搜索引擎对页面进行分析时就会知道标为黑体的是一个词。
(3)去停止词
停止词是一些在页面内容中出现频率很高,但是对内容没有任何影响的词,如「的」「地」「得」之类的助词,还有「啊」「哈」「呀」之类的感叹词,「从而」「以」「却」之类的副词或者介词。除中文外还有一些英文的常见停止词,如 the、a、an、to、of 等。
因为它们对页面的主要意思没什么影响,故搜索引擎在索引页面之前会去掉这些停止词,使索引数据主题更为突出,减少无谓的计算量。
(4)消除噪声
噪声井不是指网页中的嘈杂的声音,而是指页面上对页面主题没有贡献的内容,比如版权声明文字、导航条、广告等,这些内容对页面主题只能起到分散作用。因此搜索引擎需要识别井消除这些噪声,排名时不使用噪声内容。消噪的基本方法是根据 html 标签对页面分块,区分出页头、导航、正文、页脚、广告等区域,在网站上大量重复出现的区块柱柱属于噪声。对页面进行消噪后,剩下的才是页面主体内容。
(5)去重
同一篇文章经常会重复出现在不同网站及同一个网站的不同网址上,搜索引擎井不喜欢这种重复性的内容。用户搜索这