1、蜘蛛
搜索引擎用来爬行和访问页面的程序被称为蜘蛛(spider)或机器人(bot)。
搜索引擎蜘蛛访问网站页面的过程与普通用户使用浏览器的过程相似。蜘蛛程序发出页面访问请求后,服务器返回HTML代码,蜘蛛程序将收到的HTML代码存入原始页面数据库。搜索引擎为了提高爬行和抓取速度,常使用多个蜘蛛并发分布爬行。
蜘蛛在访问任何一个网站时,都会先访问网站根目录下的robots文件。如果robots文件禁止搜索引擎抓取某些文件或目录,蜘蛛将遵守协议,不抓取被禁止的网址。
2、跟踪链接
为了抓取尽量多的页面,搜索引擎蜘蛛会跟踪页面上的链接,从一个页面爬行到下一个页面,就好像蜘蛛在蜘蛛网上爬行那样,这也是搜索引擎蜘蛛这个名称的由来。
整个互联网是由相互链接的网站及页面组成的。从理论上说,蜘蛛从任何一个页面出发,顺着链接都可以爬行到网上的所有页面(除了一些与其他网站没有任何链接的孤岛页面)。当然,由于网站及页面链接结构异常复杂,蜘蛛需要采取一定的基于图论的爬行策略才能遍历网上所有的页面。
最简单的爬行遍历策略分为两种:一种是深度优先,另一种是广度优先。
所谓深度优先,指的是蜘蛛沿着发现的链接一直向前爬行,直到前面再也没有其他链接,然后返回到第一个页面,沿着另一个链接再一直往前爬行。蜘蛛跟踪链接,从A页面爬行到 A1、A2、A3、A4。爬完A4页面后,如果已经没有其他链接可以跟踪,则返回A页面,顺着页面上的另一个链接,爬行到 BI、B2、B3、B4。在深度优先策略中,蜘蛛一直爬到无法再向前,才返回爬行另一条线。
广度优先是指蜘蛛在一个页面上发现多个链接时,不是顺着一个链接一直向前,而是把页面上所有第一层链接都爬行一遍,然后再沿着第二层页面上发现的链接爬向第三层页面。蜘蛛从A页面顺着链接爬行到A1、B1、C1页面,直到A 页面上的所有链接都爬行完毕,再从 A1页面发现的下一层链接,爬行到 A2、A3、A4页面…
从理论上说,无论是深度优先还是广度优先,只要给予蜘蛛足够的时间,都能爬完整个互联网。但在实际工作中,蜘蛛的带宽资源、时间都不是无限的,不可能、也没必要爬完所有页面。实际上,最大的搜索引擎也只是爬行和收录了互联网的一小部分内容。
3、吸引蜘蛛爬取的要点
(1) 网站权重。高质量、老域名网站的页面更容易被深度爬取,收录更多内页。
(2) 页面更新频率。蜘蛛会记录页面版本,频繁更新的页面会被更频繁抓取,新链接也能更快被发现。
(3) 导入链接。无论是外链还是内链,页面必须有入口链接才能被蜘蛛发现。高质量外链能提升抓取深度。
(4) 与首页的距离。一般来说,首页权重最高,离首页越近的页面,被蜘蛛爬行的几率越大。
(5) URL结构。页面权重越高,越容易被蜘蛛抓取。蜘蛛会基于链接结构、URL长度等因素进行预判,除了链接、与首页距离、历史数据等因素,短的、层次浅的URL也可能被直观地认为在网站上的权重相对较高。
4、地址库及调度系统
为了避免重复爬行和抓取网址,搜索引擎会建立地址库,记录已经被发现但还没有抓取的页面,以及已经被抓取的页面。蜘蛛在页面上发现链接后并不是马上就去访问,而是将URL存入地址库,然后统一由调度系统安排抓取。
蜘蛛按重要性从待访问地址库中提取URL,访问并抓取页面,然后把这个URL从待访问地址库中删除,存放进已访问地址库中。无论是通过 XML网站地图还是通过表格提交的网址,都只是存入地址库而已,是否抓取和收录取决于其页面的重要性和质量。搜索引擎收录的绝大部分页面是蜘蛛自己跟踪链接得到的。对中小网站来说,提交页面的作用微乎其微,搜索引擎更喜欢自己沿着链接发现新页面。大型网站提交XML网站地图对收录有一定帮助。
5、文件存储
搜索引擎蜘蛛抓取的数据存入原始页面数据库,其中的页面数据与用户浏览器得到的 HTML 是完全一样的,每个URL都有一个独特的文件编号。
6、爬行时的复制内容检测
复制内容检测通常在预处理阶段完成,但蜘蛛在爬行时也会初步识别,但蜘蛛在爬行和抓取文件时,也会进行一定程度的复制内容检测。若发现权重很低的网站上出现大量转载或抄袭内容,蜘蛛很可能不再继续爬行。这也是有的站长在日志文件中发现了蜘蛛,但页面却从来没有被真正收录过的原因之一。
改编自昝辉《SEO实战密码》第5版