网络爬虫作为收集互联网数据的一种常用工具,近年来随着互联网的发展而快速发展。使用网络爬虫爬取网络数据首先需要了解网络爬虫的概念和主要分类,各类爬虫的系统结构、运作方式,常用的爬取策略,以及主要的应用场景,同时,出于版权和数据安全的考虑,还需了解目前有关爬虫应用的合法性及爬取网站时需要遵守的协议。
(1)认识爬虫的概念。
(2)认识爬虫的原理。
(3)了解爬虫运作时应遵守的规则。
网络爬虫也被称为网络蜘蛛、网络机器人,是一个自动下载网页的计算机程序或自动化脚本。网络爬虫就像一只蜘蛛一样在互联网上爬行,它以一个被称为种子集的URL集合为起点,沿着URL的丝线爬行,下载每一个URL所指向的网页,分析页面内容,提取新的URL并记录下每个已经爬行过的URL,如此往复,直到URL队列为空或满足设定的终止条件为止,最终达到遍历Web的目的。
网络爬虫按照其系统结构和运作原理,大致可以分为4种:通用网络爬虫、聚焦网络爬虫、增量式网络爬虫、深层网络爬虫。
1. 通用网络爬虫
通用网络爬虫又称全网爬虫,其爬取对象由一批种子URL扩充至整个Web,主要由搜索引擎或大型Web服务提供商使用。这类爬虫的爬取范围和数量都非常大,对于爬取的速度及存储空间的要求都比较高,而对于爬取页面的顺序要求比较低,通常采用并行工作的方式来应对大量的待刷新页面。
该类爬虫比较适合为搜索引擎搜索广泛的主题,常用的爬取策略可分为深度优先策略和广度优先策略。
(1)深度优先策略
该策略的基本方法是按照深度由低到高的顺序,依次访问下一级网页链接,直到无法再深入为止。在完成一个爬取分支后,返回上一节点搜索其他链接,当遍历完全部链接后,爬取过程结束。这种策略比较适合垂直搜索或站内搜索,缺点是当爬取层次较深的站点时会造成巨大的资源浪费。
(2)广度优先策略
该策略按照网页内容目录层次的深浅进行爬取,优先爬取较浅层次的页面。当同一层中的页面全部爬取完毕后,爬虫再深入下一层。比起深度优先策略,广度优先策略能更有效地控制页面爬取的深度,避免当遇到一个无穷深层分支时无法结束爬取的问题。该策略不需要存储大量的中间节点,但是缺点是需要较长时间才能爬取到目录层次较深的页面。
2. 聚焦网络爬虫
聚焦网络爬虫又被称作主题网络爬虫,其最大的特点是只选择性地爬取与预设的主题相关的页面。与通用网络爬虫相比,聚焦爬虫仅需爬取与主题相关的页面,极大地节省硬件及网络资源,能更快地更新保存的页面,更好地满足特定人群对特定领域信息的需求。
按照页面内容和链接的重要性评价,聚焦网络爬虫策略可分为以下4种。
(1)基于内容评价的爬取策略
该策略将用户输入的查询词作为主题,包含查询词的页面被视为与主题相关的页面。其缺点为,仅包含查询词,无法评价页面与主题的相关性。
(2)基于链接结构评价的爬取策略
该策略将包含很多结构信息的半结构化文档Web页面用来评价链接的重要性,其中,一种广泛使用的算法为PageRank算法,该算法可用于排序搜索引擎信息检索中的查询结构,也可用于评价链接重要性,其每次选择PageRank值较大页面中的链接进行访问。
(3)基于增强学习的爬取策略
该策略将增强学习引入聚焦爬虫,利用贝叶斯分类器基于整个网页文本和链接文本来对超链接进行分类,计算每个链接的重要性,按照重要性决定链接的访问顺序。
(4)基于语境图的爬取策略
该策略通过建立语境图来学习网页之间的相关度,具体方法是,计算当前页面到相关页面的距离,距离越近的页面中的链接越优先访问。
3. 增量式网络爬虫
增量式网络爬虫只对已下载网页采取增量式更新,或只爬取新产生的及已经发生变化的网页,这种机制能够在某种程度上保证所爬取的页面尽可能的新。与其他周期性爬取和刷新页面的网络爬虫相比,增量式网络爬虫仅在需要的时候爬取新产生或者有更新的页面,而没有变化的页面则不进行爬取,能有效地减少数据下载量并及时更新已爬取过的网页,减少时间和存储空间上的浪费,但该算法的复杂度和实现难度更高。
增量式网络爬虫需要通过重新访问网页来对本地页面进行更新,从而保持本地集中存储的页面为最新页面,常用的方法有以下3种。
(1)统一更新法
爬虫以相同的频率访问所有网页,不受网页本身的改变频率的影响。
(2)个体更新法
爬虫根据个体网页的改变频率来决定重新访问各页面的频率。
(3)基于分类的更新法
爬虫按照网页变化频率将网页分为更新较快的网页和更新较慢的网页,并分别设定不同的频率来访问这两类网页。
为保证本地集中页面的质量,增量式网络爬虫需要对网页的重要性进行排序,常用的策略有广度优先策略和PageRank优先策略,其中,广度优先策略按照页面的深度层次进行排序,PageRank优先策略按照页面的PageRank值进行排序。
4. 深层网络爬虫
Web页面按照存在方式可以分为表层页面和深层页面两类。表层页面是指传统搜索引擎可以索引到的页面,以超链接可以到达的静态页面为主。深层页面是指大部分内容无法通过静态链接获取,隐藏在搜索表单后的,需要用户提交关键词后才能获得的Web页面,如一些登录后可见的网页。深层页面中可访问的信息量为表层页面中的几百倍,为目前互联网上发展最快和最大的新型信息资源。
深层网络爬虫爬取数据过程中,最重要的部分就是表单填写,包含以下两种类型。
(1)基于领域知识的表单填写
该方法一般会维持一个本体库,并通过语义分析来选取合适的关键词填写表单。该方法将数据表单按语义分配至各组中,对每组从多方面进行注解,并结合各组注解结果预测最终的注解标签。该方法也可以利用一个预定义的领域本体知识库来识别深层页面的内容,并利用来自Web站点的导航模式识别自动填写表单时所需进行的路径导航。
(2)基于网页结构分析的表单填写
该方法一般无领域知识或仅有有限的领域知识,其将HTML网页表示为DOM树形式,将表单区分为单属性表单和多属性表单,分别进行处理,从中提取表单各字段值。
1. 爬虫的合法性
网络爬虫领域现在还处于早期的拓荒阶段,虽然已经由互联网行业自身的协议建立起一定的道德规范,但法律部分还在建立和完善中。
目前,多数网站允许将爬虫爬取的数据用于个人使用或者科学研究。但如果将爬取的数据用于其他用途,尤其是转载或者商业用途,则依据各网站的具体情况有不同的后果,严重的将会触犯法律或者引起民事纠纷。
同时,也需要注意,以下两种数据是不能爬取的,更不能用于商业用途。
(1)个人隐私数据,如姓名、手机号码、年龄、血型、婚姻情况等,爬取此类数据将会触犯个人信息保护法。
(2)明确禁止他人访问的数据,例如,用户设置过权限控制的账号、密码或加密过的内容等。
另外,还需注意版权相关问题,有作者署名的受版权保护的内容不允许爬取后随意转载或用于商业用途。
2. robot.txt协议
当使用爬虫爬取网站的数据时,需要遵守网站所有者针对所有爬虫所制定的协议,这便是robot.txt协议。
该协议通常存放在网站根目录下,里面规定了此网站中哪些内容可以被爬虫获取,以及哪些网页内容是不允许爬虫获取的。robot.txt协议并不是一份规范,只是一个约定俗成的协议。爬虫应当遵守这份协议,否则很可能会被网站所有者封禁IP,甚至网站所有者会采取进一步法律行动。在著名的百度与360的爬虫之争中,由于360没有遵守百度的robot.txt协议,爬取了百度网站的内容,而最终被判处70万元的罚款。
由于爬虫爬取网站时模拟的是用户的访问行为,所以必须约束自己的行为,接受网站所有者的规定,避免引起不必要的麻烦。