现在的位置: 首页 > 搜索引擎优化 > 正文

搜索引擎抓取系统浅解【系列①】

2013年09月12日 搜索引擎优化 ⁄ 共 3627字 评论数 6 ⁄ 阅读 7,778 次
文章目录

作者:笨鸟  原载于:ITSEO

了解搜索引擎抓取网页过程有助于理清SEO工作方向,本文中笨鸟将结合网络、图书等资源及个人理解来探讨搜索引擎抓取过程及对SEO的指导意义。

首先,看一下搜索引擎抓取的简要过程,如图:

搜索引擎抓取原理

上图简要的描绘了SE抓取过程原理,虽然在分布式信息采集中需要爬虫之间有通信,但针对单一爬虫大概过程便如图所示,下面针对每个步骤做解析:

1、总链接库

总链接库存放着爬虫曾经爬取过的URL及时刻新增的URL,由调度系统控制提取出新URL或需要重访的URL交由爬虫爬取。总链接库中存放的URL都是唯一不重复的,这样保证了爬虫的不重复抓取、避免陷入循环陷阱。

2、抓取策略

相对于整个互联网新增内容,SE资源是有限的。全部抓取是不可能的事,需要SE以最小成本抓取最大量重要内容,这便需要抓取优先级调配策略。在调度系统中,待抓取URL成队列结构,抓取策略便起到了对这些队列进行排序的作用。

爬虫的抓取策略很多,不过其目标都是优先爬取重要网页。常见如:宽度优先遍历策略、深度优先遍历策略、PR优先策略、反链优先策略、OPIC策略、大站优先策略等。

宽度优先遍历策略指抓取某一起始页面后,将该页面内所有链接放入待抓取队列末尾,不对网页重要性进行评级,按顺序依次抓取,如图遍历路径:A B-C-D-E H F G。该策略最常见的实例就是,一般情况下首页中链接最容易被优先抓取,尤其是目录页;

深度优先遍历策略指抓取某一起始页面后,选取其中某一链接进行跟踪抓取直至抓取完毕,进入下一起始页,继续跟踪抓取,如图遍历路径:A B C-F-G D E-H;

宽度/深度优先遍历-搜索引擎原理

PR优先策略在此指非完全PR策略,因为PR是个针对全体网页的算法,而爬虫抓取过程中只能针对某个网页集合进行PR计算,故称非完全PR优先策略。在这种策略中,根据待抓取队列中URL的非完全PR值来确定抓取顺序。当然,这种PR值并非每抓取一个页面计算一次,而是在抓取一定量如X个页面后,将所有下载页面重新计算一遍新的非完全PR值。根据这些PR值,确定待下载队列中URL的下载顺序。在未抓取到X个页面前,新抓取页面中提取出的URL可能重要性要高于之前的URL,将这些URL以PR为0放在待下载队列的末尾是不合适的。此时,就要根据这个页面所有反链计算一个临时PR,以次插入到待下载队列;

反链优先策略指根据网页被其他网页链接的数量来确定待抓取队列中URL的抓取顺序;

OPIC策略,Online Page Importance Computation,在线页面重要性计算。这种策略类似于PR优先,本质上也是给页面赋予了“质量分”。在算法开始前,给所有页面赋予相同的初始“现金”(cash),当某个页面被下载后,该页面将自己的“现金”平均分配给页面中所有链接,并清空自身现金。对于待抓取URL,根据现金量进行重要性排序抓取。

大站优先策略指对于待抓取URL,根据其归属域名进行分类整理,优先下载待下载URL数量多的链接。

其他策略如根据URL中目标层级,URL后缀及URL中字符串等确定抓取排序。

在实际抓取中,往往是多种策略组合使用的。以上策略对于SEO提高收录有很多指导意义,如:控制入链数、控制出链数、控制网站结构及外链权重(数量、质量、Nofollow等)、增加新内容更新频率等。

