再议网络爬虫技术
Posted 马法之议
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了再议网络爬虫技术相关的知识,希望对你有一定的参考价值。
一、网络爬虫的技术逻辑
爬虫是当今互联网中获取数据最主要的技术手段,行业中流行的说法是:互联网中50%的流量都是爬虫。数据本身可能不严谨,但却体现了爬虫技术运用的广泛性。从定义上看,爬虫技术是指一种按照一定的规则,自动地抓取互联网信息的程序或者脚本。[1]如果单从概念上,作为非技术人员,我们还是很难理解爬虫到底是如何工作的,笔者想先从信息网络中数据访问的架构入手,进而介绍爬虫的技术逻辑。
互联网应用服务的实现一般采用C/S或B/S架构协议,其实质是客户端和服务器的数据交互,广义的客户端包括PC端的浏览器和手机移动端的各种app,而服务器则可以理解为网络服务提供商提供服务的仓库,服务器的数据库储存着网络服务所必须提供的数据。以用户想要通过浏览器的网页或者手机app访问某张图片为例,一次网络服务提供的流程是:首先,用户会通过客户端的引导进行操作,例如点击目标图片的链接,客户端会因为用户的点击操作,通过互联网向服务商的服务器发送一个request请求指令,服务器收到该指令后会根据请求在其数据库中找到该图片数据,并通过response回应将该图片数据发送回客户端,呈现在客户端的网页上,最终实现图片的获取。以上是网络数据交互的最基本单元,互联网正是通过无数个类似的、以及更复杂的网络数据交互流程传输着各种形态的数据,实现了庞杂的网络服务应用,构建了一个几乎无所不能的网络世界。
由上述数据交互的基本单元,我们可以看出,数据的访问或者获取是从数据储存的服务器流向前端客户终端,并最终在网页上呈现的过程。数据在这个闭环中流通,如果想从这个闭环中获取数据,可以从这个闭环的不同端点切入,例如可以侵入数据储存的数据库,可以截获数据流通的数据链路,也可以在数据获取的前端盗取数据。
爬虫就是在客户端或者在客户端与服务器连接的接口进行数据获取操作的。爬虫获取数据的流程是:爬虫程序会模仿正常的客户端访问,向服务器发送request请求,然后等待服务器向其返回其所需要的数据。形象的说,爬虫很“聪明”,不会粗暴地直接侵入到后端数据库获取数据,而是通过伪装“躲”在前端,等待服务器将数据按其要求送回来。爬虫获取数据的途径其实和人为的操作访问非常相似,因为其技术实质就是在模仿用户自然人的访问,但爬虫与人的访问也存在一些重要的不同,其重要的区别在于:其一、获取服务器返回的数据后,爬虫程序和自然人访问不同,自然人对于数据不一定都有下载复制的需求,对于很多返回的数据,自然人只是简单地浏览、知悉即可,而爬虫程序则一般会将该数据复制并下载储存到自己的服务器中(因为浏览对于程序来说没有意义,程序不会像人一样观看和倾听);其二、爬虫作为计算机程序,可以实现自动化高速访问,其获取数据的频率和效力要远远高于人工获取,这也是爬虫技术被广泛运用的主要原因。
二、反爬措施概述
爬虫这种高效的数据获取方法极大方便了数据获取者,促进了数据的传播和共享,可以说如果没有爬虫技术,就没有当前如此便捷的互联网和大数据时代,典型的如我们现在每天都在使用的网络搜索引擎,搜索引擎是我们获取网络信息的最主要的途径,很难想象没有搜索引擎,我们如何手动去一个一个获取网站或文件的URL,而搜索引擎的核心就是爬虫。因此,爬虫这种技术本身是中立的,或者可以说是有益的。但另一方面,随着爬虫,尤其是专门爬取特定数据的聚焦爬虫,被广泛运用于各种数据获取的场景后,被爬取的服务器的压力开始剧增,如法律工作者所经常诟病的裁判文书网,其运行缓慢的很大一部分原因就是每时每刻都有大量的爬虫在对其数据进行爬取,占用了大量的访问空间。同时,爬虫还会被运用于数据搬运,损害被爬取的数据控制者的利益。爬虫的滥用导致其在现实中容易被异化为破坏网络公共秩序和数据控制者利益的工具,很多数据控制者不得不采取措施对爬虫进行限制,采取了对应的反爬措施,具体如下:
(1)信息校验反爬。信息校验可以区分网络请求,“信息”指的是客户端发起网络请求时的请求头和请求正文,而“校验”指的是服务器通过对信息的正确性、完整性或唯一性进行验证或判断,从而区分正常用户和爬虫程序的行为。[2]常见的信息校验型反爬虫手段包括User-Agent反爬虫、Cookie反爬虫、签名验证反爬虫等。
(2)数据保护反爬。在文本获取及数据提取阶段,可以通过保护数据的方式来反爬虫,这种反爬方式主要包括动态渲染和文本混淆。具有下拉刷新、点击切换和悬停显示等效果的动态网页比静态网页更具交互性,能给用户提供更好的体验。JaveScript可以实现动态网页的渲染,这个本意是增强交互功能的设计同时可以区分正常用户和爬虫程序。文本混淆是指,通过图片伪装等方式,混淆文字的图片与正常文字,从而使爬虫程序无法获得完整的文字内容。
(3)特征识别反爬。特征识别是指通过客户端的特征、属性或用户行为特点来区分正常用户和爬虫程序,排除非人工访问,这种反爬方式直接针对爬虫的“源头”。常见的方式如通过访问IP、访问频率、验证码等方式识别爬虫。
需要说明的是,反爬措施并非一个严谨学术的概念,目前也没有形成共识的定义,实践中反爬的措施也五花八门,并会随着爬虫技术的更新变换而不断发展,因此以上的列举不可能完全周延。
三、网络爬虫的限制
通过梳理爬虫技术的技术逻辑,我们会发现,爬虫本质上是一种在网络协议的框架之下,通过程序模仿人工访问的方式,自动化批量高频率获取并复制数据的技术手段。综合来看,实践中对爬虫技术的限制主要分为三个层次:1.对使用者权限的限制;2.对技术手段的限制;3.对爬取目的的限制。这些限制的实现不仅包括技术措施,还包括法律规范的作用,但法律规范的介入程度和作用可能不同,以下我们分别详细论述:
(一)对使用者权限的限制
爬虫作为人工访问的延伸,其实质是人工访问的一种辅助手段和工具,因此所有对使用者人工访问的限制,也应当同样适用于爬虫,理应无一例外。爬虫的使用者通过人工正常操作无权访问的数据,如内部业务数据,在其使用爬虫技术时,也同样应当被禁止。这是爬虫的第一层限制,即不能超越使用者本身的权限。在这一层限制中,技术措施起到基础限制作用,如设置登录密码、口令,采取保密措施以及上述反爬措施,但法律规范的作用显然更加明显,具体如下:
1.国家秘密、商业秘密、个人信息、作品等数据。对于这些数据,数据控制者显然会根据自己的利益设置一些技术措施进行保护;同时在法律层面,违反国家有关规定,对国家秘密、商业秘密、个人信息、作品等数据的获取、利用,无论使用什么样的技术手段,都是违法甚至犯罪的,爬虫自然也在规制的范围内;
2.对于非公开内部数据。对于限制了知悉范围的非公开内部数据,行为人本就无权获取,通过爬虫突破保护措施而获取这类数据的行为,其实质与违反保密规定登录内部人员账号获取数据的行为,在法律评价应当是基本一致的。
3.对于半公开数据。对于需要账户登录、验证才能获取的半公开数据,行为人未获账户所有者的同意自然无权访问,而通过爬虫技术绕过身份验证获取数据的行为,与未经他人允许使用其账号获取数据的行为(如盗取),在法律评价应当是基本一致的。
以上对爬虫的限制其实都来源于使用者,是针对 “人”的限制,这些限制无论使用者是否使用爬虫技术都是客观存在的。因此,在考虑这一层法律评价时,爬虫技术本身反而不重要了,重要的是行为人本身是否有权获取。
(二)对技术手段的限制
除了具有与人工访问相类似的性质外,爬虫作为计算机程序还具有其独特的特征,如程序可以实现对数据的自动化高速获取及下载。这样的获取方式会给正常的网络服务带来干扰和妨碍。因此,对爬虫的限制除了对于使用者权限的限制以外,还包括对爬虫这种技术手段的限制。进一步说,部分数据可能允许使用者人工访问,但却不允许使用者通过爬虫程序访问,其数据控制者可能会采取一定的措施,专门对使用者使用爬虫这种方式进行访问加以限制,抵制机器对其数据进行自动化地访问和下载。这一层限制主要是针对爬虫这种技术手段,因而往往与使用者本身的权限无关,这一层限制的实现主要依靠的是上文所述的一系列反爬措施。
除了反爬措施以外,数据控制者还会通过Robots协议来对爬虫进行限制。Robtes.txt,也称为爬虫协议、机器人协议等,全称是“网络爬虫排除标准”(RobotsExclusion Protocol),是国际互联网界为了兼顾保障搜索技术服务于人类,逐步确立起的通行的道德规范。根据《互联网搜索引擎服务自律公约》第7条的有关规定,机器人协议是一种特定的指令协议,互联网站所有者通过使用特定的计算机程序,向网络终端发送指令,网络终端再根据指令内容进行相应操作。Robots协议的主要内容为:当一个爬虫程序访问一个站点时,它会首先检查该站点根目录下是否存在robots.txt,如果存在,爬虫程序就会按照该文件中的内容来确定访问的范围;如果该文件不存在,所有的爬虫程序将能够访问网站上所有没有被口令保护的页面。[3]
无论是反爬措施还是Robots协议,都属于网络空间的自治方式,而目前法律如何介入这一过程并无清晰的答案,无论是理论上还是司法实务中,对于单纯违反反爬措施或者Robots协议的行为的规制存在较大的争议:这种行为或者相关的技术是否应当承担法律责任,承担什么性质的法律责任,在国内外都尚未形成通说定论。但笔者认为,采取一刀切的态度,认为所有突破手段限制的爬取行为均构成侵权,甚至犯罪的观点肯定是不可取的。法律介入的程度取决于数据控制的权利与数据共享义务之间的平衡,数据主体和数据控制者当然对数据享有一定的权利,但如果对这种权利采取绝对的、排他的保护方式,又会产生数据垄断,损害网络发展的核心经济价值——信息的传播与共享。但具体如何平衡是一个更为系统、更为庞大的问题,无法在本文解决。
目前有一定共识的是,如果爬取的技术手段不仅突破了反爬措施或者Robots协议,还有其他情节或者结果,则会毫无争议地落入法律的规范内。如因为使用爬取技术,造成计算机不能正常运行的,可能会触犯破坏计算机信息系统罪;如果对特殊对象,如国家事务、国防建设、尖端科学技术领域的计算机信息系统进行爬取,则会触犯非法侵入计算机信息系统罪,法律对这些机构的计算机信息系统提供了更严格的特殊保护。
(三)对爬取目的的限制
除了对使用者权限的限制、技术手段的限制之外,对爬虫的治理还体现在对爬虫的目的的限制之上。最典型的如对于一些具有商业价值的公开数据,使用者有权限获取,并可通过爬虫技术手段复制下载,但不能直接搬运在自己的平台上提供相同或类似的服务,在大众点评诉百度案[4]中,百度搬运大众点评的用户点评内容,即违反了这种目的限制。这种以搬运为目的的数据爬取行为属于不正当竞争,应受到反不正当竞争法的规范。
笔者认为,对爬取目的的限制,其核心是对爬取后利用数据的不正当竞争行为的限制,而非对爬取行为本身的限制。诸多论者并没有抓住这里的重点,误将爬虫技术本身作为不正当竞争行为认定的对象,甚至进而据此认定爬虫的社会危害性,将其上升为刑法处罚的对象。
同时,对爬取目的的限制,也并无意味着与爬取行为相关的刑法罪名如非法获取计算机信息系统数据罪中包含目的的主观构成要件要素,这是完全不同层次的问题,非法获取计算机信息系统数据罪的构成要件中不包括行为目的,其在评价时只关注爬虫技术使用行为的客观构成要件要素及故意(故意与目的不同,在此不赘述)。因此,我们在判断一个爬虫的使用行为是否构成非法获取计算机信息系统数据罪,不用考虑其爬取后的目的。
四、小结
一个行为或者一个技术在法律上应当如何定性或评价?这个问题从形式解释的角度理解,取决于其否符合社会规范,从实质解释的角度理解,取决于其是否造成了危害后果,而法律做出这一评价的基础是需要有一套为社会所广泛共识的固定成熟的规范或者价值标准,例如盗窃行为,法律将其评价为违法犯罪行为,其根源在于在大众的共同意识中,靠劳动和交易获得的财物才是正当的。而网络技术性质的判断和评价难点之一在于,对于何为正常的网络秩序和规则尚未完全找到普世性的答案,网络发展中的不同价值还在激烈的碰撞和拉扯,很多有关于网络治理的“是非观”还没有形成,此时法律的介入是谨慎克制的,也留给网络更多自治的空间。而这种“野蛮生长”的状态,也值得我们更多的思考和探索。
[1]左薇,张熹,董红娟,于梦君:“主题网络爬虫研究综述”,《软件导刊》2019年第8期,第44页.
[2]韦世东:《python3反爬虫原理与绕过实践》人民邮电出版社2020年1月第1版,第97页。
[3]游涛,计莉卉:“使用网络爬虫获取数据行为的刑事责任认定——以‘晟品公司’非法获取计算机信息系统数据罪为视角”,《法律适用》2019年10期,第6页。
[4] (2015)浦民三(知)初字第528号判决书。
以上是关于再议网络爬虫技术的主要内容,如果未能解决你的问题,请参考以下文章