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