3、爬虫

爬虫是根据指定URL下载网页内容的程序或脚本,一般搜索引擎均采用分布式爬虫架构。分布式爬虫由数据中心、分布式抓取服务器、分布式爬虫程序组成,数据中心由多台抓取服务器组成,每台抓取服务器可承载多个爬虫程序。

常见分布式架构有主从式分布爬虫对等式分布爬虫

主从式分布爬虫相当于只有一个URL分配服务器,将全互联网的URL分配给若干个抓取服务器进行下载。这种架构明显对URL分配服务器性能要求很高,面对互联网大数据,很容易出现系统瓶颈。

对等式分布爬虫没有URL分配服务器,每台抓取服务器负责特定域名集合下URL的抓取。对互联网域名分集可通过哈希取模一致性哈希

哈希取模指对于n台抓取服务器,首先对域名进行哈希计算,得到的值对n取模,得到余数即为该域名应分配的服务器编号。例如,假设有5台抓取服务器,对应编号为0、1、2、3、4,对域名进行哈希计算后得到的值为16,16对5取模得到余数1,即该域名下URL应交由1号服务器抓取。然而,这种模式存在缺陷,在某台抓取服务器宕机或由于URL增加导致服务器平均负载增加而需要增加抓取服务器时,取模的n就需要改变。这就意味着整个系统要进行重新分配,将导致资源的浪费。

一致性哈希指对域名进行哈希计算,映射为一个在0~232之间的某个数,将哈希范围首尾相接,即认为数值0和232重合,可以将其假想成一个有序的环状序列,每台服务器负责某个数值段,如下图。假设本站域名经哈希后落入2号服务器执行抓取,而2号服务器出现宕机,则继续按顺时针查找,将URL交由第一个碰到的服务器,即3号服务器,直至2号服务器恢复正常。

一致性哈希分布式爬虫结构-搜索引擎原理

由于分布式爬虫结构,故同一网站会出现很多不同IP的蜘蛛爬取记录,这是协同抓取系统中很正常的事。部分SEOer认为不同IP段意味着不同权重的蜘蛛,其中某字段IP蜘蛛为降权蜘蛛。抓取系统可能会对URL进行权重赋值,以便于确定抓取顺序。然而,这个权重值也仅仅用于抓取系统,网页检索排序有更复杂的权重规则。故,降权蜘蛛一说不成立。

4、下载

蜘蛛下载过程与浏览器类似,不同点在于蜘蛛仅下载HTML文件,不对文件进行渲染,不加载图片、Flash等内容,一般情况下不加载JS。

蜘蛛在采集网站信息时会考虑网站的网络负载,根据网站的网络带宽来控制抓取量。一般情况下,负载是基于IP控制的。故而,增加网站的带宽是有利于SEO的。当然,如果是共享IP的网站,这点很难控制。

下载过程大致可分为四个步骤:DNS解析TCP连接服务器计算HTML下载

DNS解析主要跟DNS服务器性能有关,另外与解析方式也有一定关系。对于SEO而言,可以通过测试选择专业的DNS服务商。在这个步骤最容易出现的情况是运营部门屏蔽蜘蛛IP,因为蜘蛛爬取过程很类似DOS攻击。笨鸟所在公司就曾出现运营部门屏蔽谷歌蜘蛛导致谷歌收录消失的事件,曾经国内某著名IDC服务商运营部门也曾无意屏蔽百度蜘蛛,导致使用该IDC服务器的大批网站出现百度收录消失的情况。

TCP连接速度主要取决于Web服务器能否快速接入请求,一般而言,当服务器同时接入大量请求信息时会产生拥堵甚至拒绝接入的情况,接入量越大TCP连接速度越慢。当然,也跟所选WEB服务器程序(如IIS、Apache、Nginx等)有关。针对大型网站,可通过增加配置解决问题。针对采用合租服务器方式的小型网站,要避免和论坛、下载站等访问量大、消耗带宽大的网站共享服务器。

