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

从防盗链说起

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

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

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

人,都是自私的

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

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

一碗水端不平

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

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

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

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

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

展开博弈

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

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

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

感慨

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

幻想

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

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

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

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

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

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

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

《C# 爬虫 破境之道》:第二境 爬虫应用 — 第六节:反爬策略研究的更多相关文章

  1. Python爬虫实践 -- 记录我的第二只爬虫

    1.爬虫基本原理 我们爬取中国电影最受欢迎的影片<红海行动>的相关信息.其实,爬虫获取网页信息和人工获取信息,原理基本是一致的. 人工操作步骤: 1. 获取电影信息的页面 2. 定位(找到 ...

  2. python爬虫---详解爬虫分类,HTTP和HTTPS的区别,证书加密,反爬机制和反反爬策略,requests模块的使用,常见的问题

    python爬虫---详解爬虫分类,HTTP和HTTPS的区别,证书加密,反爬机制和反反爬策略,requests模块的使用,常见的问题 一丶爬虫概述       通过编写程序'模拟浏览器'上网,然后通 ...

  3. python爬虫--爬虫与反爬

    爬虫与反爬 爬虫:自动获取网站数据的程序,关键是批量的获取. 反爬虫:使用技术手段防止爬虫程序的方法 误伤:反爬技术将普通用户识别为爬虫,从而限制其访问,如果误伤过高,反爬效果再好也不能使用(例如封i ...

  4. 《C# 爬虫 破境之道》:第二境 爬虫应用 — 第二节:以事件驱动状态、数据处理

    续上一节内容,对Web爬虫进行进一步封装,通过委托将爬虫自己的状态变化以及数据变化暴露给上层业务处理或应用程序. 为了方便以后的扩展,我先定义一个蚂蚁抽象类(Ant),并让WorkerAnt(工蚁)继 ...

  5. 《C# 爬虫 破境之道》:第二境 爬虫应用 — 第一节:HTTP协议数据采集

    首先欢迎您来到本书的第二境,本境,我们将全力打造一个实际生产环境可用的爬虫应用了.虽然只是刚开始,虽然路漫漫其修远,不过还是有点小鸡冻:P 本境打算针对几大派生类做进一步深耕,包括与应用的结合.对比它 ...

  6. 《C# 爬虫 破境之道》:第二境 爬虫应用 — 第三节:处理压缩数据

    续上一节内容,本节主要讲解一下Web压缩数据的处理方法. 在HTTP协议中指出,可以通过对内容压缩来减少网络流量,从而提高网络传输的性能. 那么问题来了,在HTTP中,采用的是什么样的压缩格式和机制呢 ...

  7. 《C# 爬虫 破境之道》:第一境 爬虫原理 — 第二节:WebRequest

    本节主要来介绍一下,在C#中制造爬虫,最为常见.常用.实用的基础类 ------ WebRequest.WebResponse. 先来看一个示例 [1.2.1]: using System; usin ...

  8. 《C# 爬虫 破境之道》:第二境 爬虫应用 — 第四节:小说网站采集

    之前的章节,我们陆续的介绍了使用C#制作爬虫的基础知识,而且现在也应该比较了解如何制作一只简单的Web爬虫了. 本节,我们来做一个完整的爬虫系统,将之前的零散的东西串联起来,可以作为一个爬虫项目运作流 ...

  9. 《C# 爬虫 破境之道》:第二境 爬虫应用 — 第五节:小总结带来的优化与重构

    在上一节中,我们完成了一个简单的采集示例.本节呢,我们先来小结一下,这个示例可能存在的问题: 没有做异常处理 没有做反爬应对策略 没有做重试机制 没有做并发限制 …… 呃,看似平静的表面下还是隐藏着不 ...

随机推荐

  1. 基于 HTML5 WebGL + WebVR 的 3D 虚实现实可视化系统

    前言 2019 年 VR, AR, XR, 5G, 工业互联网等名词频繁出现在我们的视野中,信息的分享与虚实的结合已经成为大势所趋,5G 是新一代信息通信技术升级的重要方向,工业互联网是制造业转型升级 ...

  2. Spring Boot2 系列教程 (四) | 集成 Swagger2 构建强大的 RESTful API 文档

    前言 快过年了,不知道你们啥时候放年假,忙不忙.反正我是挺闲的,所以有时间写 blog.今天给你们带来 SpringBoot 集成 Swagger2 的教程. 什么是 Swagger2 Swagger ...

  3. .net core 2.2 中IHttpClientFactory的使用

    在.net core中使用HttpClient请求api,有很多资源的问题,比如使用using的时候,虽然可以释放资源,但是套接字(socket)也不会立即释放,所以.net core2.1中,新增了 ...

  4. Mysql.复选条件的查询

    场景:有筛选条件 联盟:1.复联 2.正义联盟 3.猛禽小队,条件可多选,求查询结果. name league 飞人 复联,正义联盟 黑人 复联,正义联盟,猛禽小队 打手枪的男人 复联,猛禽小队 深井 ...

  5. [转载收藏]C#基础知识梳理系列十一:垃圾回收机制

    摘 要 基于.NET平台的开发语言中,最让开发人员爽的一点就是垃圾回收处理机制,在编码过程中,终于可以解放你的双手来关注更重要的事情.很多的资料中在讲到.NET中的垃圾回收机制时都说"CLR ...

  6. Win10如何关闭最近使用文件夹

    如果默认开启了最近使用文件夹功能的话,最近浏览的文件就会被记录下来.所以看完各种教学资料后,并不是关掉或者重启别人就不知道你看了什么. 方法一: Win10怎么关闭最近使用文件夹 如何清理使用痕迹 从 ...

  7. SpringDataRedis入门到实战

    1.项目常见问题思考 对于电商系统的广告后台管理和广告前台展示,首页每天有大量的人访问,对数据库造成很大的访问压力,甚至是瘫痪.那如何解决呢?我们通常的做法有两种:一种是数据缓存.一种是网页静态化.我 ...

  8. AVLtree(C++实现)有统一的旋转操作

    在学习完AVLtree之后,我发现,左旋,右旋均可以采用统一的旋转方式来实现,所以把代码贴在下面 代码是完整的AVLTree实现 C++标准为C++11 在ubuntu 18.04下通过编译和调试 / ...

  9. 简单的在jsp页面操作mysql

    ---恢复内容开始--- 上一篇讲了在DOS界面下操作mysql 现在我们来说说怎么在jsp页面中操作mysql 要用jsp页面操作mysql需要jdbc(不是非要jdbc,还有其他的) 下载地址:w ...

  10. 小白学Java:RandomAccessFile

    目录 小白学Java:RandomAccessFile 概述 继承与实现 构造器 模式设置 文件指针 操作数据 读取数据 read(byte b[])与read() 追加数据 插入数据 小白学Java ...