初始网络爬虫(一)

初识网络爬虫(一)

网络爬虫是什么?

​ 网络爬虫(又称之为蜘蛛、蚂蚁、网络机器人等)是一种按照一定的规则自动抓取网络信息的程序或者脚本。简单的来说爬虫就是抓取目标网站内容的工具,这种工具一般是根据定义的行为自动进行抓取。一般来说,大型的爬虫程序被广泛的应用于搜索引擎、数据挖掘等领域,个人用户和企业也可以通过爬虫收集对自身有价值的数据。举一个最简单的例子:小明在学校附近准备开一家主打外卖服务的餐馆,但是由于小明不了解周边其他餐馆对于菜品的定价,因此他可以沟通过网络爬虫爬取各大外卖平台上周边餐馆的菜品定价数据,从而帮助小明完成菜品的定价。

爬虫的需求与应用

​ 随着大数据时代的发展,数据的规模越来越大,数据类型也越来越繁多,但是数据的价值普遍较低。为了从庞大的数据体系里获取有价值的数据,从而延伸出了网络爬虫、数据分析等多个职位。近几年,网络爬虫的需求更是紧喷式地爆发,在招聘得市场往往是供不应求。

​ ————《实战Python网络爬虫》

​ 从最初的搜索引擎到目前的自然语言处理,从淘宝商品的推荐到客户群体的分类,从用户消费习惯的预测到金融行业中的量化投资,其背后都是对大量数据的分析与应用。而如此大量的数据是从何而来?这里不得不提到一个词——网络爬虫。网络爬虫可以帮助我们从不同的网站获取海量我们需要的数据。可以这么说,网络爬虫是现代人工智能、大数据工程中的重要一环。如果没有爬虫可能就没有所谓的大数据一说了。当然上面所说的只是网络爬虫的一些较为常用的应用场景,我们也可以在通过学习后基于网络爬虫的原理做一些有意思的东西,比如说简单的自制小说软件、微博信息的定时发送与采集软件、抢票软件等。

爬虫的类型

​ 网络爬虫根据系统结构和开发技术大致可以分为以下四类:通用网络爬虫、聚焦网络爬虫、增量式网络爬虫以及深层网络爬虫。

  • 通用网络爬虫

​ 通用网络爬虫又被称之为全网爬虫,常见的有百度、谷歌、必应等搜索引擎,其爬行的对象从一些初始的URL开始扩充到整个网站,主要为门户站点搜索引擎和大型网站服务采集数据,具有以下特点:

  1. 由于商业原因,其核心的算法并不会向外界公开。
  2. 这类网络爬虫的爬取范围和数量及其的庞大,因此对于其爬行速度和存储空间的要求较高,对爬取页面的顺序要求则较低。
  3. 由于其需要同时爬取大量的网页,因此存在很多待刷新的页面,通常采用并行的工作方式,但是需要较长时间刷新一次界面。
  4. 存在一定的缺陷,通用网络爬虫适用于类似搜索引擎的具有广泛需求的应用。
  • 聚焦网络爬虫

​ 聚焦网络爬虫又被称之为主题网络爬虫,是选择性地爬取根据需求的主题相关页面的网络爬虫。与通用网络爬虫相比,聚焦网络爬虫只需要爬取与主题相关的页面,并不用将所有的网页覆盖,这种爬虫可以满足一些特定公司、人群的特定领域的需求。

  • 增量式网络爬虫

​ 增量式网络爬虫,顾名思义就是指对已经下载采集的网页数据采取增量式更新和爬取新产生的或是发生变化的网页的爬虫。这种爬虫仅下载发生变化的或是有新产生数据的网页,而不下载原有的未发生变化的网页数据,从一定程度上减小了数据的下载量,从而保证数据的及时更新。不管是在空间的花费还是时间的花费上,这一类型的爬虫都远远小于上面提到的另外两种类型的爬虫。但是由于其爬取算法复杂、实现难度大,因此在实际开发中这类爬虫很少普及。如果大家对这类爬虫有兴趣,在今后的文章中我们会对增量爬虫的更新策略做一个简单的介绍。

  • 深层网络爬虫

​ 深层网络爬虫中的数据大部分的内同是不能通过静态的URL进行获取的,这类数据往往都隐藏在搜索表单后,一般来说只有当用户提交一些关键词才能获取相关的内容。举一个简单的例子,很多网站必须要求用户登录之后才能看到其真正的内容。这类爬虫也是我们在未来学习中的一个重点。

爬虫的原理

​ 以下是通用式网络爬虫的实现原理及过程图:

在这里插入图片描述

