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

从防盗链说起

自从论坛兴起的时候,网上就有很多人会在论坛里发布一些很棒的文章,与当下流行的“点赞”“分享”一样,很多人都会因为“欣赏”而选择“转发”到各大论坛。今时今日,我们大多数人在转载他人文章时,还会特别注明“转载自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. 全网最详细的Linux命令系列-sed文本处理命令

    Sed简介 SED是一个非交互式文本编辑器,它可对文本文件和标准输入进行编辑,标准输入可以来自键盘输入.文本重定向.字符串.变量,甚至来自于管道的文本,与VIM编辑器类似,它一次处理一行内容,Sed可 ...

  2. NetCore下的log4

    https://www.cnblogs.com/zhangxiaoyong/p/9463791.html 这一篇也不错 .NET常用的日志组件有NLog.Log4net等,.NET CORE下微软也自 ...

  3. 设置java启动项目

    1,

  4. mysql 向字段添加数据或者删除数据

    UPDATE table SET cids = CONCAT(cids , ',12') where id=id //向字段添加数据 //因为要用逗号分隔 所以在在前面加了一个逗号 UPDATE ta ...

  5. python 文件监听

    对文件进行监听.过滤 def tail(filename): f = open(file=filename, mode='r', encoding='utf-8') # 打开文件不能用with,因为监 ...

  6. 9、python判断语句与循环语句

    前言:本文主要介绍python判断语句与循环语句,包括if语句.while循环.for循环.range函数. 一.if语句  关键字:if.elif.else,写法如下: # if if 条件: # ...

  7. kuangbin专题专题十一 网络流 Dining POJ - 3281

    题目链接:https://vjudge.net/problem/POJ-3281 题目:有不同种类的食物和饮料,每种只有1个库存,有N头牛,每头牛喜欢某些食物和某些饮料,但是一头牛 只能吃一种食物和喝 ...

  8. 【WPF学习】第十九章 控件类

    WPF窗口充满了各种元素,但这些元素中只有一部分是控件.在WPF领域,控件通常被描述为与用户交互的元素——能接收焦点并接受键盘或鼠标输入的元素.明显的例子包括文本框和按钮.然而,这个区别有时有些模糊. ...

  9. Python学习,第二课 - 字符编码

    关于字符编码 python解释器在加载 .py 文件中的代码时,会对内容进行编码(默认ascill) ASCII(American Standard Code for Information Inte ...

  10. airtest启用本地python环境的方法

    实现目标,air如果想引用第三方python库,则需要在本地python欢迎执行运行 1.打开设置,红色箭头处,选择本地python路径 2.安装air的两个核心库airtest和pocoui 安装方 ...