网络爬虫原理
首先,我们来讲讲什么是爬虫。就目前的搜索引擎对象往往都是数以百计的网页,所以搜索引擎面临的主要问题就是如何将这些网页存储到本地。而用来获取这些网页的工具就叫爬虫。
我们来看一下一个爬虫框架。首先先人工精选一部分网页作为初始网页放到待抓取URL队列之中,之后爬虫框架开始从这个待抓取URL队列中取出URL,根据这个URL下载网页内容,这个工作一般是由一个叫网页下载器的模块去负责的。下载完网页之后,会做两步工作:
- 解析网页内容,如果网页中有URL,这个时候会把它放到待抓取URL队列,这里要注意的就是去重这个操作。
- 网页存储到网页库中
爬虫类型
爬虫主要分以下几类:
- 批量型爬虫:其是给爬虫设定一定量的抓取目标,达到目标之后爬虫就不再抓取了。
- 增量型爬虫:和批量型爬虫不同,其会保持不断地抓取网页,对抓取到的网页也会定期进行更新。
- 垂直型爬虫:这一类爬虫会关注特定主题内容和特定行业的网页。
但是我们要注意的是,不管是哪类爬虫,如果遇到爬虫禁抓协议,它就不会继续抓取了。
爬虫禁抓协议一般分为两种情形: 第一种是告诉爬虫不要索引该网页内容,以noindex 为标记:
<meta name="robots" content="noindex">
另外一种则是告诉爬虫不要抓取网页所包含的链接,以nofollow 作为标记:
<meta name="robots" content="nofollow">
爬虫抓取策略
在爬虫框架中,待抓取URL队列是很关键的部分,需要爬虫抓取的网页URL在其中是顺序排列,形成一个队列结构。每次爬虫都会从中取URL,进行内容爬取。爬虫不同的抓取策略,其是就是根据不同的方法来确定待抓取URL队列中URL优先顺序的。
-
广度优先遍历:考虑下面这个网页A,A中有三个URL,其中URL A指向网页A本身;URL B指向网页B,以此类推。宽度优先遍历会将URL B,URL C依次放入待抓取的URL队列之中(这个时候URL A因为去重策略不会入队)。 -
深度优先遍历:还是刚刚那张图,深度优先遍历会先将URL B放入待抓取队列中,之后进入网页B中的内,将URL E放入待抓取队列。一直这样直到网页中没有新的URL,便会回溯。假设网页E中没有新链接了,这个时候会回溯到网页B,将URL D放入队列中,然后进入网页D寻找。 -
非完全PageRank:这个策略根据著名的链接分析算法PageRank,对待抓取URL队列中的URL进行PageRank计算,这样会得到每个URL的PageRank得分,根据这个得分对URL进行降序排序。 -
OPIC:OPIC是在线页面重要性计算,在算法开始前,每个URL给与相同的分值,每当下载了某个页面A之后,页面A会将自己的分值评分给网页A中包含的链接,把自己的分值清空,对于待抓取URL队列,根据当前分值进行降序排序。 -
大网站优先:这种策略会根据待抓取URL队列中所属网站归类,如果哪个网站等待下载的页面最多,则这个是个大型网站,就会优先下载这个URL。
网页更新策略
网页页面往往是动态会变化的,所以,对于已经抓取过的网页,爬虫还要负责保持其内容和互联网页面内容的同步,这取决于爬虫所采取的网页更新策略。
常见的网页更新策略如下:
- 历史参考策略:这种策略基于假设:过去频繁更新的网页将来也会频繁更新。其利用泊松过程来对网页的变化进行建模,根据每个网页过去的变动情况,用模型预测将来合适内容会再次发生变化,以此来指导爬虫的抓取过程。
- 用户体验策略:这种策略以用户体验为核心,即使本地的网页内容是过时的,但是如果不影响体验,也是可以容忍的。其会保存网页的多个历史版本,并且根据过去每次内容变化对搜索引擎的质量影响,得到一个平均值,以此作为判断爬虫该抓取网页的参考依据。
- 聚类抽样策略:这种策略认为,网页时具有一些属性的,根据这些属性可以预测其更新周期,具有相似性的网页,其更新周期也是类似的。于是,我们可以根据这些属性将网页归类,统一类别内的网页具有相应的更新频率。
参考文献
[1] 这就是搜索引擎
|