赞
踩
广义的互联网大数据即包括各种互联网 Web 应用中不断累计产生出来的数据,也包括Web后台的传统业务处理系统产生的数据。狭义的互联网大数据主要指基于互联网Web应用所产生的数据,例如新闻信息、微博、网络论坛帖子、电商评论等。
在互联网大数据研究和应用中,常见的数据来源有以下类型。
微博、网络论坛等各种社交平台已经成为人们聊天、分享信息、交换意见的重要场合,不断地产生各种即时信息(User Generated Content,UGC)。这些数据体现了人们的观点、情绪、行为,以及群体关注的热点、话题等许多信息。这些信息已经逐步被越来越多的机构重视,用来进一步挖掘分析,为提升客户服务、产品质量提供准确资料。
社交网络主要来源于社交平台,它更侧重于人际关系数据,而社交媒体更侧重于内容,也有很多文献资料并不太区分社交网络和社交媒体。著名学者尼古拉斯·克里斯塔基斯(Nicholas A. Christakis)和詹姆斯·富勒(James H. Fowler)撰写了《大连接》一书,认为人与人之间,甚至人与物之间、人与信息之间、人与自然之间,都可以形成连接。现在,人类社会进入了一个大连接时代,来自于社交网络的连接数据已经被广泛应用,成为互联网大数据中的重要组成部分。
大数据技术应用是一种基于经验数据的应用,经验数据的质量、完整性和可得性对于大数据的成功实施非常重要。但是,经验知识往往存在于每个人的大脑中,其表达、存储并不是很容易的事。随着互联网应用的扩展,出现了很多百科知识库,例如百度百科、维基百科等。开放式的知识管理方式允许每个人对知识的正确性进行维护,因此出现了一些高质量的百科知识库,对于在大数据应用中进行知识获取、分析和推理具有重要价值。
新闻信息是互联网大数据另一个重要的组成部分,涵盖社会新闻、科技新闻、国际新闻等。随着新闻发布机制的创新,互联网上新闻信息发布的及时性提高,一些个性化推送平台使得新闻的受众选择更加精准。各类新闻信息体现了当前各个领域的重要事件以及事件的演化过程,因此为大数据的动态性和深度分析挖掘提供了很好的数据源和示例。
股票评论、商品评论、酒店评论、服务质量评论等许多评论信息在互联网上广泛存在,它们属于典型的短文本,这类数据在大数据分析应用中具有典型的代表性,是一种重要的大数据。其分析和处理方法不同于新闻信息之类的长文本,互联网上的各类评论信息为相应的技术研究和应用开发提供了充足的数据。
—随着移动互联网应用的快速普及,人们越来越习惯于在社交平台上进行签到,移动社交平台通常也记录了人们移动的位置和轨迹。这类数据作为一种重要的大数据类型,在大数据分析应用中具有较高价值,因此也是值得关注的互联网大数据之一。
此外还有很多其他类型的互联网大数据,这里就不一一列举了。
对于一般意义上的大数据而言,特别是来自于OLTP(联机事务处理)的大数据,通常认为其数据具有4V(Volume、Variety、Value、Velocity)、5V(Volume、Velocity、Variety, Veracity、Variability)或 7V(Volume、Velocity、 Vast Variety、Veracity,Value、Visualization)等特征。但是不管哪种,一般都把数据的大容量、数据蕴含的价值、数据来源的多样化以及数据处理的快速化等特点作为大数据的基本特征。
互联网大数据除了具备这些基本特征外,还有一些新特征,归纳起来主要有互联网大数据开放性好、容易采集、数据类型丰富、数据量大、流动性大、来源多样化、弱规范性、非结构化数据多,并且随着“互联网+”国家战略的推进,互联网大数据的价值体现具有多样化和广泛性。总之,互联网大数据具备大数据的各种典型特征,是进行大数据相关教学、科研和应用的重要数据来源。
其特征具体说明如下:
互联网大数据的数据类型除了传统的基本数据类型以外,还有文本型、音/视频、用户标签、地理位置信息、社交连接数据等。这些数据广泛存在于各类互联网应用中,例如新闻网站上的新闻、网络论坛中的帖子、基于位置服务系统(LBS)中的经纬度信息,以及微博中用户关注所形成的连接数据。
这种数据虽然本质上属于字符串、整型等基本数据类型,但是它们经过重新整合已经形成了具有一定语义的数据单元,例如从用户评论文本中可以引申出用户的情感、人格,从用户的轨迹数据中可以引申出其活动规律,等等。
弱规范性的数据是人们表达灵活性的体现,因此具有很高的研究价值,在关系型数据为主的时代,此类数据并不多见。由于互联网数据的动态性、交互性都比较强,在信息传播作用下,用户生成的信息通常也有很大的相似性。此外,用户生成的信息是可以由用户控制的,也就是用户可以在此后进行修改、删除。因此,在采集互联网大数据时就可能会出现信息内容不一致性的情况。
此外,互联网应用中对数据的校验并不是很严格,甚至可能是用户自定义的,这种数据规范化方式与OLTP预先定义的模式也完全不同。典型的是微博中的用户标签,每个人可以根据自己的偏好设定自己的标签,两个不同的标签可能具有相同的含义,而相同的标签对不同用户来说可能有不同的含义。
在OLTP中,数据产生的速度取决于业务组织和规模,除了银行、电信等大型的联机系统外,OLTP数据流动性一般并不高,数据生成速度也很有限。但是在互联网环境下,越来越多的应用由于面对整个互联网用户群体而使得数据产生、数据流动性大大增强,例如微博、LBS服务系统等,这种流动性主要体现在信息传播、数据在不同节点之间的快速传递。这种特点也就决定了大数据分析技术要具备对数据流的高速处理能力,挖掘算法要能够支持对数据流的分析,技术平台要具备充足的并行处理能力。
OLTP具有很强的封闭性,但对于互联网大数据而言,由于互联网应用架构本身具有去中心化的特点,也就使得各种互联网应用中的数据在较大范围内是公开的,可以自由获取。而且由于互联网应用的开放性特点,对于用户的身份审查并不太严格,用户之间进行数据共享和自由分享也就变得更加容易。
随着智能终端的快速普及、通信网络的升级换代加快、智能技术和交互手段越来越丰富,互联网应用程序形式将变得丰富多彩,也将产生与以往不同的数据形式,例如虚拟现实(VR)技术的应用就可能直接将人的真实表情数据、生理数据记录下来。此外,云计算、物联网技术的出现带来了新的服务模式,它们与互联网的结合也将极大地扩大互联网大数据来源。多种不同来源的数据以互联网为中心进行融合,正符合了大数据的基本特征,因此可以在这个基础上做更有效的分析和挖掘。
随着“互联网+”国家战略的推进,互联网思维在各个行业得到运用,互联网大数据与每个行业领域都存在结合点,因此大数据的价值体现也就不会仅局限于互联网应用自身、例如互联网与出租车的结合,使得基于互联网大数据的车流预测、路径规划更具有全局性。
互联网大数据与科学研究结合在一起也形成了目前颇具特色的研究范式。从以社会调查和试验为主要基础的社会科学领域,逐渐过渡到以互联网为背景来构建自己的数据源,例如很多的研究以微博、Twitter 中的用户行为数据为基础,开展一些心理、情感方面的研究,也凸显了互联网大数据价值的多样化。在新闻学、金融学、认知心理学、法学等众多领坡,都体现了互联网大数据与各个学科领域结合的效用。
Python爬虫大数据采集技术的重要性可以从大数据采集的重要性、互联网大数据的重要性以及 Python开发生态的重要性3个方面来分析。
大数据处理过程通常涉及若干个重要环节,包括数据采集、结构化处理、数据存储、分析挖掘、可视化、共享与交易等。数据采集是整个过程的开始,如果没有数据,后续的处理环节就无法进行。如果没有真正的大数据,后续环节的处理技术就会退化成为当前已经成熟的普通数据挖掘应用技术。
从大数据的技术构架来看,大数据采集处于整个架构的底层,是整个架构的基础。大数据采集技术性能的好坏直接影响到数据采集的效率和数据的质量,没有高性能的采集技术,大数据的后续处理和研究开发就无从谈起。
互联网大数据能满足大数据技术教学的要求。当前,金融、交通、医疗等具体领域中的大数据在研究和应用时遇到的主要问题有数据领域封闭、共享范围有限、数据量少、静态数据偏多、缺乏动态机制、数据类型过于单一、应用价值很有限等。
随着互联网应用的广泛普及,越来越多的数据将出现在互联网上。社交媒体、网络论坛等网络应用时刻产生各种用户数据,这些数据反映了网络用户的行为特征、语言特征、群体特征等,具有很高的研究和应用价值。此外,“互联网+”国家战略的实施将深刻影响今后很长时间内的社会发展,越来越多的机构将互联网作为与客户交互、创造新业务模式的途径,各领域的数据也将会越来越多出现在互联网上。因此,互联网大数据在大数据技术研究、教学、应用和开发中的重要性就非常凸显,将互联网大数据作为大数据技术研究和应用开发的一种数据源是非常合适的,解决了当前大数据研究应用存在的无米之炊的局面。
近年来,Python语言逐步成熟,众多的开源软件和插件极大地丰富了Python的开发生态。这些Python开源软件和插件涵盖科学计算、语言处理、文本挖掘、图像处理等,极大地方便了开发人员进行各种开发,因此得到了越来越多开发人员的追捧。
Python已经从各种计算机编程语言中脱颖而出,成为一种有前途的语言和开发环境,而爬虫系统作为一种重要的互联网大数据采集手段,系统的设计、实现和构建选择合适的语言将有助于整个大数据技术构架的集成化程度的提升。因此,选择Python语言进行互联网大数据采集技术的实现具有一定实际意义和必要性。
网络爬虫的应用源于20世纪90年代的Google 等搜索引擎,爬虫用于抓取互联网上的Web页面,再由搜索引擎进行索引和存储,从而为网民提供信息检索服务。在系统架构上,网络爬虫位于搜索引擎的后台,并未直接与网民接触,因此在较长的时间内并未被广大开发人员所关注,相应的技术研究也很有限。
下图是在知网数据库中检索“网络爬虫”关键词,并按照年度统计相关文献数量后得到的趋势图。该图反映了从2002年至2017年国内对网络爬虫技术研究和应用的变化趋势,大体上反映了爬虫技术的关注度。
从图中可以看出,2004年以前该技术和应用的关注度几乎为0,但2005年以来人们对网络爬虫技术的关注度快速上升。进一步分析发现,对网络爬虫技术及应用的关注度排名在前面的领域依次是计算机软件及计算机应用、互联网技术与自动化技术、新闻与传媒、贸易经济、图书情报与数字图书馆、企业经济、自然地理学和测绘学、金融投资,其中超过90%的关注度主要集中在前两者,它们侧重于爬虫技术研究,紧接在后面的是主要的网络应用领域,可以看出爬虫技术的应用领域很广泛。
爬虫是一个实践性很强的技术活,因此网络爬虫技术关注度的变化趋势也从另一个角度反映了互联网上运行的爬虫数量的增长速度。除了为数不多的主流互联网搜索引擎爬虫外,互联网上运行的爬虫主要来自个人、中小型企业单位。
爬虫应用的迅速普及得益于大量的网络爬虫开源包或底层技术开源包的出现,这些开源包使得开发一个具体应用的网络爬虫采集系统变得容易很多。但是,也正由于这个原因,高度封装的开源包使得很少有人愿意深入了解其中的关键技术,导致这种途径生产出来的爬虫质量、性能和友好程度都受到很大影响。甚至网络爬虫因此被认为是一个不太“优雅”的行业,当然这种看法并不正确,不能被低质量的个人或小型爬虫迷惑而看不清行业现状。相反,我们应当深入分析导致这种问题的技术和非技术因素,制定更为完善的爬虫大数据采集规范或要求。
目前,低质量的个人、小型爬虫存在的主要问题可以归结为以下3个方面。
(1)不遵守Robots协议,连接一个Web服务器之后不检测虚拟根目录下是否存在robots.txt文件,也不管文件里面关于页面访问许可列表的规定。由于这个协议是一个行业规范,忽视或不遵守这个协议也就意味着行业的发展会进入不良状态。
(2)爬行策略没有优化,一般开源系统实现了宽度优先或深度优先的策略,但是并没有对Web页面的具体特征做优化,例如Portal 类型页面的超链接非常多,这些链接如果直接进入爬行任务,就很容易对Web服务器造成拒绝服务攻击。
(3)许多爬虫实现了多线程、分布式的架构,这个看似好的软件架构技术对于网络爬虫来说可能只是“一厢情愿”。客户端架构设计得再好,爬行策略、增量模式等问题没有解决好,其效果就相当于制造了很多小爬虫在服务器上同时运行。这种情况最终导致两败俱伤的结局,Web服务器需要投入大量的人力、物力和资金进行爬虫检测和阻断,对于爬虫也一样,因此最终对Web服务器和采集数据的爬虫都不利。
网络爬虫技术出身于互联网搜索引擎,用于从互联网上可达URL所指向的Web页面或资源采集信息内容。爬虫技术经过较长时间的发展,目前的应用范围变得越来越广。在涉及从互联网上进行大量页面的自动采集时基本上都离不开爬虫技术。
爬虫技术的应用可以分为两大类,分别称为采集型爬虫和监测型爬虫。
采集型爬虫延续了搜索引擎爬虫技术,是目前使用最广泛的模式。这种爬虫在搜索引擎爬虫技术的基础上对抓取范围、意图做了不同程度的限定,从而产生一些新型应用。以下列举一些该类型爬虫的典型使用场景。
(1)互联网搜索引擎:
爬虫技术是互联网搜索引擎系统的关键技术。不管是通用的搜索引擎,还是垂直搜索引擎系统,其庞大的数据都是源自于互联网上各种应用中的数据,通过爬虫技术可以对互联网上的页面信息进行及时、全面的采集,从而能够使搜索引擎系统保持新鲜数据,更好地为用户提供查询服务。
(2)互联网舆情监测:
这是当前的应用热点,通过采集互联网上一些特定网站中的页面进行信息提取、敏感词过滤、智能聚类分类、主题检测、主题聚焦、统计分析等处理之后,给出舆情态势研判的一些分析报告。当前典型的互联网舆情监控系统所能达到的监测效果都取决于其互联网信息的获取能力,包括监控系统在Web页面获取时的并发能力、对静态和动态等不同类型页面的获取能力、对实时页面数据的获取能力等。
(3)知识图谱的构建:
知识图谱以结构化的形式描述客观世界中的概念、实体及其关系,其构建需要大规模数据。互联网空间中的大量知识库是构建知识图谱的理想数据源。典型的开放知识库有 Wikidata(维基数据)、DBpedia、Freebase,行业知识库有IMDB(互联网电影资料库)、MusicBrainz(音乐信息库)等。爬虫是实现这些知识内容自动采集、自动更新的途径。
(4)社交媒体评论信息监测:
随着社交媒体在互联网上的广泛应用,出现了大量评论型页面,对这些Web页面进行及时、完整的采集,能够获取到大量的用户偏好、用户行为信息,这是个性化推荐、用户行为研究和应用的关键基础。例如目前对各种电子商务网站产品购买评论的自动采集、校园BBS页面采集等都属于这种类型。
(5)学术论文采集:
学术爬虫专门从互联网中爬行公开的学术论文,是构建学术搜索系统的关键基础。目前国内外有许多类似的搜索,例如 Google Scholar、Microsoft Academic Search、CiteSeerX以及百度学术等。此类爬虫专门获取PDF、Word、PostScript以及压缩文档。
(6)离线浏览:
离线浏览允许用户设置若干个网站,将页面从服务器下载到用户硬盘里,从而可以在不连接互联网的情况下进行Web浏览。实现这种功能的是离线浏览器,典型的离线浏览器包括Offline Browser、WebZIP、WebCopier 等。它们的核心技术就是爬虫技术,只是在执行时离线浏览器需要限定爬行的范围,即所需要爬行的网站列表,以免爬虫漫无边际地沿着页面超链接下载其他网站的页面内容。
另一类应用是监测型爬虫,这类爬虫不是以采集信息为主要目标,并非要采集尽可能多的信息,而是利用爬虫在内容采集和分析方面的能力对服务器的信息内容进行监测,因此对爬虫和服务器的交互能力提出了更多要求。其典型的应用包括应用安全监测和内容安全监测。
(1)应用安全监测:
应用层安全是网络信息安全的重要问题之一,这类安全与具体应用有密切关系,而随着部署在互联网的应用越来越多,应用安全问题变得愈发突出。作为互联网应用的主流客户端,浏览器需要人为的点击和数据输入,并且所有的执行可能会对宿主计算机产生安全威胁,因此在应用安全监测方面的效率和及时性会受到很大影响。基于网络爬虫技术,则可以在很大程度上改变这种情况。网页挂马的监测就是在爬虫获取页面后对页面中所包含的动态脚本进行特征分析。SQL注入是另一种常见的应用安全问题,可以通过爬虫技术向所要监测的Web服务器发起查询命令,并根据返回结果进行安全判断。
(2)内容安全监测:
内容安全是网络信息安全的最高层次,敏感信息、泄密信息等的监测需要从内容层面上分析其安全属性,通常这类信息的监测需要在当事人不知情的情况下进行,因此采用自动化的爬虫技术,并结合适当的内容分析技术,是合理的选择。
可以预计,随着互联网大数据在各个行业得到越来越多的关注,运用爬虫技术进行数据获取或监测将变得更加普遍,应用领域和场景也会越来越丰富,未来爬虫的应用将进入一种广义的采集阶段,而非目前的侧重于数据抓取。因此,非常有必要深入掌握网络爬虫的核心技术、实现方法及未来技术发展。
在许多开源系统的基础上设计开发网络爬虫已经变得简单、可行,然而要针对具体爬行任务要求来提升爬虫性能,需要进一步了解爬虫的技术原理。类似于软件体系架构原理,可以从静态、动态等多个视角来理解网络爬虫的技术组成。
分层架构是描述复杂软件系统的一种常见方法,下图是网络爬虫的层次架构图。从底层往上,依次可以分成4个层次,即网络连接层、页面采集层、页面提取层和领域处理层。对采集到的数据的使用并不包含在这个体系中,因为这是具体应用,并不属于爬虫采集。
这4个层次的功能原理解释如下。
(1)网络连接层:
主要由TCP Socket连接的建立、数据传输以及连接管理组成。由于目前Web服务器使用的是HTTP1.1或HTTP2.0协议,支持TCP连接复用或连接的持久化,所以如果爬虫利用这些特性,Socket连接的建立、断开及URL请求和结果的接收需要按照一定的顺序进行。此外,在爬虫执行过程中可能需要重新连接Web服务器,为了减少域名到IP地址转换的时间,爬虫通常要支持优化的DNS缓存。
(2)页面采集层:
主要包括对URL的处理,从中提取域名,并按照Robots规范决定URL的抓取许可,同时在面对众多的爬行任务时需要按照一定的搜索策略来决定URL的抓取顺序。在抓取页面时,如果涉及动态页面,可能需要考虑在爬虫中实现 Session 机制。最终的URL命令及结果是通过 HTTP协议数据包发送的,在头部信息中可以携带Cookie 信息。
(3)页面提取层:
该层完成了HTML文本信息的处理,主要是从中提取超链接,正文信息等内容,因此需要按照相应的HTML编码规范进行提取。同时,由于不同网站对Web页面信息的编码方式并不完全相同,例如 utf-8、unicode、gbk 等,在解析文本信息时需要考虑页面的编码方式。当然目前有很多的开源框架支持页面解析,包括1xml、BeautifulSoup等,设计人员需要掌握一些相应的规范,例如XPath。
(4)领域处理层:
一些特定类型爬虫需要完成的功能,对于普通爬虫而言,该层并不需要。领域处理主要有主题爬虫、Deep Web爬虫,因此需要一定的文本分析技术来支持,包括文本分词、主题建模等。对Web页面的安全监测也属于领域处理。
从网络爬虫应用的角度看,在具体应用领域,爬虫的类型有很多种,包括普通爬虫、主题爬虫、Deep Web 爬虫等,页面提取层、页面采集层和网络连接层技术是这些爬虫所共有的技术问题。
网络爬虫是一种客户端技术,它不能离开服务端独立工作,而服务端是由众多分布在互联网上的Web服务器组成。在这样的环境下爬虫要从不同的配置、不同Web软件的服务器上采集页面信息,就需要按照一定的协议或规范来完成交互过程。在爬虫技术实现时需要遵守这些协议或规范。
1)TCP协议
TCP协议是网络爬虫的底层协议,当爬虫与Web服务器建立连接、传输数据时都是以该协议为基础。在技术实现上具体表现为Socket编程技术。各种语言都提供了对此的支持,例如Java提供InetAddress类,可以完成对域名与IP之间的正向、逆向解析。在Python 中则有dnspython这个DNS工具包,利用其查询功能可以实现DNS的服务监控及解析结果的校验。不管哪种语言或开发平台,DNS的解析一般都是调用系统自带的API,通常是Socket 的getaddrinfo()函数。
2)HTTP协议
HTTP协议是一种应用层协议,用于超文本传输。它规定了在TCP连接上向Web服务器请求页面以及服务器向爬虫响应页面数据的方式和数据格式。爬虫实现时,对HTTP协议的依赖比较大,目前Web服务器使用的HTTP协议版本主要是HTTP 1.0和HTTP 1.1,而最新的版本是HTTP2.0。这些协议在功能上有一定差异,但也有很多共同的地方。在设计爬虫程序时需要充分了解HTTP协议。
3)Robots协议
Robots 协议也称为爬虫协议,其全称是“网络爬虫排除协议”(Robots Exclusion Protocol)。==该协议指明了哪些页面可以抓取,哪些页面不能抓取,以及抓取动作的时间、延时、频次限定等。==该协议最早是针对搜索引擎爬虫,目前在各种爬虫中都可适用。Robots协议只代表了一种契约,并不是一种需要强制实施的协议。爬虫遵守这一规则,能够保证互联网数据采集的规范化,有利于行业的健康发展。Robots协议的详细介绍可见“http://www.robotstxt.org/robotstxt.html”。
4)Cookie 规范
Cookie 是指某些网站为了辨别用户身份、进行Session 跟踪而储存在用户本地设备上的数据。通过Cookie可以将用户在服务端的相关信息保存在本地,这些信息通常是用户名、口令、地区标识等,这些信息会由浏览器自动读出,并通过HTTP协议发送到服务端。在 RFC 6265(http://www.rfc-editor.org/rfc/rfc6265.txt)规范中具体规定了Cookie 的数据含义、格式和使用方法。
5)网页编码规范
网页编码是指对网页中的字符采用的编码方式。由于一个网页可能被来自世界各地的访客访问,而每个国家的语言并不完全相同,所以为了使网页内容能正常显示在访客的浏览器上,需要有一套共同的约定来表明页面中字符的提取识别方法。目前常见的网页字符编码主要有 unicode、utf-8、gbk、gb2312等,其中 utf-8为国际化编码,在各国各地区的网站中都很常见,是最通用的字符编码。爬虫在解析页面内容时就需要识别页面的编码方式。
6)HTML语言规范
HTML(Hyper Text Markup Language,超文本标记语言)是一种用来描述网页的语言,它规定了页面的版式、字体、超链接、表格,甚至音乐、视频、程序等非文字元素的表示方法。对爬虫采集页面的解析、对表格数据的提取、对正文的提取等都需要根据 HTML定义的各种标签才能正确完成。目前最新的HTML版本为2017年12月万维网联盟(W3C)发布的HTML 5.2。
对于网络爬虫采集页面数据而言,最终的目标是获得页面中的内容,因此如何从HTML编码的内容提取所需要的信息是爬虫采集Web 数据需要解决的问题。此外,由于爬虫是依赖于超链接来获得更多的爬行页面,所以从Web页面中提取超链接也是Web信息提取的技术问题。
总的来说,Web 信息提取包含两大部分,即Web页面中的超链接提取和Web内容提取。对于前者而言,超链接在 Web页面中具有相对比较有限的标签特征,因此通常可以使用简单的正则表达式之类的方法来提取。对于页面中正文内容的提取则要复杂一些。由于不同页面的正文位置并不相同,并且网站也会经常改版,所以为了爬虫解析 Web页面的程序能够具备一定的灵活性和适应性,需要引入一定的技术手段来减轻这种变化所需要的程序维护工作。其常用的方法是将Web页面转换成为一棵树,然后按照一定的规则从树中获得所需要的信息。
目前,在Python 中已经有很多种开源库可以用来实现基于树结构的信息提取,并且有灵活的策略可以配置。这些开源库主要有html. parser、lxml、html51ib、BeautifulSoup 以及 PyQuery等。这些库各有各的优缺点,开发人员在实际应用中可以选择合适的方法。
一些高级的方法试图使爬虫提取Web信息有更好的适应能力,一种途径是引入统计思想,对页面中正文部分的各种特征进行统计,在大量样本特征计算的基础上设置合适的特征值范围,从而为自动提取提供依据。
网络爬虫有多种不同的采集需求,Deep Web和主题获取是其中的两种典型代表,在实际中也会经常用到。这其中所涉及的技术与普通爬虫并不一样,因此开发人员通常需要全面掌握。
能够进行主题获取的爬虫被称为主题爬虫,在技术手段上,其核心在于主题。围绕主题的定义方法、主题相似度计算等关键问题,有一系列来自文本内容分析的技术
可以使用,主要有文本预处理技术、主题表示、主题建模等。文本预处理技术包括词汇的切分、停用词过滤等,而主题建模则可以利用各种主题模型,例如PLSA、LDA、基于向量空间的主题表示模型以及简单的布尔模型等。
Deep Web 采集的爬虫目标是获得存储在后台数据库中的数据,属于一种深度数据获取,而普通爬虫通常是一种面向表面的数据采集。既然是深度数据获取,就需要对数据的采集接口有一定的处理能力,同时需要具备一定的输入识别和自动填写能力,因此需要一定的知识库来支持。
网络爬虫除了技术架构中所列出来的技术外,另一个重要的问题是这些技术如何进行协调合作,共同完成互联网大数据的采集。这是通过网络爬虫的软件技术来保证的,在技术实现时通常有多种不同的选择。
1)多线程技术
从网络爬虫的技术体系看,对于某个页面的采集,3个层次上的功能执行具有先后顺序,即必须先建立网络连接,再进行HTTP协议数据的发送和接收处理,最后根据爬虫采集需求对接收到的页面数据进行解析和内容提取。如果是主题爬虫,还需要进行一些内容分析。
爬虫通常并不针对某个页面,而是根据超链接抓取多个页面。这些页面的抓取过程之间相互独立,因此在实现时可以使用多线程技术。通常的做法是设置若干线程分别进行页面内容提取、URL处理、HTTP命令数据包构建、响应数据的接收以及建立网络连接等。不同线程之间可以通过文件、共享内存进行数据交换。
2)单机系统
如果需要抓取的页面数量不多,在爬虫系统的技术实现上可以部署在一台机器上,即单机系统模式。在这个模式下,线程的设置要考虑到机器的配置和网络带宽。如果配置高,则线程数量可以多一些;如果网络带宽大,则处理网络连接的线程可以多一些。具体线程数量需要在实际环境下进行调整。
3)分布式系统
如果需要抓取的页面数量很多,以至于爬虫很难在用户预期的时间内完成页面数据的采集,在这种情况下就需要进行分布式处理。在分布式爬虫系统设计中,一般将爬行任务(即URL列表)分配给若干个不同的计算节点,而设置统一的协调中心来
Python爬虫大数据采集与亿俩
管理整个分布式系统所要爬行的URL列表。在分布式系统中,每个节点在处理爬行
任务时仍可以采用多线程结构。
尽管爬虫在软件技术方面有多种不同的选择,但爬虫只是一个客户端程序,为了有效提高整个爬虫系统采集数据的性能,显然不能忽略服务器端的承受和响应能力。对于爬虫系统而言,它是根据所要爬行的URL集合来执行任务的。如果在短时间内,爬虫端多个线程或分布节点同时连接到同一个服务器进行页面采集,显然这些大量的连接请求会在服务器端产生较大的资源占用,从而影响服务器的正常运行,最终导致爬虫系统采集数据的效率降低。因此,在多线程、分布式爬虫设计时应当进行合理的爬行任务分配,即设计合理的爬行策略,避免这种情况出现。
爬虫技术是一种典型的Web页面数据采集方法,得到了许多技术人员的关注,因此目前不断有新的爬虫技术或开源框架被提出来。在这种情况下需要有一套比较完整的爬虫技术评价方法,以便于进行比较、权衡和选择。归纳起来,网络爬虫技术的评价方法可以从以下10个方面进行。
在Web 页面抓取的过程中,是否进行了Robots许可公告的判断,是否根据许可规范来确定爬虫的抓取权限。
友好爬虫以不对Web 服务器造成拒绝服务攻击为底线,因此友好爬虫应当具备请求间隔可调整、符合 Web服务器关于访问高峰期的规定,同时应当根据服务器返回的状态码及时调整自己的请求强度。
高效是指在一定的时间和网络带宽限定下爬虫采集到尽可能多的Web页面。这其中所涉及的爬虫核心技术较多,包括站内页面的遍历策略、站外页面的遍历策略、URL去重技术等。对于 Deep Web来说,还涉及如何降低查询次数的技术问题。
在每次运行时,爬虫是否能够判断哪些页面内容已经更新,并采集自上次采集以来新出现的内容,此即为增量式采集技术。
动态页面的实现可以通过URL传递参数、通过Cookie传递参数以及使用Ajax等技术来实现,不同的爬虫技术对这些技术的支持程度有所不同。
普通型的网络爬虫根据超链接在Web空间上跳转,很可能要面对多种不同页面、不同语言的Web页面,好的爬虫应当能够处理这些差异可能造成的存储信息乱码问题。
对于主题爬虫而言,要衡量采集到的页面与事先设定的主题的相关度,可以进一步从主题信息的召回率和准确率两个指标来衡量。
在面对海量Web信息的采集任务时,通常需要爬虫具备分布式架构,以协调多台计算机高效完成采集任务。
爬虫需要完成 Web 服务器连接建立、URL命令发送、Web页面内容采集、URL过滤以及爬行策略管理等任务,这些任务可以按照一定方式同步进行,从而提升采集效率。是否可以根据计算机的配置情况来设定线程数量是一个必要的技术。
在一般情况下,爬虫采集时需要面对Web服务器、通信网络等多方面的异常,健壮的爬虫应当具有一定的容错能力,以避免各个环节上的错误而导致爬虫系统崩溃。
随着网络爬虫技术应用的普及,网络爬虫的应用场景越来越多,但是一些不合理使用网络爬虫技术进行大数据采集的案例也不断出现,甚至导致了相应的法律问题。因此,网络爬虫能以什么方式抓取什么数据这个问题是值得考虑的,其他类似问题还包括,什么样的数据可以存储在本地、什么样的数据可以共享或出售给他人,这些统称为大数据技术及应用的合规性。
从这个方面看,爬虫可以抓取具有访问权限的数据,这应该是其边界之一。访问权限可以从数据是否公开、页面是否许可来判断。爬虫对公开的数据当然具备抓取权限,公开或不公开的判断依据是否需要以一定用户身份登录后才能看到数据,并且以其他用户身份登录后是看不到这些的。在各类不公开数据的采集中,容易引起纠纷的是用户个人信息,包括个人身份信息、行踪轨迹、联系方式等。在采集这类数据前,爬虫应当获得用户授权。
未公开的网络数据,爬虫程序无权获取,可能会被认定为非法获取计算机信息系统数据罪。在《中华人民共和国刑法》第二百八十五条提到非法获取计算机信息系统数据罪,是指侵入国家事务、国防建设、尖端科学技术领域以外的计算机信息系统或者采用其他技术手段,获取该计算机信息系统中存储、处理或者传输的数据。这里“侵入”是指行为人采用破解密码、盗取密码、强行突破安全工具等方法,在没有得到许可时违背计算机信息系统控制人或所有人意愿进入其无权进入的计算机信息系统中。典型的途径是破解APP的加密算法或网络交互协议、调用规则和参数,从而爬虫突破权限许可获取数据。
抓取权限的另一个界定方法是Robots协议,如果网站有设置robots.txt文件,则爬虫应当依据该文件决定某个特定的URL是否许可。
这是指爬虫访问服务器的方式,其边界为爬虫是否对服务器的正常运行造成影响。如果网络爬虫在短时间内频繁访问 Web 服务器,通常是采用分布式、并行抓取等技术,从而导致服务器不能正常运行,其客户访问变得很慢甚至无法响应。如果突破这个边界,可能会涉及破坏计算机信息系统罪,目前也有一些爬虫抓取被法院按这种类型处理。
与访问方式有关的另一个边界仍然是Robots协议,在该协议中定义了抓取延时、抓取时间段等参数,如果爬虫没有遵守这些约定,则可能导致服务器不能正常运行。不过,据观察,许多网站并没有充分运用Robots协议来定义这些参数。
数据使用边界是指抓取的数据是否用于商业用途、是否涉及版权限定。以前发生的一个例子是,百度公司通过爬虫技术从大众点评网等网站获取信息,并将抓取的信息直接提供给网络用户(展示),最终被上海知识产权法院认定为不正当竞争行为。虽然百度公司的搜索引擎抓取涉案信息并不违反Robots协议,但是将大量数据用于商业用途或展示传播,很可能会涉及不正当竞争,属于利益冲突。此外,根据个人信息安全规范,涉及个人信息的数据不应该存储在本地或进行融合挖掘。
总的看来,互联网公开资源爬取并不违法,网络爬虫作为互联网大数据采集的技术手段,本身具有中立性,而抓取没有权限、没有授权的数据,对服务器正常运行产生影响,以及抓取后的数据用于商业用途、未经授权公开展示,应该是突破了爬虫大数据采集的边界。与爬虫大数据采集相关的规范和法律条款主要出现在《中华人民共和国网络安全法》《计算机信息系统安全保护条例》《个人信息安全规范》《数据安全管理办法(征求意见稿)》和《反不正当竞争法》中。在设计爬虫大数据采集挖掘系统之前建议阅读这些规范和法律条款,设计方案时要对合规性、采集性能进行适当的平衡,不能为了提高采集性能而忽视合规性。
随着互联网技术、大数据应用等相关技术的发展,网络爬虫技术作为互联网大数据采集的主要途径,必然会不断发展变化。对于互联网大数据技术研究及应用开发的人员来说,了解这种发展趋势,把握技术发展方向,是非常有必要的。
网络爬虫离不开技术、应用和行业规范,因此可以从这3个大的方面来分析网络爬虫技术发展的推动力和发展趋势。网络爬虫涉及多种不同的技术,包括网络协议、HTML编码、网络架构等,这些技术本身也在不断的演进。技术的发展虽然是建立在现有技术的基础上,但并非都是向下兼容,也会不断地产生新的思路,以这些技术为基础的网络爬虫自然也要随着技术的发展而发展。
下面按照这个思路对网络爬虫的大数据采集技术的今后发展进行分析和叙述,主要体现在以下6个方面。
自1999年HTTP 1.1发布后,直到2015年才发布了新的版本HTTP 2.0,它被看作是下一代互联网通信协议,但是目前大部分尚未真正实施。将来随着支持HTTP 2.0协议的网站的数量增多,网络爬虫的协议解析和数据包提取技术必然会有相应的发展。
HTTP 2.0在与HTTP 1.1语义兼容的基础上,在性能上实现了大幅提升。该版本采用二进制分帧层,将进行传输的消息分割成更小的消息和帧,并对它们采用二进制格式的编码。因此,HTTP 2.0允许客户端与服务器同时通过同一个连接发送多重请求/响应消息,实现多路复用。HTTP 2.0也允许服务器对一个客户端请求发送多个响应,即服务器推送。这些特性都是现有 HTTP 1.1、HTTP 1.0所不具备的,基于新的HTTP协议,爬虫技术就需要有相应的发展。
国际互联网工程任务组(The Internet Engineering Task Force,IETF)的 QUIC 工作小组创造了 QUIC 传输协议。QUIC(Quick UDP Internet Connection)是一个使用UDP来替代 TCP的协议,有望成为新一代HTTP协议,即HTTP3的核心基础。其目标是给Web浏览提速,当然爬虫也可以从中获益。
IPv6是 IETF(国际互联网工程任务组)设计的用于替代现行版本IP协议(IPv4)的下一代IP协议。随着IPv4 地址耗尽,互联网将会全面部署IPv6。IPv4最多可以分配42亿个IP地址,而IPv6可提供2的128次方个地址,因此没有了地址编码的限制,互联网应用与现在相比一定会有很大的飞跃。
IPv6对爬虫技术发展的推动主要在于两个方面。一方面,由于HTTP数据包最终还是通过IP层进行传送,所以在IPv6下要求爬虫中更底层的网络数据包分析和数据提取技术相应的发展;另一方面,IPv6在安全性方面有很多增强,对爬虫与Web服务器的交互技术提出新的要求。
HTML 语言规范不断升级变化,当前较新的版本是HTML5。相比于以前版本,HTML5添加了很多新元素及功能,并删除了一些旧元素。HTML5提供了新的元素来创建更好的页面结构,元素也可拥有事件属性,这些属性在浏览器中触发行为,改变页面的动态性。从程序设计角度看,除了原先的DOM接口以外,HTML5增加了更多API,实现定时媒体回放、离线数据库存储等功能。
随着今后新型互联网不断出现,可以预见HTML版本将会不断升级,因此为了更好地处理 Web页面内容,网络爬虫在Web页面解析、内容提取方面的技术也将不断发展。
Web 服务应用架构从最早的Client/Server发展到集群、负载均衡、虚拟主机等技术,每次新技术的出现都是Web服务应用架构试图解决高可用性、高并发、可维护等实际问题。云计算、区块链等新的计算和处理架构必将使得Web应用架构发生变化,从而使得网络爬虫在技术上也需要不断更新,以适应服务端架构特征。
Web应用中的互联网大数据朝着多样化、流动性、隐匿性等方面发展,对爬虫信息采集提出了新的要求。目前有3种典型的 Web,即 Surface Web、Deep Web、Dark Web。当前爬虫主要针对表面网络(Surface Web)和深网(Deep Web)。尽管如此,将来随着物联网等新应用的普及,数量巨大的Deep Web 数据或许对当前的动态网页访问提出新的需求,例如实时性等,因此相应的新的软件技术和架构也会随之出现。
另一方面,暗网(Dark Web)包含那些故意隐藏的信息和网站,并且无法通过人们每天使用的浏览器访问,通常只能通过特殊的软件和特定的URL进入。随着暗网的影响力越来越大,对暗网的监管需求也很迫切。客户端如何与暗网高效交互并采集各类信息成为技术发展的前沿方向之一。
互联网大数据采集所涉及的行业规范包括页面访问许可、访问行为规约、数据权属以及数据质量等方面。
虽然目前的Robots协议规定了描述页面访问许可、访问行为规约的方法,但是该协议并非是强制执行的,导致很多爬虫并不遵守服务方的公告。由此,爬虫和服务方之间为了数据的采集与保护进行了持续的博弈,最终导致双方都要付出很大的代价。这种基于Robots 协议的页面访问许可和行为规约还有很大的改进空间。另一方面,Robots 协议针对页面进行许可控制,对于Deep Web数据的访问许可描述不够灵活,因此需要发展细粒度的数据许可约定方法,从而进一步影响爬虫技术实现。
最后,随着大数据交易市场的发展壮大,对数据权属、数据所有权、数据质量等管理问题的逐步明确,相关规范将会得到行业认证,作为大数据采集的网络爬虫在技术处理上显然也需要遵守这些相关约定。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。