Python网络爬虫技术与应用
上QQ阅读APP看书,第一时间看更新

1.1.3 网络爬虫的抓取

1.概述

网络爬虫的不同抓取策略,便是利用不同的方法确定待抓取URL队列中URL的优先顺序。网络爬虫的抓取策略有很多种,但不管方法如何,其根本目标一致。网页的重要性评判标准不同,大部分采用网页的流行性进行定义。网页结构分布图如图1-5所示。

图1-5 网页结构分布图

2.网络爬虫的抓取原理

一开始选取一部分精心挑选的种子URL,把这些URL放入待抓取URL队列,从待抓取URL队列中拿出待抓取的URL,解析DNS并且得到主机的IP地址,并把URL相应的网页下载下来,存放进已下载网页库中。此外,把这些URL放进已抓取URL队列。分析已抓取URL队列中的URL,分析当中的其他URL,并且把URL放入待抓取URL队列,继续进入下一个循环。

3.网络爬虫的抓取策略

1)宽度优先遍历(Breath First)策略

基本思路:将新下载网页包含的链接直接追加到待抓取URL队列末尾。

倘若网页是1号网页,从1号网页中抽取出3个链接指向2号、3号和4号网页,于是按照编号顺序依次放入待抓取URL队列,图中网页的编号便是在待抓取URL队列中的顺序编号,之后网络爬虫以此顺序进行下载。抓取节点树结构如图1-6所示。

2)非完全PageRank(Partial PageRank)策略

基本思路:对于已下载的网页,加上待抓取URL队列中的URL一起,形成网页集合,在此集合内进行PageRank计算,计算完成后,把待抓取URL队列里的网页依照PageRank得分由高到低排序,形成的序列便是网络爬虫接下来应该依次抓取的URL列表。

设定每下载3个网页进行新的PageRank计算,此时已经有{1,2,3}3个网页下载到本地。这三个网页包含的链接指向{4,5,6},即待抓取URL队列,如何决定下载顺序?将这6个网页形成新的集合,对这个集合计算PageRank的值,这样4、5、6就获得对应的PageRank值,由大到小排序,即可得出下载顺序。假设顺序为5、4、6,当下载5号页面后抽取出链接,指向页面8,此时赋予8临时PageRank值,如果这个值大于4和6的PageRank值,则接下来优先下载页面8,如此不断循环,即形成非完全PageRank策略的计算思路。非完全PageRank策略结构图如图1-7所示。

图1-6 抓取节点树结构

图1-7 非完全PageRank策略结构图

3)OPIC(Online Page Importance Computation,在线页面重要性计算)策略

基本思路:在算法开始之前,每个互联网页面都给予相同的“现金”,每当下载某个页面后,此页面就把本身具有的“现金”平均分配给页面中包含的链接页面,把本身的“现金”清空。与PageRank的不同在于:PageRank每次需要迭代计算,而OPIC策略不需要迭代过程。所以,OPIC的计算速度远远快于PageRank,适合实时计算使用。

4)大站优先(Larger Sites First)策略

基本思路:以网站为单位来选题网页重要性,关于待抓取URL队列中的网页,按照所属网站归类,假如哪个网站等待下载的页面最多,则优先下载这些链接,其本质思想倾向于优先下载大型网站,因为大型网站常常包括更多的页面。鉴于大型网站往往是著名企业的内容,其网页质量一般较高,所以这个思路虽然简单,但是有可靠依据。实验表明,这个算法结果也要略优先于宽度优先遍历策略。