1.1爬虫的定义
网络爬虫是一种按照一定的规则自动的抓取网络信息的程序或者脚本。简单的来说,网络爬虫就是根据一定的算法实现编程开发,主要通过URL实现数据的抓取和发掘。
随着大数据时代的发展,数据规模越来越庞大、数据类型繁多,但是数据价值普遍比较低,为了从庞大的数据体系中获取有价值的数据,从而延伸了网络爬虫、数据分析等多个职位。近几年,网络爬虫的需求更是井喷式的爆发,在招聘的供求市场上往往是供不应求,造成这个现状的主要原因是求职者的专业水平低于需求企业的要求。
传统爬虫有百度、Google、必应等搜索引擎,这类通用的搜索引擎都有着自己的核心算法。但是,通用的搜索引擎存在这一定的局限性:
- 不同的搜索引擎对于同一个搜索会有不同的结果,搜索出来的结果未必是用户需要的信息。
- 通用的搜索引擎扩大了网络覆盖率,但有限的搜索引擎服务器资源与无限的网络数据资源之间的矛盾将进一步加深。
- 随着网络上数据形式繁多和网络技术的不断发展,图片、数据库、音频、视频多媒体等不同数据大量出现,通用搜索引擎往往对这些信息含量密集且具有一定结构的数据无能为力,不能很好地发现和获取。
因此,为了得到准确的数据,定向抓取相关网页资源的聚焦爬虫应运而生。聚焦爬虫是一个自动下载网页的程序,可以根据设定的抓取目标有目的性的访问互联网上的网页与相关的URL,从而获取所需要的信息。与通用爬虫不同,聚焦爬虫并不追求全面的覆盖率,而是抓取与某一特定内容的相关的网页,为面向特定的用户提供准备数据资源。
1.2爬虫的类型
网络爬虫根据系统结构和开发技术大致可分为4种类型:通用网络爬虫、聚焦网络爬虫、增量式网络爬虫、深层网络爬虫。
通用网络爬虫又称全网爬虫,常见的有百度、Google、必应等搜索引擎,爬行对象从一些处使URL扩充到整个网站,主要为门户站点搜索引擎和大型网站服务采集数据,具有以下特点:
- 由于商业原因,搜索引擎的算法是不会对外公布的。
- 这类网络爬虫的爬取范围范围和数量巨大,对于爬取速度和储存空间的要求较高,爬取页面的顺序要求相对较低。
- 待刷新的页面太多,通常采用并行工作方式,但需要较长时间才能刷新一次页面。
- 存在一定的缺陷,通用网络爬虫适用于为搜索引擎搜索广泛的需求。
聚焦网络爬虫又称主题网络爬虫,是选择性地爬取根据需求的主题相关页面的网络爬虫。
与通用网络爬虫相比,聚焦网络爬虫只需要爬取与主题相关的页面,不需要广泛的覆盖无关的网页,很好的满足一些特定人群对特定领域信息的需求。
增量式网络爬虫是指对已下载网页采取增量式更新和只爬取新产生或者已经发生变化的网页的爬虫,它能够在一定程度上保证所爬取的页面尽可能是新的页面。只会在需要的时候爬取新产生的或发生更新的页面,并不重新下载没有变化的页面,可有效减少数据下载量,即使更新已爬取的网页,减少时间和空间上的耗费,但是增加了爬取算法的复杂度和实现难度,基本上这类爬虫在实际开发中不太普及。
深层网络爬虫是大部分内容不能通过静态URL获取的、隐藏在搜索表单的、只有用户提交一些关键词才能获得的网络的页面。例如某些网站需要用户登录或者通过提交表单实现提交数据。
实际上,聚焦网络爬虫、增量式网络爬虫和深层网络爬虫可以通俗的归纳为一类因为这类爬虫都是定向爬取数据。相比于通用爬虫,这类爬虫比较有目的性,也就是网络上说的网络爬虫,而通用爬虫在网络上通常被称为搜索引擎。
1.3爬虫的原理
什么是URL URL是Uniform Resource Locator的缩写,即统一资源定位系统,也就是我们通常所说的网址。URL是在Internet的WWW服务程序上用于指定信息的表示方法,它指定了如HTTP或者FTP等Internet协议,是唯一能够识别Internet上具体的计算机、目录或文件位置的命名约定。
统一资源定位系统(URL)指的是Internet文件在网上的地址,就好比一个城市里的街道门派号码一样
URL使用数字和字母按一定顺序排列可以确定一个地址。
URL的第一个部分 http:// 表示的是要访问的文件的类型。在网上这几乎总是使用http(意思是超文本转换协议,hypertext transfer protocol.因为它是用来转换网页的协议),有时也用ftp(file transferprotocol),意为文件传输协议,主要用来传输软件和大文件。
第二部分就是www.xxxx.org。这是主机的名字,表示要访问的文件存放在名为www的服务器里,该服务器记在xxxx.com的域名之下。多数公司有一个指定的服务器作为对外的网上站点,叫做www。所以,在上网时,如果拿不准URL的名字,就在www后面加上公司的域名是个好的办法。
URL的格式组成由三部分组成:
第一部分:协议(或称为服务方式)
第二部分:是存在该资源的主机IP地址(有时也包括端口号)
第三部分:是主机资源的具体地址,如目录和文件名。
第一二部分之间要用 : // 隔开,第二三部分用 : / 符号隔开。第一二部分是不可缺少的,第三部分有时可以省略。
通用网络爬虫
实现原理及过程如图所示:
通用网络爬虫的实现原理:
- 获取初始的URL。初始的URL地址可以人为地指定,也可以由用户指定的某个或某几个初始爬取网页决定
- 根据初始的URL爬取页面并获得新的URL。获得初始的URL地址之后,先爬取当前URL地址中的网页信息,然后解析网页信息内容,将网页储存到原始数据库中,并且在当前获得的网页信息里发现新的URL地址,存放于一个URL队伍里面。
- 从URL队伍中读取新的URL,从而获得新的网页信息,同时在新的网页中获取新的URL,并重复上述爬取过程
- 满足爬虫系统设置的停止条件时,停止爬取。在编写爬虫的时候,一般会设置相应的停止条件,爬虫则会在停止条件满足时停止爬取。如果没有设置停止条件,爬虫就会一直的爬取下去,一直到无法获取新的URL为止。
·
聚焦网络爬虫
聚焦网络爬虫的执行原理和过程与通用爬虫大致相关,在通用爬虫的基础上增加两个步骤:定义爬取目标和筛选过滤URL,原理如图所示:
聚焦网络爬虫的实现原理:
- 制定爬取方案。在聚焦网络爬虫中,首先要依据需求定于聚焦网络爬虫的目标以及爬取方案。
- 设定初始的URL
- 根据初始的URL抓取页面,并获得新的URL
- 从新的URL中过滤掉与需求无关的URL,将过滤到的URL放到URL队伍中。
- 从新的URL队伍中,根据搜索算法确定URL的优先级,并确定下一步要爬取的URL地址。因为聚焦网络爬虫具有目的性,所以URL的爬取顺序不同会导致爬虫的执行效率不同。
- 得到新的URL,将新的URL重现上述爬取过程。
- 满足系统中设置的停止条件或无法获取新的URL地址时,停止爬取。
1.4爬虫的搜索策略
在互联网数据时代,有三大搜索策略要有所了解。
1·深度优点搜索
深度优先搜索时在开发爬虫早期使用较多的方法,目的是达到被搜索结构的叶结点(那些不包含任何超级URL的HTML文件)。在一个HTML文件中,当一个URL被选择后,被选URL将执行深度优先搜索,搜索后得到新的HTML文件,再从新的HTML获取新的URL进行搜索。以此类推,不断地爬取HML文件中的URL,直到HTML中没有URL为止。
深度优先搜索沿着HTML文件中的URL走到不能再深入为止,然后返回到某一个HTML文件,再继续选择该HTML文件中的其他URL。当不再有其他URL可选择时,说明搜索已经结束。其优点是能遍历一个Web站点或深层嵌套的文档集合。缺点是因为Web结构相当深,有可能造成,一旦进去就再也出不来的情况的发生。
举个例子,比如一个网站的首页里面带有很多URL,深度优先通过首页的URL进入新的页面,然后通过这个页面里的URL再进入新的URL,不断地循环下去,直到返回的页面没有URL为止。如果首页有两个URL,选择第一个URL后,生成新的页面就不会返回首页,而是在新的页面选择一个新的URL,就这样不停地访问下去。
2·宽度优先搜索
宽度优先搜索是搜索完一个Web页面中所有的URL,然后继续搜索下一层,直到底层为止。例如:首页有3个URL,爬虫会选择其中的一个,处理相应的页面后,然后返回首页在爬取第二个URL,处理相应的页面,最后返回首页爬取第三个URL,处理第三个URL对应的页面。
一旦上层上的所有URL都被选择过,就可以开始在刚才处理过的页面中搜索其余的URL,这就叫保证了对浅层的优先处理,当遇到一个无穷尽的深层分支时,不会导致陷入深层文档中出不来的情况发生
。宽度优先搜索策略还有一个优点,能够在两个页面之间找到最短路径。
宽度优先搜索策略通常是实现爬虫的最佳策略,因为他容易实现,而且具备大多数期望的功能。但是如果要遍历一个指定的站点或者深层嵌套的HTML文件集,用宽度优先策略就需要花费较长时间才能到达最底层。
3·聚焦爬虫的爬行策略
聚焦爬虫的爬行策略只针对某个特定主题的页面,根据“最好优先原则”进行访问,快速、有效的访问更多与主题相关的页面,主要通过内容与Web的URL结构指导进行页面的抓取。聚焦爬虫会给所下载的页面一个评价分,根据得分排序插入到一个队伍中。最好下一个搜索对弹出队伍的第一个页面进行分析后执行,这种策略保证爬虫能优先跟踪那些最有可能URL到目标页面的页面。
决定网络爬虫搜索策略的关键是评价URL价值,即URL价值的计算方法,不同的价值评价方法计算出URL的价值不同,表现出的URL的“重要程度”也不相同,从而决定不同的搜索策略。由于URL包含于页面之中,而通常具有较高价值的页面包含的URL也具有较高的价值,因此对URL价值的评价有时也转换为对页面价值的评价。
1.5爬虫的合法性与开发流程
网络爬虫在大多数情况下都不会违法,在生活中几乎都有爬虫应用,比如在百度中搜素的内容几乎都是通过爬虫采集下来的,因此网络爬虫也是一门技术,技术本身不违法,且在大多数情况下可以放心使用爬虫技术。当然也有特殊情况,正如水果刀本身在法律上并不被禁止使用,但是用来伤害他人,这就触犯了法律。一般情况下,爬虫所带来的违法风险主要体现在以下几个方面:
- 利用爬虫技术与黑客技术结合,攻击网络后台,从而窃取后台数据。因为爬虫是爬取网站上的网页信息,这些信息能给用户浏览,也就是说这些信息允许我们使用和爬取。但是网站的后台数据是不被公开的数据,这些数据涉及了用户的隐私和财产安全,如果通过爬虫技术与黑客技术窃取后台数据,这就明显触发法律的底线。
- 利用爬虫恶意攻击网站,造成网站系统的瘫痪。爬虫是通过程序去访问并操控网站,因此访问速度非常快,再加上程序的高并发处理,可以在短时间内模拟成千上万的用户在访问网站。当网站的访问量过高,就会加重网络的负载,从而造成系统的瘫痪,如果长期这样恶意攻击网站,也很可能违反相关的法律条例。
综上所述,爬虫技术本身是无罪的,问题往往出在人的无限欲望上。因此爬虫开发者和企业运营者的道德良知才是避免触碰法律底线的根本所在。
既然爬虫技术是合法的,那么我们就有必要要了解一下爬虫的开发流程。只有掌握开发流程,才能编写高品质的爬虫程序,这好比盖房子一样,建筑施工人员需要根据房屋设计图才能搭建房子,而房屋设计图等同于爬虫的开发流程。一帮情况下,爬虫的开发流程如下:
- 需求说明。任何程序的开发都离不开需求说明,爬虫开发也是如此。需求说明包含功能说明、功能的业务逻辑等详细说明。爬虫的需求说明要明确告知开发人员需要爬取哪些数据、数据的存储方式以及爬虫的爬取效率。
- 爬虫的开发计划。根据爬虫的需求说明定制相关的开发计划,比如选爬虫的开发工具、功能模块化设计、设计爬虫运行模式等一系列开发明细。
- 爬虫的部署与交付。程序开发完成后(包含测试通过)就可以进行部署上线或交付客户。部署和交付的方式有很多,比如打包exe程序、GUI界面(爬虫程序)或定时执行等。
上述的爬虫开发流程是相对而言的,每一个开发步骤并非一成不变的,具体的开发流程还是需要结合实际情况而定。
1.6总结
网络爬虫二点类型理论上分为4类,但是实际上主要有两大类:通用网络爬虫和聚焦爬虫。通用爬虫主要有Google、百度、必应等搜索引擎,主要以核心算法为主导,学习成本相对较高。聚焦爬虫就是定向爬取数据,是有目的性的爬虫,学习成本相对较低。
我们常说的网络爬虫大多数以聚焦爬虫为主,其原理和过程与通用爬虫大致相同,读者在编写爬虫程序的时候,需要已设定的爬虫规则和目标为主导,这样更具有较强的目的性。