Python爬虫(2.网络爬虫的实现原理及技术)

网络爬虫的实现原理及技术

1.   网络爬虫实现原理

以两种爬虫为例,讲解网络爬虫的实现原理。

1)       通用网络爬虫

图1 通用网络爬虫实现原理及过程

见图1,通用网络爬虫的实现原理及过程可以简要概括为:

         i.           获取初始URL。初始的URL地址可以由用户人为指定,也可以由用户指定的某个或某几个初始爬去网页决定。

        ii.           根据初始的URL爬取页面,并获得新的URL。获得初始的URL地址之后,首先需要爬取对应URL地址中的网页,爬取了对应的URL地址中的网页后,将网页存储到原始数据库中,并且在爬取网页的同时,发现新的URL地址,同时将已爬取的URL地址存放到一个URL列表中,用于去重合以及判断爬取的进程。

      iii.           将新的URL放到URL队列中。

      iv.           从URL队列中读取信的URL,并依据信的URL爬取网页,同时从新网页中获取新URL,并重复上述的过程。

        v.           满足爬虫设置的停止条件时,停止爬取。

2)       聚焦网络爬虫

聚焦网络爬虫,由于其需要有目的地进行爬取,所以对于通用网络爬虫来说,必须增加目标的定义过滤机制。因此其执行原理比通用网络爬虫多出三步:目标的定义,无关链接的过滤,下一步要爬取的URL地址的选取等。其实现原理及过程可以简要概括为:

         i.           对爬取目标的定义和描述。

        ii.           获取初始URL。

      iii.           根据初始的URL爬取页面,获得新的URL。

      iv.           从新的URL中过滤掉与爬取目标无关的链接。因为聚焦网络对网页爬取是有目的性的,所以与目标无关的网页将会被过滤掉。同时,也需要将已爬取的URL地址存放到一个URL队列中,用于去重合及判断爬取的进程。

        v.           将过滤后的URL放到URL队列中,

      vi.           从URL队列中,根据搜索算法,确定URL的优先级,并确定下一步要爬取的URL地址。由于聚焦网络爬虫具有目的性,故而下一步爬取哪些URL地址相对来说是比较重要的。

     vii.           从下一步要爬取的URL地址中,读取新的URL,然后依据新的URL地址爬取网页,并重复上述过程。

   viii.           满足停止条件,或无法获取新的URL地址时,停止爬行。

2.   爬行策略

我们已经介绍了,聚焦网络爬虫,需要确定URL的优先级,即爬虫应该先爬取哪一个,后爬取哪一个?

爬行策略主要有:深度优先爬行策略、广度优先爬行策略、大站优先爬行策略、反链策略、其他爬行策略等。

图2 某网站的网页层次结构示意图

如图2所示,假设有一个网站,ABCDEFG分别为站点下的网页,途中箭头表示网页的层次结构。

假如此时网页ABCDEFG都在爬行队列中,那么按照不同的爬行策略,其爬取的顺序是不同的。

比如按照深度优先的顺序,爬取顺序可能是A->D->E->B->C->F->G;按照广度优先的爬行策略,爬行顺序可能是A->B->C->D->E->F->G。

我们也可以采用大站爬行策略。我们可以按对应网页所属的站点进行归类,如果某个网站的网页数量多,那么则称其为大站,按照这种策略,网页数量越多的网站优先级越高。

一个网站的反链接数,指的是被其他网页指向的次数,这个次数在一定程度上代表着该网页被其他网页的推荐次数。所以,如果按反链策略去爬行的话,所以如果按反链策略去爬行的话,那么哪个网页的优先级越高。

其他爬行策略还有很多,比如:OPIC策略,PartialPageRank策略等。

3.   网页更新策略

一个网站的网页经常会更新,作为爬虫方,在网页更新后,我们则需要对这些网页进行重新爬取,那么什么时候去爬取合适呢?如果网站更新过慢,而爬虫爬取的过于频繁,则会带来服务器资源的浪费。若网站更新过快,但爬虫提取的时间间隔较长,则我们爬去的内容版本会过老,不利于新内容的爬取。显然,网站的更新频率与爬虫访问网站的频率越接近,则效果越好,当然,爬虫服务器资源有限的时候,此时爬虫也需要根据对应的策略,让不同网页具有不同的更新优先级,优先极高的网页更新,将获得较快的爬取响应。

常见的网页更新策略主要有3种:用户体验策略,

4.   网页分析算法

5.   身份识别

6.   网络爬虫实现技术

7.   实例-metaseeker

猜你喜欢

转载自blog.csdn.net/lhs322/article/details/80019467