服务器计算速度主要取决于网站程序构架、数据库执行效率、程序语言效率等(针对动态内容),同时与并行处理量等有关。在这一过程最常见的问题就是数据库执行效率低下,因而会导致网站速度降低甚至出现页面访问出错的情况。笨鸟所在公司服务器就经常因为同一时间访问量过大而出现数据库错误的情况,另人相当郁闷。针对该过程进行优化主要是运营的事情了,要么换好一点的程序要么换好一点的工程师。

HTML下载速度主要取决文件的大小及网络带宽(针对大型网站较明显),对于SEO而言,可对HTML代码进行优化。很多网站HTML代码都存在冗长的问题,甚至通篇代码而文本内容仅占极小一部分。笨鸟所在公司部分页面也存在这个问题,曾经使用过的页面功能,在去除后仍保留代码,或者某一“更多”按钮下隐藏着该功能全部的链接(都体现在HTML里,内容甚至超过了页面主体的内容量!)。针对HTML优化,看源码是个好习惯。

“域名拆分+多服务器”可以同时从四个步骤加速网站,合理对域名进行拆分,主域名仅加载HTML内容,将图片、Flash、JS等均匀分配到其他域名进行加载。

5、总网页库

对抓取到的网站进行存储,可以让SE在搜索结果中快速创建网页摘要,可以节省SE的CPU及网络资源,可以为后续的索引、排序等信息抽取(如抽取锚文本)提供支撑。而且这些存储数据必须支持大规模平滑存储、随机访问和顺序访问、大规模更新等,这就需要到很多技术支撑,不过这块内容与SEO基本无关。

6、URL提取更新

此步骤提取抓到网页中的URL,并对这些URL进行去重、规范等处理,与URL库进行通信,新增不重复URL、去除已失效页面URL等。对于SEO而言,部分已抓取且排名价值不大的页面可以适当Nofollow,给予新页面、重要页面更多的爬取机会及权重。

搜索引擎抓取系统大概就是这样的,鉴于个人知识有限,文中难免有错误或疏漏之处,笨鸟真诚欢迎您指正批评!


参考:

  • 《搜索引擎技术基础》
  • 《搜索引擎信息检索实践》
  • 《这就是搜索引擎》
  • 《走进搜索引擎》
  • 百度站长平台、谷歌网站管理员等网络资源
  • 特别感谢我在河大论坛的搭档兼好友“cracker”红帆给予耐心的技术指导!
» 声明:本站文章源于个人经验总结或书籍、互联网转载,内容仅用于个人学习,请勿转载,否则后果自负!

目前有 6 条留言 其中:访客:3 条, 博主:3 条


  1. 管理员
    大河笨鸟 : 2013年10月31日16:53:42  -49楼 @回复 回复

    通俗来讲,收录的决定因素只有两个,自身网站怎么样,该页面的链接总质量怎么样。

  2. 若我若鱼 : 2013年11月14日16:46:33  -48楼 @回复 回复

    你好,我想问下,你用知更鸟主题,写文章时候用的编辑器是什么?我遇到个问题,我用的是百度编辑器,使用该主题后,文章里插入的代码,格式都乱掉了。


    • 管理员
      大河笨鸟 : 2013年11月17日21:22:58  地下1层 @回复 回复

      用程序默认的,使用HTML编辑模式里的code写代码。

  3. Atlas : 2014年06月20日17:24:43  -47楼 @回复 回复

    很不错!《这就是搜索引擎》这本很赞的!
    顺便问一下:文章中的目录是怎么做的?


    • 管理员
      大河笨鸟 : 2014年07月04日14:54:53  地下1层 @回复 回复

      后期修改的主题

  4. 天下彩 : 2016年10月17日13:55:28  -46楼 @回复 回复

    不错,谢谢分享

给我留言

留言无头像?