《C# 爬虫 破境之道》:第二境 爬虫应用 — 第六节:反爬策略研究

之前的章节也略有提及反爬策略,本节,我们就来系统的对反爬、反反爬的种种,做一个了结。

从防盗链说起

自从论坛兴起的时候,网上就有很多人会在论坛里发布一些很棒的文章,与当下流行的“点赞”“分享”一样,很多人都会因为“欣赏”而选择“转发”到各大论坛。今时今日,我们大多数人在转载他人文章时,还会特别注明“转载自xxx”,可在以前,人们的意识还没有那么强,那时,在线播放的视频资源还是比较少的,转载的难度不高,手段也比较粗糙,仅凭复制粘贴就可以转载大部分的资源,导致优秀的作品很难找到出处,甚至搜索引擎前三页都没有原创作者及其发布的论坛的信息。这就导致原创作者及论坛站长们的极度不满。很快,站长们就研究出了各种各样的防盗链技术,其中,最常见使用最广泛的就是图片资源的防盗链技术。

它的实现原理,其实也很简单,其实就是检查请求头(headers)里的referer字段的值,来判断的。这里对防盗链策略的攻防不做过多的阐述,引一篇文章,大家大概了解一下原理即可。

由此可以看出,防盗链的产生,可以说是最原始的反“扒”策略了,正式拉开“爬”与“反爬”战争的序幕。

人,都是自私的

随着互联网日益繁荣,内容、资源也日渐丰富多采,对于那些没有资源在手的人来说,他们也已经不再满足于简单的摘抄了,毕竟手工操作,成本太高、效率太低了,也很难及时发现新鲜热点资源,但又极度渴望。

于是,面向大众的草根爬虫系统诞生了。为什么要说是“面向大众”的呢,我这里想作一个区分,其实,普遍意义上的爬虫,并不是在这时才诞生的,想想我们之前章节介绍的爬虫原理,不难猜测出,第一只爬虫,很可能就是伴随着浏览器的诞生而诞生的,浏览器不就是爬虫么!而浏览器的诞生,可要早的多的多。然而,全球最大的爬虫,恐怕要算是搜索引擎了,也要比这些草根爬虫出生的更早。

一碗水端不平

对于大部分资源主,面对大爬虫“搜索引擎”是持欢迎的态度的,甚至还绞尽脑汁的优化SEO、提升搜索排名,生怕被搜索引擎落下。当然,他们似乎也默契的达成了某种“君子协议”——robots协议,这里引用百度百科的词条,有兴趣的可以深度了解一下:)

但是对于草根爬虫的姿态可就没那么优雅了,想尽办法,生出各种反爬策略来阻止、阻挠、限制草根爬虫的肆意生长:(

当然了,这碗水端不平,是完全可以理解的:

对于非资源主来说,他们又非常渴望这些优势资源,有的是他们没有能力获取的,有的是他们没有权力获取的,但他们又有着各自的目的,比如:股票分析、科学研究等,没有资源,就等于没有根基,而握有资源的资源主,可能又不向这个方向发展,这就更加使得非资源主想要得到如此资源的迫切程度超乎一切;

对于资源主来说,一方面,他们不希望优势资源被普及,垄断才是他们的期望,比如,某友圈、某博;另一方面,他们也不得不考虑如果童叟无欺的面向草根爬虫开发资源,那么,带来的(身心及服务器)压力都是巨大的,能不能挺得住,尚未可知……

展开博弈

既然是技术型文章,下面就从技术的角度拉一个表单,列举出我所能想到的以及常见反爬与反反爬策略:

常见反爬与反反爬策略
反爬策略 反反爬策略
限制、过滤Referer   伪造、清除Referer
Cookies验证   保留、伪造必要Cookie,删除非必要Cookie
User-Agent   随机分配模拟User-Agent
匿名帐户访问限制   模拟注册帐户、模拟登录,伪造Cookie或Token
限制同一IP的访问频率   拉大访问间隔,降低访问频率,使用代理(池)
图形识别、文字、数字、字母图片识别验证码   手工打码、打码平台、OCR
滑动验证码   JS模拟
手机验证码   号商
语音验证码   号码识别、语音识别、播放录音
用户行为检测   模拟真实用户行为轨迹,避免广度优先,选择深度优先
接口加密、数据加密、HTTPS   没有固定策略、通用策略
其他更为复杂的反爬策略   自动化测试方式、脚本
终极反爬策略   手动采集 T_T

 表格中列出了大部分常见的反爬及反反爬策略。随着反爬策略的升级,反反爬的难度也是日益提升。

感慨

从事爬虫这么多年,感慨颇多。双方在这场博弈中,斗智斗勇,也是两败俱伤,各自徒升成本不说,还胜负难料。

幻想: 

既然资源可以被看得到摸得着,那么,它就不是保密资源,既然不是保密资源,资源主又何苦死抱着不放。曾几何时,谁又能想到,软件项目居然可以开源,时下开源项目如此繁荣,是软件行业的一大幸事。资源主何时能想明白这件事,就像博客园如此火爆的社区,每日的更新也不过1~2千,反爬策略再严格,魔高一尺、道高一丈,再不济,多加几个人,人工采集也可以跟得上。但,这不是科学的发展、人类的进步的体现,这是一个恶性的循环。

大胆的幻想一个良性循环的圈子,资源主与草根爬虫也可以搭建一个“君子协议”啊,资源主可以以提供数据接口的方式,将数据开放,草根爬虫根据协议,获取所需数据。当然,资源主可以对数据进行付费、免费的划分,甚至是高价低价的划分,玩法花样颇多。这样,资源主也不必劳心劳神的处处提防,徒增烦恼与成本。草根爬虫也不必花费高昂的代价去获取资源。

而且,现在的云平台,鼓吹各种服务上云,是,水龙头都上云了,可惜拧开一看,没水……只有数据上云,那才能称得上是真正的云平台,才能真正的符合云平台的理念,也才能真正的体现云平台的价值。

资源主也可以依托云平台,将数据服务与主要业务分离,压力转移到云平台,这样,也不用担心草根爬虫聚集造成的正常业务受到影响了。

对于非资源主来说,无论出于什么目的,使用什么手段,获取他人数据,都会带来很多成本(开发成本、设备成本、维护成本)还有可能伴随着反爬策略升级、资源方间歇性掉线,中间造成数据断档,想要实现一个长期稳定的业务线,也是无比困难,苦不堪言。何不直接以此成本,购买一个安心的服务呢。

在资源平等时,想要取胜,拼得就是服务了,而服务的不断提升,这才是将社会推向新发展的方向:)

 

 

喜欢本系列丛书的朋友,可以点击链接加入QQ交流群(994761602)【C# 破境之道】
方便各位在有疑问的时候可以及时给我个反馈。同时,也算是给各位志同道合的朋友提供一个交流的平台。
需要源码的童鞋,也可以在群文件中获取最新源代码。

posted @ 2020-02-19 13:03  MikeCheers  阅读(1128)  评论(3编辑  收藏  举报