WEB程序员 2019-09-26
在如今信息化、数字化的时代,人们已经离不开网络搜索了,但细想一下,你在搜索过程中能够真正获得相关信息,是因为有人在帮你把与之相关的内容筛选和呈递到你面前了。
就像在饭店里,你点了土豆并且能吃到,是因为有人帮你在土豆、萝卜、西红柿等中找到土豆,也有人把土豆拿到你桌上。在网络上,这两个动作都是由一位叫做爬虫的同学帮你实现的。
也就是说,没有爬虫,就没有今天的检索,你就不能精确地查找信息、有效地获取数据。今天DataHunter数猎哥就来说说爬虫在数据分析领域的应用,以及它是如何帮助我们提升数据分析质量的。
网络爬虫也叫网络机器人,可以代替人们自动化浏览网络中的信息,进行数据的采集与整理。
它是一种程序,基本原理是向网站/网络发起请求,获取资源后分析并提取有用数据。从技术层面来说,就是通过程序模拟浏览器请求站点的行为,把站点返回的HTML代码/JSON数据/二进制数据(图片、视频) 爬到本地,进而提取自己需要的数据,并存放起来使用。
每一个程序都有自己的规则,网络爬虫也不例外。它穿梭于全球各个网站中间,会根据人们施加的规则去采集信息,我们称这些规则为网络爬虫算法。规则是人定的,是人根据自己的目的与需求设计的,因此,根据使用者的目的,爬虫可以有不同的功能。但所有爬虫的本质,都是方便人们在海量的互联网信息中找到并下载到自己要的那一类,提升信息获取效率。
1.搜索引擎:爬站点,为网络用户提供便利
在网络发展伊始,全球范围内能提供信息的网站数量不多,用户也不多。互联网只是文件传输协议(FTP)站点的集合,用户可以在这些站点中导航以找到特定的共享文件,而为了查找和组合互联网上可用的分布式数据,人们创建了一个自动化程序,称为网络爬虫/机器人,可以抓取网上的所有网页,然后将所有页面上的内容复制到数据库中制作索引。这也是最早期的搜索引擎。
如今随着互联网的高速发展,我们能够在任何一个搜索引擎中看到来自全球各个网站的信息。百度搜索引擎的爬虫叫做百度蜘蛛(Baiduspider),360的爬虫叫360Spider,搜狗的爬虫叫Sogouspider,必应的爬虫叫Bingbot。搜索引擎离不开爬虫。
比如百度蜘蛛每天会在海量的互联网信息中进行爬取,爬取优质信息并收录。当用户在百度搜索引擎上检索对应关键词时,百度将对关键词进行分析处理,从收录的网页中找出相关网页,按照一定的排名规则进行排序并将结果展现给用户,工作原理如图所示。现在,我们可以大胆地说,你每天都在免费享受爬虫的福利。
2.企业:监控舆情,高效获取有价值信息
我们说过,爬虫的本质是提升效率,爬虫的规则是人定的;那么企业就完全可以根据自己的业务需求去设计一个爬虫,第一时间得到网络上与其相关信息,并且进行清洗和整合。
大数据时代要进行数据分析,首先要有数据源,而网络爬虫可以让我们获取更多数据源的同时,按照我们的目的进行采集,从而去掉很多无关数据。
比如在进行大数据分析或数据挖掘时,数据源可以从某些提供数据统计的网站获取,也可以从某些文献或内部资料中获得。但是这些获得数据的方式,有时很难满足我们对数据的需求。此时,就可以利用爬虫技术,自动地从互联网中获取更多我们感兴趣的的数据内容,从而进行更深层次的数据分析,并获得更多有价值的信息。
除此以外,网络爬虫还可以应用于金融分析中对金融数据进行采集,用以进行投资分析;应用于舆情监测与分析、目标客户精准营销等各个领域。
网络爬虫按照实现的技术和结构可以分为通用网络爬虫、聚焦网络爬虫、增量式网络爬虫、深层网络爬虫等类型。但实际的网络爬虫由于复杂的网络环境,通常是这几类爬虫的组合体。
1.通用网络爬虫
通用网络爬虫又叫作全网爬虫,顾名思义,爬取的目标资源在全互联网中,所爬取的目标数据是巨大的,并且爬行的范围也是非常大的。正是由于其爬取的数据是海量数据,所以对于这类爬虫来说,其爬取的性能要求是非常高的。这种网络爬虫主要应用于大型搜索引擎中,有非常高的应用价值。
通用网络爬虫主要由初始URL集合、URL队列、页面爬行模块、页面分析模块、页面数据库、链接过滤模块等构成。通用网络爬虫在爬行的时候会采取一定的爬行策略,主要有深度优先爬行策略和广度优先爬行策略,具体详情在后文中会有介绍。
2.聚焦网络爬虫
聚焦网络爬虫也叫主题网络爬虫,是按照预先定义好的主题有选择地进行网页爬取的一种爬虫。聚焦网络爬虫主要应用在对特定信息的爬取中,主要为某一类特定的人群提供服务。
聚焦网络爬虫同样由初始URL集合、URL队列、页面爬行模块、页面分析模块、页面数据库、链接过滤模块、内容评价模块、链接评价模块等构成。其中的内容评价模块和链接评价模块可以根据链接和内容的重要性,确定哪些页面优先访问。聚焦网络爬虫的爬行策略主要有4种,如图所示:
聚焦网络爬虫由于可以按对应的主题有目的地进行爬取,所以在实际的运用过程中可以节省大量的服务器资源和宽带资源,因而具有很强的实用性。这里我们以聚焦网络爬虫为例来了解爬虫运行的工作原理和流程。
如图所示,聚焦网络爬虫拥有一个控制中心,该控制中心负责对整个爬虫系统进行管理和监控,主要包括控制用户交互、初始化爬行器、确定主题、协调各模块之间的工作、控制爬行过程等方面:
(1)控制中心将初始的URL集合传递给URL队列,页面爬行模块会从URL队列中读取第一批URL列表;
(2)根据这些URL地址从互联网中进行相应的页面爬取;爬取后,将爬取到的内容传到页面数据库中存储;
(3)在爬行过程中,会爬取到一些新的URL,此时,需要根据所定的主题使用链接过滤模块过滤掉无关链接,再将剩下来的URL链接根据主题使用链接评价模块或内容评价模块进行优先级的排序。完成后,将新的URL地址传递到URL队列中,供页面爬行模块使用;
(4)将页面爬取并存放到页面数据库后,需要根据主题使用页面分析模块对爬取到的页面进行页面分析处理,并根据处理结果建立索引数据库,用户检索对应信息时,可以从索引数据库中进行相应的检索,并得到对应的结果。
3.增量式网络爬虫
这里的“增量式”对应着增量式更新,增量式更新指的是在更新的时候只更新改变的地方,而未改变的地方则不更新。
增量式网络爬虫,在爬取网页的时候,只爬取内容发生变化的网页或者新产生的网页,对于未发生内容变化的网页,则不会爬取。增量式网络爬虫在一定程度上能够保证所爬取的页面,尽可能是新页面。
4.深层网络爬虫
在互联网中,网页按存在方式分类可分为表层页面和深层页面。表层页面指的是不需要提交表单,使用静态的链接就能够到达的静态页面;而深层页面是需要提交一定的关键词之后才能够获取得到的页面。而在互联网中,深层页面的数量往往比表层页面的数量要多很多。
深层网络爬虫可以爬取互联网中的深层页面,爬取深层页面,需要想办法自动填写好对应表单。深层网络爬虫主要由URL列表、LVS列表(LVS指的是标签/数值集合,即填充表单的数据源)、爬行控制器、解析器、LVS控制器、表单分析器、表单处理器、响应分析器等部分构成。
在前面我们说过网络爬虫算法是根据人们施加的规则去采集信息,而由于网络复杂的环境,所以相应的也有各种不同算法,也就是爬取策略。这里我们主要介绍下爬取的顺序与频率。
1.爬取顺序
在网络爬虫爬取的过程中,在带爬取的URL列表中可能有很多URL地址,那么爬虫爬取这些URL地址就会有先后顺序。
相对于通用网络爬虫,爬取的顺序并不是那么重要。但聚焦网络爬虫,爬取的顺序与服务器资源和宽带资源有关,所以非常重要,一般由爬行策略决定。爬行策略主要有深度优先爬行策略、广度优先爬行策略、大站优先策略、反链策略、其他爬行策略等。
如图所示,假设有一个网站,ABCDEFG分别为站点下的网页,如图所示表示网页的层次结构。假如此时网页ABCDEFG都在爬行队列中,那么按照不同的爬行策略,其爬取的顺序是不同的。
深度优先爬行策略:A→D→E→B→C→F→G
广度优先爬行策略:A→B→C→D→E→F→G
除了以上两种爬行策略之外,还可以采用大站爬行策略。可以按对应网页所属的站点进行归类,如果某个网站的网页数量多,则将其称为大站,按照这种策略,网页数量越多的网站越大,然后,优先爬取大站中的网页URL地址。
另外还有反链策略,一个网页的反向链接数,指的是该网页被其他网页指向的次数,这个次数在一定程度上代表着该网页被其他网页的推荐次数。所以,如果按反链策略去爬行的话,那么哪个网页的反链数量越多,则哪个网页将被优先爬取。
但是在实际情况中,如果单纯按反链策略去决定一个网页的优先程度的话,那么可能会出现大量的作弊情况。所以采用反向链接策略需要考虑可靠的反链数。除了以上这些爬行策略,在实际中还有很多其他的爬行策略,比如OPIC策略、Partial PageRank策略等。
2.爬取频率
一个网站的网页是经常更新的,作为爬虫方,网站的更新频率与爬虫访问网站的频率越接近,则效果越好。当然,在爬虫服务器资源有限的情况下,爬虫也需要根据对应策略,让不同的网页具有不同的更新优先级,优先级高的网页更新,将获得较快的爬取响应。常见的网页更新策略主要有如下3种:
(1)用户体验策略:大部分用户在使用搜索引擎查询某个关键词的时候,只会关注排名靠前的网页,所以,在爬虫服务器资源有限的情况下,爬虫会优先更新排名结果靠前的网页。
(2)历史数据策略:指的是可以依据某一个网页的历史更新数据,通过泊松过程进行建模等手段,预测该网页下一次更新的时间,从而确定下一次对该网页爬取的时间。
(3)聚类分析策略:网页可能具有不同的内容,但是一般来说,具有类似属性的网页其更新频率类似,所以可以对海量的网页进行聚类分析,聚类完成后,可以依据同一个类型网页平均更新值来设定爬取的频率。
对于实现技术,本文不做展开,仅为有兴趣的同学提供几个常见的语言:Python、Java、PHP、Node.JS、C++、Go语言(此外,网络爬虫的开发语言还有很多)。
Python:爬虫框架非常丰富,并且多线程的处理能力较强,并且简单易学、代码简洁,优点很多。
Java:适合开发大型爬虫项目。
PHP:后端处理很强,代码很简洁,模块也较丰富,但是并发能力相对来说较弱。
Node.JS:支持高并发与多线程处理。
C++:运行速度快,适合开发大型爬虫项目,成本较高。
Go语言:同样高并发能力非常强。
说到爬虫,很多人都认为它是网络世界中一个不可而为之的灰色地带。恭喜你,读完这篇文章,你对此的认知就超过了好多人。
因为爬虫分为善意爬虫和恶意爬虫,例如,搜索引擎的爬虫。善意爬虫严格遵守Robots协议规范爬取网页数据(如URL),它的存在能够增加网站的曝光度,给网站带来流量;
最近,一个名叫 Magi 的搜索引擎成了重点关注对象,据称这个搜索引擎和我们常见的搜索引擎很不一样,有一种程序员们钟爱的 X 冷淡风格。于是我们打开 Magi 看了看。确实,这个页面看着就很让人舒爽。