潘洪敏
个人介绍:潘洪敏,2015年7月加入去哪儿。目前在大住宿事业部大前端工作,负责爬虫类型分析,反爬虫策略研发,以及反爬虫平台的开发与维护,同时负责反爬虫平台产出的数据分析,以及数据清洗工作。
前一篇我们重点说了爬虫,在这篇中,我们来说说反爬虫。
反爬虫定义
首先来了解一下什么是反爬虫:通过一些独有特征识别爬虫的技术就称为反爬虫。网上的一些反爬虫文章经常提到的验证码验证、强制登陆、数据加密等反爬虫方案,在我看来属于“马后炮”,已经是反爬虫之后要做的事情。根据反爬虫的定义,反爬虫的重点在于“识别”,正确区分爬虫与正常用户是反爬虫首先要做的事情。
反爬虫的技术随着爬虫技术的进化,也在不断的进化。初级的爬虫,我们可以根据 ua,或者 ip 频率来识别,但是稍微高级的爬虫都会做基本的伪装,且伪装成本较低。
反爬虫现状
我们很少能看到反爬虫策略相关的文章,除了一些非常简单的识别策略。这并不是说其他公司没有反爬虫,而是因为现阶段并没有制约爬虫的一劳永逸的方案,爬虫和反爬虫还是处于不断博弈的过程。公司为了延长反爬虫策略的失效时间,对反爬虫策略有保护机制。所以,反爬虫技术是不共享的。我们也有自己的反爬虫方案,并且也在保护自己的反爬虫策略。
严格上来说,反爬虫是通过技术手段来识别爬虫,但是我们会将数据保护也看做为反爬虫的一部分。所以我们将反爬虫分为爬虫识别与数据保护两个过程。爬虫识别是反爬虫的主要阶段,也是最难的部分,数据保护是对返回给客户端的数据进行的一些保护方法,避免将核心数据直接暴露在爬虫面前。
反爬虫分类
根据不同的分类标准,可以将反爬虫分为不同的类型。根据反爬位置不同,可以将反爬虫分为客户端反爬、中间层反爬、服务端反爬。根据反爬虫的实时性又可以分为实时反爬虫与非实时反爬虫。
客户端反爬虫是在前端脚本上做爬虫特征识别,但是因为爬虫会直接跳过前端脚本,直接访问接口,单纯的前端反爬虫是不太实用的。
中间层反爬虫是指,在客户端与服务器端中间增加拦截与转发,做爬虫识别之后,将正常用户放行,将爬虫拦截。相当于一个“过滤器”,能很大程度的减轻服务器的压力。并且可以服务于多业务,多服务。
服务器端反爬虫,是在服务器端做爬虫识别,只对真实用户做出反应。但是这样的反爬虫方案,不会减轻服务器的压力,并且不同的业务线都要单独反爬虫,浪费人力。
实时反爬虫,是在爬虫访问的同时进行爬虫识别,对当前爬虫进行拦截。非实时反爬虫是指,对疑似爬虫进行分析,分析之后再对相同特征的爬虫进行拦截。
我理解的反爬虫
以往提到反爬虫,大家关注的焦点一直是反爬策略。判断一个反爬策略好坏的标准也是爬虫识别率和误伤率,进而会在研发爬虫策略上花费很长的时间。殊不知,爬虫和反爬虫本身就是一场你攻我防,你防我破防的长久战。而策略的有效时间也是“反反爬虫”破解反爬虫策略的时间,一旦爬虫升级,刚花费力气研究出来的反爬虫策略也就变成失效策略。
我们必须承认,在现阶段,还没有一个一劳永逸,能永久防住爬虫的反爬虫策略。也即是说,策略有“有效期”,有效期的长短因爬取方的技术差异而异。
经常看排球的人应该常听到这样几个词:“强攻”、“快攻”、“一点攻”、“多点开花”。像中国、日本这样的亚洲国家运动员,相较于欧美国家的运动员,在身高与力量上都有较大差距,“强攻”往往没有效果,所以就会经常性地组织“快攻”,打对方个措手不起,反而能得分。若只有主攻的一点攻,一旦主攻被重点关注之后,将非常被动,想赢就必须“多点开花”,也就是必须有多个得分点。
仔细想想,对付爬虫,也需要如此。
如果我们将有效策略成为强攻,如果对手没有拦截的能力,能拿到有效得分。但是一旦强攻手被重点关注,被对方有效拦住(破解)之后,强攻点就会无效,也就是说“强攻”只能有一时的效果,失效只是时间问题。除非我们有反爬虫界的“朱婷”,拥有绝对实力的“超手”,但即使是朱婷,得分率也不可能是 100% 啊。那在“强攻”失效的时间里,有效的组织“快攻”就是我们要考虑的问题。除了防,我们还要主动出击,给对方制造陷阱,俗称“假动作”。总而言之,一个强队,是不可以有弱项的,发球,进攻,防守,拦网,哪个环节都不能弱,弱就是漏洞,就会给对方制造得分机会。
其实不论是“强攻”还是“快攻”,最主要的还是将反爬虫的过程系统化。反导弹系统不能靠手扔反导弹,我们都不是路飞他爷爷(海贼王里面的人物,可以徒手扔炸弹,威力比炮台还厉害)。必须有一个系统化的工具作为支撑,才不会每次被爬虫攻击的时候都如临大敌。如果我们将爬虫看做敌人进攻,那么岗哨(发现被爬虫攻击)要及时报警并报告警情、敌方特征。后方部队根据敌方特征排兵布阵,出击拦截。在系统化的过程中,我们必须清楚,我们面临的不是来自同一个对手的爬虫,反爬虫想保护的也不是单一的业务线,所以灵活是不可忽略的特性。
这看起来可能有点“不务正业”,因为毕竟反爬虫的核心是研究反爬虫策略,但就像前面内容所讲的,没有一个好的平台支撑,策略很难在最快的时间内生效。所以我们一手抓策略,一手抓平台,两手都要抓,两手都要硬。一个好的反爬虫平台可以解放很多的人力物力资源,各种反爬虫策略都可以维护在平台中,实现了资源共享。
所以,反爬虫是个长期过程,重点在于系统化,而不是游击战。就像上篇中提到的网站防欺诈服务商 distil network,就是一家专本致力于网站防欺诈(反爬虫)的企业,是一个系统的专业反爬虫平台。他们的反爬虫策略和平台管理属于商业机密,我们无从知晓,但是作为有敏感数据的一个在线旅游服务公司,我们需要有自己的反爬虫策略与反爬虫平台。
领取专属 10元无门槛券
私享最新 技术干货