​ 通用网络爬虫的实现原理:

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

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

  3. 将新的URL放到URL队列中。在第2步中,获取了下一个新的URL地址之后,会将新的URL地址放到URL队列中。

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

  5. 满足爬虫系统设置的停止条件时,停止爬取。在编写爬虫的时候,一般会设置相应的停止条件。如果没有设置停止条件,爬虫则会一直爬取下去,一直到无法获取新的URL地址为止,若设置了停止条件,爬虫则会在停止条件满足时停止爬取。

    ​ 聚焦网络爬虫的执行原理于过程于通用爬虫的执行原理和过程大致相同,在托用爬虫的基础上增加两个步骤:定义爬取目标和筛选过滤URL,原理图如下所示:

    在这里插入图片描述

  6. 制定爬虫的方案。在聚焦网络爬虫中,首先要依据需求定义聚焦网络爬虫爬取的目标以及整体的爬取方案。

  7. 设定初始的URL。

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

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

  10. 将过滤后的链接放到URL队列中。

  11. 从URL队列中,根据搜索算法,确定URL的优先级,并确定下一步要爬取的URL地址。在通用网络爬虫中,下一步爬取哪些URL地址,是不太重要的,但是在聚焦网络爬虫中,由于其具有目的性,故而下一步爬取哪些URL地址相对来说是比较重要的。对于聚焦网络爬虫来说,不同的爬取顺序,可能导致爬虫的执行效率不同,所以,我们需要依据搜索策略来确定下一步需要爬取哪些URL地址。

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

  13. 满足系统中设置的停止条件时,或无法获取新的URL地址时,停止爬行。

爬虫的搜索策略

​ 在爬虫开发中我们经常要使用到三大搜索策略,下面我们对相关的策略进行简单的介绍。

深度优先搜索

​ 深度优先搜索是爬虫开发早期使用的较多的一种搜索策略,其目的是为了达到被搜索结构的叶节点(不包含任何URL的HTML文件)。当我们选择一个HTML文件进行搜索时,选择该HTML文件中URL进行深度优先搜索,搜索后得到新的HTML文件,以此类推知道打开的HTML文件中没有URL为止。

​ 深度优先搜索的搜索策略就是在一个网页中选择一个URL不断的进行深入,直到不能深入为止再返回上一级页面中选择另一个URL进行深入,这种搜索策略能够保证最大程度的对一个网页和网页的子孙进行便利。但是这种搜索策略的缺点也非常的明显,就是存在一旦深入无法就无法出来的情况。

宽度优先搜索

​ 宽度优先搜索是先搜索整个页面中的URL再继续搜索下一层直到搜索到底层为止。这种策略能够保证对浅层的URL进行优先搜索,防止出现陷入深层文档中无法出来的情况。同时宽度优先搜索具有一个非常好的优先,能够找到两个页面之间的最小路径。

​ 宽度优先搜索策略通常是实现爬虫的最佳策略,因为他非常的容易实现,而且具备大多数期望的功能。但是如果要遍历一个指定的站点或是深层嵌套的HTML文件集,用宽度优先搜索策略会花费较长时间才能到达最底层。

聚焦爬虫的爬行策略

​ 聚焦爬虫的爬行策略只针对于某个特定的主题,根据“最好优先原则”进行访问,快速、有效地获取更多与主题相关的页面,主要通过内容与Web的URL结构指导进行页面的抓取。聚焦爬虫会给所下载的页面进行一个评分,根据得分排序插入一个列队中,最好下一个搜索对弹出列队的第一个页面进行分析后执行,这种策略保证爬虫能够优先追踪那些最有可能URL到目标页面的页面。

爬虫开发的原则和开发流程

​ 进行爬虫开发时,我们必须要遵循一个原则——合法性。

​ 网络爬虫在大多数情况下都是合法的,在我们的生活中可以说是充满着爬虫以及相关的应用。但是有很多爬虫开发者在深入学习后,利用自己所学的黑客知识结合爬虫知识,攻击网站后台,对网站后台的数据进行窃取,这种行为将会对网站的开发者和企业造成难以估算的损失。因此我们在进行爬虫开发的时候,只能够爬取网站上的网页信息,这些信息被允许给用户浏览,也就是说这些信息是允许我们使用和爬取的。而后台数据由于涉及用户的隐私,不能进行爬取,如果使用相关的技术进行爬取,将会触犯法律的底线,最终很有可能会被绳之以法。

​ 也有很多人使用爬虫恶意攻击网站,从而造成网站系统的瘫痪。爬虫使用过程序去访问网站,因此访问速度非常的快再加上程序的高并发处理,可以在短时间内模拟成千上万的用户在访问网站,当网站的访问量过高时,将会家中网站的负载,从而造成网站系统的瘫痪。如果长期这样恶意攻击网站,也将会违反相关的法律条例。

​ 那么接下来说说爬虫开发的基本流程:

  1. 需求说明。任何程序的开发都必须要进行需求的分析与说明,爬虫开发也是如此。需求说明包含功能说明、功能的业务逻辑等详细说明。爬虫的开发需求要明确的告知开发人员需要爬取哪些数据、数据的存储方式以及爬虫的爬取效率等。
  2. 爬虫开发计划。根据需求说明定制相关的开发计划,比如使用什么开发工具进行开发、功能模块化设计、设计爬虫运行模式等一系列的开发明细。
  3. 爬虫的功能开发。根据开发计划编写相应的功能代码。以功能模块化设计为依据,每个功能模块以函数或类的形式表示,再将各个模块进行组合,从而实现爬虫功能的开发。
  4. 爬虫的部署与交付。程序开发完成后就可以进行部署上线或交付客户,部署和交付的方式很多,比如打包成exe文件、GUI界面或定时执行等。

资料整理:Eric Chen(Ningbo University)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值