有关于反爬策略的整理

1、限制访问频率

     针对IP、UA、设备指纹,帆布指纹(canvas)识别和FingerPrint  (https://www.jianshu.com/p/6c41658f9cb7

设备指纹技术

设备指纹是可以用于唯一标识出该设备的设备特征,设备指纹应用平台主要为手机、Pad、PC等互联网设备。设备指纹技术实现方式分为三种:主动式、被动式、混合式。

主动式设备指纹采集技术

主动式指主动采集设备上固有的、较难篡改的、唯一的设备标识作为设备指纹,用于唯一标识该台设备。

这类设备标识统称为采集要素,如设备IMEI,MAC等,为保证设备指纹采集技术的准确性和唯一性,需要使用多个采集要素,将这些信息组合起来使用特定的Hash算法得出设备指纹ID值。同时,考虑到设备指纹的稳定性,一般还会结合其他的持久化的存储技术,将设备指纹ID长期保存起来。

采集要素:

表一 设备指纹Andorid端采集要素

要素名称

采集字段名称

IMEI

国际移动设备识别码

IMSI

国际移动用户识别码

DeviceID

设备ID

MAC

MAC地址

MemoryInfo

系统内存信息

CPU_ABI

设备指令集名称

 

表二 设备指纹PC端采集要素

要素名称

采集字段名称

CPUID

CPUID操作码

SERIALNUMBER

硬盘序列号

ProductId

Windows的产品ID

MachineGUID

Windows安装时会唯一生成一个GUID

UUID

主板UUID

混合式设备指纹采集技术

混合式即既有主动采集部分,又有服务端算法生成部分。

主动去采集要素,并与服务端交互,通过算法混淆加密后,在服务端生成唯一的设备指纹识ID,同时写入唯一ID存于缓存中。

一定时间内,用户再次使用对应业务时,无需大量重新上传采集要素,只需比对要素变化比例,通过加权比对,计算得出置信度数值,并通过阈值判断是否重新生成设备指纹码。正常用户在使用时理论上是无感知且很少会主动篡改设备指纹唯一ID。

混合式设备指纹技术克服了主动式设备指纹和被动式设备指纹技术各自的固有的缺点,在准确识别设备的同时扩大了设备指纹技术的适用范围。

 

2、登录限制

3、Heaher 封杀

4、JavaScript脚本动态获取网站数据

       有一些网站(尤其是单页面网站)的内容并不是通过服务器直接返回的,而是服务器只返回一个客户端JavaScript程序,然后JavaScript获取内容。更高级的是,JavaScript在本地计算一个token,然后拿这个token来进行AJAX获取内容。而本地的JavaScript又是经过代码混淆和加密的,这样我们做爬虫的通过看源代码几乎不可能模拟出来这个请求(主要是token不可能破解),但是我们可以从另一个角度:headless的浏览器,也就是我们直接运行这个客户端程序,这可以100%地模拟真实用户!

备注:帆布指纹(canvas)识别和FingerPrint,主要考虑navigator 下的字段。

例子:携程旅行

      访问页面时会下发一段JS脚本,通过这个脚本计算出一个token,访问服务时带上来验证token,通过JS混淆以及重写JS 编译执行器使得爬虫很难破解。

5、验证码

这几乎是终极武器了,验证码是专门用来区分人和计算机的手段。对于反爬方来说,这种方式对真实用户和搜索引擎(其实可以通过记录搜索引擎爬虫的ip来区别对待,可以解决)的危害比较大,相信读者都有输入验证码的痛苦经历。但这种方法也并不是无敌的!通过现在很火的机器学习可以轻松的识别大部分的验证码!Google的reCAPTCHA是一种非常高级的验证码,但是听说通过模拟浏览器也是可以破解的。

6、ip限制

7、网站内容反爬

有一些网站将网站内容用只有人类可以接收的形式来呈现(其实反爬就是区别对待人类和机器嘛)。比如将内容用图片的形式显示。但是近几年来人类和机器的差别越来越小,图片可以用OCR准确率非常高地去识别。

7.1  FONT-FACE拼凑式

例子:猫眼电影

猫眼电影里,对于票房数据,展示的并不是纯粹的数字。
页面使用了font-face定义了字符集,并通过unicode去映射展示。也就是说,除去图像识别,必须同时爬取字符集,才能识别出数字。

在网站中,我们只需要保证正常人看到的信息是正常的即可,所以在保证前端显示一致的情况下,源码可以是任何东西。字体反爬即是如此,前端显示的是一回事,源码显示的又是另一回事。


在这里插入图片描述
使用方法:

1 下载一个字体编辑工具,例如 FontCreator
2 打开一个字体,使用其他的图片代替关键的字,可以复制其他字形到覆盖上去,如下图是将 !覆盖到了3、4、5、6 的位置,那么在前端中,这几个数字将显示为 !
在这里插入图片描述
3 前端引用字体。至于要怎么样随机字体,就看个人需求了。

@font-face {
    font-family: 'Arial g';
    src: url("{% static 'fonts/arial.ttf' %}");
}

.xxx {font-family: 'Arial g'}

7.2 BACKGROUND拼凑式

例子:美团

与font的策略类似,美团里用到的是background拼凑。数字其实是图片,根据不同的background偏移,显示出不同的字符。

7.3 元素定位覆盖式

例子:去哪儿

还有热爱数学的去哪儿,对于一个4位数字的机票价格,先用四个i标签渲染,再用两个b标签去绝对定位偏移量,覆盖故意展示错误的i标签,最后在视觉上形成正确的价格…

7.4 字符集替换式

例子:去哪儿移动侧

同样会欺骗爬虫的还有去哪儿的移动版。

html里明明写的3211,视觉上展示的却是1233。原来他们重新定义了字符集,3与1的顺序刚好调换得来的结果…

 

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值