通用网络爬虫的实现原理及实现过程与基本原理详解
优采云 发布时间: 2021-07-23 21:11通用网络爬虫的实现原理及实现过程与基本原理详解
01 网络爬虫实现原理详解
不同类型的网络爬虫有不同的实现原理,但是这些实现原理之间有很多共性。在这里,我们将以两个典型的网络爬虫(即通用网络爬虫和聚焦网络爬虫)为例,分别说明网络爬虫的实现原理。
1.通用网络爬虫
首先来看一下一般的网络爬虫的实现原理。一般网络爬虫的实现原理和过程可以简单概括如下(见图3-1).
▲图3-1 通用网络爬虫的实现原理及流程
获取初始 URL。初始URL地址可以由用户手动指定,也可以由用户指定的一个或多个初始抓取网页确定。根据初始URL爬取页面,获取新的URL。获取初始URL地址后,首先需要抓取对应URL地址中的网页。在对应的URL地址中抓取网页后,将网页存储到原创数据库中,在抓取网页的同时,发现新的URL,同时将抓取到的URL地址存储在一个URL列表中进行去重判断爬行过程。将新 URL 放入 URL 队列。第2步,获取下一个新的URL地址后,将新的URL地址放入URL队列。从URL队列中读取新的URL,根据新的URL抓取网页,同时从新的网页中获取新的URL,重复上述的抓取过程。当爬行系统设定的停止条件满足时,爬行停止。在写爬虫的时候,一般都会设置相应的停止条件。如果不设置停止条件,爬虫会一直爬到无法获取新的URL地址。如果设置了停止条件,则爬虫会在满足停止条件时停止爬行。
以上是一般网络爬虫的实现过程和基本原理。接下来为大家分析聚焦网络爬虫的基本原理和实现流程。
2.专注于网络爬虫
专注于网络爬虫。因为它们需要有目的地爬取,所以对于一般的网络爬虫来说,需要增加目标的定义和过滤机制。具体来说,这时候它的执行原理和流程就需要比一般的网络爬虫多了三个步骤,分别是目标的定义、不相关链接的过滤、以及要爬取的URL地址的选择。下一步,如图3-2所示。
▲图 3-2 重点介绍网络爬虫的基本原理及其实现过程
抓取目标的定义和描述。在聚焦网络爬虫中,首先要根据抓取需求定义聚焦网络爬虫的爬取目标,并进行相关描述。获取初始 URL。根据初始URL爬取页面,获取新的URL。从新的 URL 中过滤掉与爬取目标无关的链接。因为聚焦网络爬虫对网页的抓取是有目的的,与目标无关的网页会被过滤掉。同时,还需要将抓取到的URL地址存储在一个URL列表中,用于去重和判断抓取过程。将过滤后的链接放入 URL 队列。从URL队列中,根据搜索算法,确定该URL的优先级,确定下一步要爬取的URL地址。在一般的网络爬虫中,接下来爬取哪些URL地址并不重要,但是在聚焦网络爬虫中,由于它们的目的,接下来爬取哪些URL地址是相对重要的。对于专注的网络爬虫,不同的爬取顺序可能会导致爬虫的执行效率不同。因此,我们需要根据搜索策略确定下一步需要爬取哪些URL地址。从下一步要爬取的URL地址中读取新的URL,然后根据新的URL地址爬取网页,重复上述爬取过程。当满足系统设置的停止条件,或者无法获取新的URL地址时,爬取将停止。
现在我们已经初步掌握了网络爬虫的实现原理和相应的工作流程,接下来我们来了解一下网络爬虫的爬取策略。
02 爬取策略
在网络爬虫爬取过程中,要爬取的网址列表中可能会有很多网址。那么,爬虫应该先抓取哪个网址,再抓取哪个网址呢?
在一般的网络爬虫中,虽然爬取的顺序不是那么重要,但是在很多其他的爬虫中,比如聚焦网络爬虫,爬取的顺序是非常重要的,爬取的顺序一般是由爬取策略决定的。我们将向您介绍一些常见的抓取策略。
爬取策略主要包括深度优先爬取策略、广度优先爬取策略、大站优先策略、反链策略、其他爬取策略等,下面分别介绍。
如图3-3所示,假设站点下有一个网站和ABCDEFG分别是网页,图中箭头表示网页的层次结构。
▲图3-3 一个网站的网页层次结构*敏*感*词*
如果此时所有的网页ABCDEFG都在抓取队列中,那么根据不同的抓取策略,抓取的顺序是不同的。
比如,如果按照深度优先的爬取策略进行爬取,那么会先爬取一个网页,再深入爬取这个网页的下级链接,再返回上一级进行爬取爬行。
所以,根据深度优先的爬取策略,图3-3中的爬取顺序可以是:A→D→E→B→C→F→G。
如果按照广度优先的爬取策略进行爬取,那么会先爬取同级别的网页,等同级别的网页全部爬完后,再选择下一层的网页进行爬取,例如上面网站中,如果按照广度优先的爬取策略爬取,爬取顺序可以是:A→B→C→D→E→F→G。
除了以上两种爬取策略,我们还可以使用大站爬取策略。我们可以根据相应网页所属的站点进行分类。如果某个网站有大量的网页,那么我们称之为大网站。按照这个策略,网页数量越多,网站越大,然后,先在大网站爬取网页的URL地址。
一个网页的反向链接数是指该网页被其他网页指向的次数。这个次数代表了该网页在一定程度上被其他网页推荐的次数。所以,如果按照反链策略爬取,那么哪个网页反链多,哪个页面会先被爬取。
但是,在实际情况下,如果一个网页的优先级仅由反链策略决定,那么可能存在大量作弊。例如,做一些垃圾站群 并将这些网站 相互链接。如果是这样,每个站点都会得到更高的反链,从而达到作弊的目的。
作为爬虫项目方,我们当然不想被这种作弊打扰。因此,如果我们采用反向链接策略进行爬取,一般会考虑可靠数量的反链。
除了以上的爬取策略,实践中还有很多其他的爬取策略,比如OPIC策略、Partial PageRank策略等
03 网页更新策略
网站的网页经常更新。作为爬虫,在网页更新后,我们需要重新抓取这些网页。那么什么时候爬行比较合适呢?如果网站更新太慢,爬虫爬的太频繁,势必会增加爬虫和网站服务器的压力。如果网站更新快,但是爬虫爬取的时间间隔比较长,我们爬取的内容版本就会太旧,不利于新内容的爬取。
显然网站的更新频率越接近爬虫访问网站的频率,效果越好。当然,当爬虫服务器资源有限时,爬虫也需要根据相应的策略制作不同的网页。不同的更新优先级,更高优先级的网页更新,会得到更快的抓取响应。
具体来说,常见的网页更新策略主要有三种:用户体验策略、历史数据策略、聚类分析策略等,下面我们将分别进行说明。
当搜索引擎查询某个关键词时,会出现一个排名结果。在排名结果中,通常会有大量的网页。然而,大多数用户只关注排名靠前的网页。因此,在爬虫服务器资源有限的情况下,爬虫会优先更新排名结果最高的网页。
这种更新策略,我们称之为用户体验策略,那么在这个策略中,爬虫什么时候会抓取这些排名靠前的网页呢?此时会在抓取中保留对应网页的多个历史版本,并根据这些网页的内容更新、搜索质量影响、用户体验等信息进行相应分析,确定这些网页的抓取周期。历史版本。
此外,我们还可以利用历史数据策略来确定更新和抓取网页的周期。例如,我们可以根据某个网页的历史更新数据,通过泊松过程建模等手段来预测该网页的下次更新时间,从而确定该网页下次被抓取的时间,即确定更新循环。
以上两种策略都需要历史数据作为依据。有时候,如果一个网页是新的网页,就不会有对应的历史数据,而如果是基于历史数据进行分析,爬虫服务器需要保存对应网页的历史版本信息,这无疑给爬虫服务器带来了更多的压力和负担。
如果要解决这些问题,就需要采用新的更新策略。比较常用的是聚类分析策略。那么什么是聚类分析策略?
在生活中,相信大家对分类已经很熟悉了。比如我们去商场的时候,商场里的商品一般都是分类分类的,方便顾客选择相应的商品。此时,产品分类的类别是固定的。 , 已经起草。
但是,如果商品数量巨大,无法提前分类,或者说,不知道将拥有哪些类型的商品。这个时候,我们应该如何解决商品的分类问题?
这时候就可以用聚类的方法来解决问题了。根据产品之间的相似性,我们可以分析出具有更多共同特征的产品。这时,产品聚集的类别数量不一定。但可以保证的是,聚集在一起的商品之间必须有一定的共性,即基于“物聚集”的思想来实现。
同样,在我们的聚类算法中,也会有类似的分析过程。
在爬虫更新的网页上使用聚类分析算法,我们可以做到这一点,如图3-4所示。
▲图3-4 网页更新策略聚类算法
首先,经过大量的研究,发现网页可能有不同的内容,但一般来说,属性相似的网页更新频率相似。这是爬虫网页更新所采用的聚类分析算法的前提指导思想。有了1中的指导思想,我们可以先对大量的网页进行聚类分析。聚类后,将形成多个类别。每个类别中的网页具有相似的属性,即它们通常具有相似的更新频率。 聚类完成后,我们可以对同一聚类中的网页进行采样,然后计算采样结果的平均更新值,从而确定每个聚类的抓取频率。
以上是使用爬虫爬取网页时常见的三种更新策略。当我们掌握了算法思路之后,再跟进爬虫的实际开发时,编译出来的爬虫的执行效率会更高。并且执行逻辑会更加合理。
04 网页分析算法
在搜索引擎中,爬虫抓取相应的网页后,会将网页存储在服务器的原创数据库中。然后,搜索引擎会对这些网页进行分析,判断每个网页的重要性,进而影响用户搜索的排名结果。
所以在这里,我们需要对搜索引擎网页分析算法有一个简单的了解。
搜索引擎的网页分析算法主要分为三类:基于用户行为的网页分析算法、基于网络拓扑的网页分析算法和基于网页内容的网页分析算法。接下来,我们将分别解释这些算法。
1.基于用户行为的网页分析算法
基于用户行为的网页分析算法相对容易理解。在该算法中,根据用户对这些网页的访问行为来评估这些网页。例如,根据用户访问网页的频率、用户访问网页的时长、用户点击率等信息对网页进行整合。评价。
2.基于网络拓扑的网页分析算法
基于网络拓扑的网页分析算法是一种依靠链接关系、结构关系、已知网页或网页数据来分析网页的算法。所谓拓扑,就是简单的结构关系。
基于网络拓扑的网页分析算法也可以细分为3种:基于页面粒度的分析算法、基于页面块粒度的分析算法和基于网站粒度的分析算法。
PageRank算法是一种典型的基于网页粒度的分析算法。相信很多朋友都听说过Page-Rank算法。它是谷歌搜索引擎的核心算法。简单的说就是根据网页之间的链接关系计算网页的权重,并且可以依赖这些计算出的权重。页面排名。
当然,具体的算法细节有很多,这里就不一一解释了。除了PageRank算法,HITS算法也是一种常见的基于页面粒度的分析算法。
基于网页块粒度的分析算法也依赖网页之间的链接关系进行计算,但计算规则不同。
我们知道一个网页通常收录多个超链接,但一般不是它指向的外部链接中的所有链接都与网站topic相关,或者说这些外部链接对网页的重要程度不同,所以如果要根据页面块的粒度进行分析,则需要对网页中这些外链的级别进行划分,不同级别的外链对网页的重要性程度不同。
该算法的分析效率和准确率均优于传统算法。
基于网站粒度的分析算法也与PageRank算法类似,但如果是基于网站粒度的分析,则会相应地使用SiteRank算法。也就是这个时候我们会划分站点的级别和级别,不再具体计算站点下每个网页的级别。
所以与基于页面粒度的算法相比,它更简单、更高效,但会带来一些缺点,例如准确性不如基于页面粒度的分析算法准确。
3.基于网页内容的网页分析算法
在基于网页内容的网页分析算法中,根据网页数据和文本等网页内容特征对网页进行评估。
以上,我简单介绍了搜索引擎中的网页分析算法。我们学习爬虫,需要相应地理解这些算法。
05 标识
在爬虫爬取网页的过程中,爬虫必须访问对应的网页,一般的爬虫一般都会告诉对应网页的网站站长自己的爬虫身份。 网站的管理员可以通过爬虫通知的身份信息来识别爬虫的身份。我们称这个过程为爬虫的身份识别过程。
那么,爬虫应该如何将自己的身份告知网站站长?
一般来说,爬虫在对网页进行爬取访问时,会通过HTTP请求中的User Agent字段告知自己的身份信息。一般爬虫在访问网站时,首先会根据站点下的Robots.txt文件判断可爬取的网页范围。 Robots协议是网络爬虫需要遵守的协议。对于一些被禁止的 URL 地址,网络爬虫则不应爬取访问。
同时,如果爬虫在爬取某个站点时陷入死循环,导致站点的服务压力过大,如果有正确的身份设置,那么站点的站长就可以想办法联系爬虫。然后停止相应的爬虫。
当然,有些爬虫会冒充其他爬虫或浏览器爬取网站以获得一些额外的数据,或者有些爬虫会不顾Robots协议的限制,随意爬取。从技术角度来看,这些行为并不难实现,但这些行为并不提倡,因为只有共同遵循良好的网络规则,才能实现爬虫和站点服务器的双赢。
06 网络爬虫实现技术
通过前面的学习,我们基本对爬虫的基础理论知识有了比较全面的了解。那么,如果我们要实现网络爬虫技术,开发自己的网络爬虫,可以使用哪些语言进行开发?
开发网络爬虫的语言有很多种。常用语言有:Python、Java、PHP、Node.JS、C++、Go语言等,下面分别介绍一下这些语言编写爬虫的特点:
07 总结
专注于网络爬虫。因为它们需要有目的地爬取,所以对于一般的网络爬虫来说,需要增加目标的定义和过滤机制。具体来说,这时候它的执行原理和流程需要比一般的网络爬虫多三个步骤,分别是目标的定义、无关链接的过滤、接下来要爬取的URL地址的选择步。常见的网页更新策略有三种:用户体验策略、历史数据策略和聚类分析策略。聚类分析可以处理商品之间的相似性,并将具有更多相似性的商品归为一类。在爬虫对网页进行爬取的过程中,爬虫必须访问相应的网页。这时候一般的爬虫一般都会告诉对应网页的网站站长自己的爬虫身份。 网站的管理员可以通过爬虫通知的身份信息来识别爬虫的身份。我们称这个过程为爬虫的身份识别过程。开发网络爬虫的语言有很多种。常用语言包括 Python、Java、PHP、Node.JS、C++ 和 Go。
作者简介:魏伟,资深网络爬虫技术专家,大数据专家和软件开发工程师,从事大型软件开发和技术服务多年,精通Python技术,在Python网络爬虫,Python机器学习、Python数据分析与挖掘、Python Web开发等诸多领域具有丰富的实践经验。
本文摘自《掌握Python网络爬虫:核心技术、框架与项目实战》,经发布者授权发布。