XML地图 黑帽SEO培训为广大SEO爱好者提供免费SEO教程,致力于SEO优化、SEO服务
首页 > SEO资讯 » 搜索引擎之网络爬虫介绍

搜索引擎之网络爬虫介绍

2018-10-09T21:07:37 | 人围观 | 关键词:搜索引擎之网络爬虫介绍--SEO培训


  搜索引擎之网络爬虫介绍
 

  “满面尘灰烟火色,两鬓苍苍十指黑。
 

  卖炭得钱何所营?身上衣裳口中食。
 

  可怜身上衣正单,心忧炭贱愿天寒。
 

  夜来城外一尺雪,晓驾炭车辗冰辙。
 

  牛困人饥日已高,市南门外泥中歇。
 

  翩翩两骑来是谁?黄衣使者白衫儿。
 

  手把文书口称敕,回车叱牛牵向北。
 

  一车炭,千余斤,宫使驱将惜不得。
 

  半匹红绡一丈绫,系向牛头充炭直。”
 

  通用搜索引擎的处理对象是互联网网页,目前网页数量以百亿计,所以搜索引擎首先面临的问题就是:如何‍能够设计出高效的下载系统,以将如此海量的网页数据传送到本地,在本地形成互联网网页的镜像备份。
 

  网络爬虫即起此作用,它是搜索引擎系统中很关键也很基础的构件。本章主要介绍与网络爬虫相关的技术,尽管爬虫技术经过几十年的发展,从整体框架上已相对成熟,但随着互联网的不断发展,也面临‍着一些有挑战性的新问题。
 

  2.1 通用爬虫框架
 

  图2-1所示是一个通用的爬虫框架流程。首先从互联网页面中精心选择一部分网页,以这些网页的链接地址作为种子URL,将这些种子URL放入待抓取URL队列中,爬虫从待抓取URL队列依次读取,并将URL通过DNS解析,把链接地址转换为网站服务器对应的IP地址。然后将其和网页相对路径名称交给网页下载器,网页下载器负责页面内容的下载。对于下载到本地的网页,一方面将其存储到页面库中,等待建立索引等后续处理;另一方面将下载网页的URL放入已抓取URL队列中,这个队列记载了爬虫系统已经下载过的网页URL,以避免网页的重复抓取。对于刚下载的网页,从中抽取出所包含的所有链接信息,并在已抓取URL队列中检查,如果发现链接还没有被抓取过,则将这个URL放入待抓取URL队列末尾,在之后的抓取调度中会下载这个URL对应的网页。如此这般,形成循环,直到待抓取URL队列为空,这代表着爬虫系统已将能够抓取的网页尽数抓完,此时完成了一轮完整的抓取过程。

 

  网络爬虫

 

  对于爬虫来说,往往还需要进行网页去重及网页反作弊,由于本书有专门章节讲解,所以未在此处列出,详情请参考相关章节。
 

  上述是一个通用爬虫的整体流程,如果从更加宏观的角度考虑,处于动态抓取过程中的爬虫和互联网所有网页之间的关系,可以大致像如图2-2所示那样,将互联网页面划分为5个部分:

 

  网络爬虫

 

  · 已下载网页集合:爬虫已经从互联网下载到本地进行索引的网页集合。
 

  · 已过期网页集合:由于网页数量巨大,爬虫完整抓取一轮需要较长时间,在抓取过程中,很多已经下载的网页可能过期。之所以如此,是因为互联网网页处于不断的动态变化过程中,所以易产生本地网页内容和真实互联网网页不一致的情况。
 

  · 待下载网页集合:即处于图2-1中待抓取URL队列中的网页,这些网页即将被爬虫下载。
 

  · 可知网页集合:这些网页还没有被爬虫下载,也没有出现在待抓取URL队列中,不过通过已经抓取的网页或者在待抓取URL队列中的网页,总是能够通过链接关系发现它们,稍晚时候会被爬虫抓取并索引。
 

  · 不可知网页集合:有些网页对于爬虫来说是无法抓取到的,这部分网页构成了不可知网页集合。事实上,这部分网页所占的比例很高。
 

  从理解爬虫的角度看,对互联网网页给出如上划分有助于深入理解搜索引擎爬虫所面临的主要任务和挑战。
 

  图2-1所示是通用的爬虫框架流程,绝大多数爬虫系统遵循此流程,但是并非意味着所有爬虫都如此一致。根据具体应用的不同,爬虫系统在许多方面存在差异,大体而言,可以将爬虫划分为如下3种类型。
 

  · 批量型爬虫(Batch Crawler):批量型爬虫有比较明确的抓取范围和目标,当爬虫达到这个设定的目标后,即停止抓取过程。至于具体目标可能各异,也许是设定抓取一定数量的网页即可,也许是设定抓取消耗的时间等,不一而足。
 

  · 增量型爬虫(Incremental Crawler):增量型爬虫与批量型爬虫不同,会保持持续不断的抓取,对于抓取到的网页,要定期更新,因为互联网网页处于不断变化中,新增网页、网页被删除或者网页内容更改都很常见,而增量型爬虫需要及时反映这种变化,所以处于持续不断的抓取过程中,不是在抓取新网页,就是在更新已有网页。通用的商业搜索引擎爬虫基本都属此类。
 

  · 垂直型爬虫(Focused Crawler):垂直型爬虫关注特定主题内容或者属于特定行业的网页,比如对于健康网站来说,只需要从互联网页面里找到与健康相关的页面内容即可,其他行业的内容不在考虑范围。垂直型爬虫一个最大的特点和难点就是:如何识别网页内容是否属于指定行业或者主题。从节省系统资源的角度来说,不太可能把所有互联网页面下载下来之后再去筛选,这样浪费资源就太过分了,往往需要爬虫在抓取阶段就能够动态识别某个网址是否与主题相关,并尽量不去抓取无关页面,以达到节省资源的目的。垂直搜索网站或者垂直行业网站往往需要此种类型的爬虫。
 

  本章主要讲述增量型爬虫,因为无论从处理的数据量上来讲,还是从所面临的技术难度来讲,这种类型的爬虫相对而言都要复杂一些,当然,其中很多技术对于其他两种类型的爬虫来说也是共通的。
 

  2.2 优秀爬虫的特性
 

  对于不同的应用来说,爬虫系统实现方式可能各异,但是实用的爬虫系统都应该具备以下几种特性。
 

  高性能
 

  互联网的网页数量庞大如海,所以爬虫的性能至关重要,这里的性能主要是指爬虫下载网页的抓取速度,常见的评价方式是以爬虫每秒能够下载的网页数量作为性能指标,单位时间能够下载的网页数量越多,则爬虫的性能越高。
 

  要提高爬虫的性能,在设计时程序访问磁盘的操作方法及具体实现时数据结构的选择很关键。比如对于待抓取URL队列和已抓取URL队列,因为URL数量非常大,不同实现方式性能表现迥异,所以高效的数据结构对于爬虫性能影响很大。
 

  可扩展性
 

  如上所述,爬虫需要抓取的网页数量巨大,即使单个爬虫的性能很高,要将所有网页都下载到本地,仍然需要相当长的时间周期,为了能够尽可能缩短抓取周期,爬虫系统应该有很好的可扩展性,即很容易通过增加抓取服务器和爬虫数量来达到此目的。
 

  目前实用的大型网络爬虫一定是分布式运行的,即多台服务器专做抓取,每台服务器部署多个爬虫,每个爬虫多线程运行,通过多种方式增加并发性。对于巨型的搜索引擎服务商来说,可能还要在全球范围、不同地域分别部署数据中心,爬虫也被分配到不同的数据中心,这样对于提高爬虫系统的整体性能是很有帮助的。
 

  健壮性
 

  爬虫要访问各种类型的网站服务器,可能会遇到很多种非正常情况,比如网页HTML编码不规范,被抓取服务器突然死机,甚至是爬虫陷阱等。爬虫对各种异常情况能够正确处理非常重要,否则可能会不定期停止工作,这是无法忍受的。
 

  从另外一个角度来讲,假设爬虫程序在抓取过程中死掉,或者爬虫所在的服务器宕机,健壮的爬虫系统应该能够做到:再次启动爬虫时,能够恢复之前抓取的内容和数据结构,而不是每次都需要把所有工作完全从头做起,这也是爬虫健壮性的一种体现。
 

  友好性
 

  爬虫的友好性包含两方面的含义:一是保护网站的部分私密性,另一是减少被抓取网站的网络负载。
 

  爬虫抓取的对象是各种类型的网站,对于网站拥有者来说,有些内容并不希望被所有人搜索到,所以需要设定协议,来告知爬虫哪些内容是不允许抓取的。目前有两种主流的方法可达此目的:爬虫禁抓协议和网页禁抓标记。
 

  爬虫禁抓协议(Robot Exclusion Protocol)指的是由网站所有者生成一个指定的文件robot.txt,并放在网站服务器的根目录下,这个文件指明了网站中哪些目录下的网页是不允许爬虫抓取的。具有友好性的爬虫在抓取该网站的网页前,首先要读取robot.txt文件,对于禁止抓取的网页一般不进行下载。
 

  图2-3给出了某个网站对应的robot.txt文件内容,User-agent字段指出针对哪个爬虫,图中示例为Google的爬虫,而Disallow字段则指出不允许抓取的目录。
 

  网络爬虫
 

  爬虫禁抓协议一般以目录为单位,即整个目录下的网页或内容都不允许被抓取。如果只想让单个网页不被抓取,该如何做呢?网页禁抓标记(Robot META tag)可在此种场合派上用场。
 

  图2-4给出了网页禁抓标记的示例,即在网页的HTML代码里加入meta name=“robots”标记,content字段指出允许或者不允许爬虫的哪些行为。可以分为两种情形,一种是告知爬虫不要索引该网页内容,以noindex作为标记;另外一种情形是告知爬虫不要抓取网页所包含的链接,以nofollow作为标记。通过这种方式,可以达到对网页内容的一种隐私保护。
 

  网络爬虫
 

  遵循以上协议的爬虫可以被认为是友好的,这是从保护私密性的角度考虑的。另外一种友好性则是,希望爬虫对某网站的访问造成的网络负载较低。爬虫一般会根据网页的链接连续获取某网站的网页,如果爬虫访问网站频率过高,会给网站服务器造成很大的访问压力,有时候甚至会影响网站的正常访问,造成类似DOS攻击的效果,所以为了减少网站的网络负载,友好性的爬虫应该在抓取策略部署时考虑每个被抓取网站的负载,在尽可能不影响爬虫性能的情况下,减少对单一站点短期内的高频访问。
 

  2.3 爬虫质量的评价标准
 

  上节介绍了优秀爬虫应该具备的几个特性,这是从爬虫开发者的角度考虑的。如果从搜索引擎用户体验的角度考虑,对爬虫的工作效果有不同的评价标准,其中最主要的3个标准是:抓取网页覆盖率、抓取网页时新性及抓取网页重要性。如果这3个方面做得好,则搜索引擎用户体验必佳。
 

  图2-5展示的是一个抽象的互联网网页与搜索引擎爬虫抓取网页的对比图,对于现有的搜索引擎来说,还不存在哪个搜索引擎有能力将互联网上出现的所有网页都下载并建立索引的,所有搜索引擎只能索引互联网的一部分,而所谓的抓取网页覆盖率指的是爬虫抓取的网页数量占互联网所有网页数量的比例,图中所示互联网有5个网页,而爬虫系统抓取了其中的3个。覆盖率越高,等价于搜索引擎的召回率越高,用户体验也越好。
 

  网络爬虫
 

  对于爬虫抓到本地的网页来说,很多网页可能已经发生变化,或者被删除,或者内容被更改,因为爬虫完整抓取一轮需要较长的时间周期,所以抓取到的网页中必有一部分是过期的数据,即不能在网页变化后第一时间反映到网页库中,所以网页库中过期的数据越少,则网页的时新性越好,这对用户体验的作用不言而喻。如果时新性不好,用户搜到的是过时数据,甚至可能网页都已不复存在,使用产品时其心情如何可想而知。
 

  互联网尽管网页众多,但是每个网页重要性差异很大,比如来自雅虎新闻的网页和某个作弊网页相比,其重要性差异判若云泥。如果搜索引擎爬虫抓回的网页大都是比较重要的网页,则可说其在抓取网页重要性方面做得很好。这方面做得好,等价于搜索引擎的搜索精度高。
 

  通盘考虑以上3个因素,可以将目前爬虫研发的目标简单描述如下:在资源有限的情况下,既然搜索引擎只能抓取互联网现存网页的一部分,那么就尽可能选择比较重要的那部分页面来索引;对于已经抓取到的网页,尽可能快地更新其内容,使得索引网页和互联网对应页面内容同步更新;在此基础上,尽可能扩大抓取范围,抓取到更多以前无法发现的网页。3个“尽可能”基本说清楚了爬虫系统为增强用户体验而奋斗的目标。
 

  大型商业搜索引擎为了满足以上3个质量标准,大都开发了多套针对性很强的爬虫系统。以Google为例,如图2-6所示,其至少包含两套不同目的的爬虫系统,一套被称为Fresh Bot,主要考虑网页的时新性,对于内容更新频繁的网页,目前可以达到以秒计的更新周期;而另外一套被称之为Deep Crawl Bot,主要针对其他更新不是那么频繁的网页抓取,以天为更新周期。除此之外,Google投入了很大精力研发针对暗网的抓取系统,本章后续小节会述及此面。
 

  
 

  本章后续内容会重点介绍以下4个方面的技术:抓取策略、网页更新策略、暗网抓取和分布式爬虫。之所以如此安排,因为这几项技术是爬虫系统中至关重要的组成部分,基本决定了爬虫系统的质量和性能。
 

  其中暗网抓取技术是为了增加网页覆盖率,网页更新策略是为了增加下载网页的时效性,网页重要性评价标准则是抓取策略的核心,而分布式爬虫的分布机制也决定了爬虫系统的性能。正是基于此考虑,后续章节将陆续介绍这4个方面的关键技术。
 

相关内容推荐:

Top