反爬与反反爬(一)

四、反爬与反反爬

1.服务器反爬原因
  • 爬虫占总PV(就是页面的访问次数,每打开或刷新一次页面就算作一个pv)较高,浪费资源
  • 公司可免费查询的资源都被批量抓走,丧失竞争力
  • 爬虫属于法律的一个灰色地带,状告爬虫成功的机率很小
2.服务器常反什么样的爬虫
  • 十分低级的应届毕业生
  • 十分低级的创业小公司
  • 不小心写错了没人去停止的失控小爬虫
  • 成型的商业对手
  • 抽风的搜索引擎
3.反爬虫领域常见的一些概念
  • 爬虫:使用任何技术手段,批量获取网站信息的一种方式。关键在于批量。
  • 反爬虫:使用任何技术手段,阻止别人批量获取自己网站信息的一种方式,关键也在于批量。
  • 误伤:在反爬虫的过程中,错误的将普通用户识别为爬虫。误伤率高的反爬虫策略,效果再好也不能用。
  • 拦截:成功的阻止爬虫访问。这里会有拦截率的概念。通常来说,拦截率越高的反爬虫策略,误伤的可能性就越高。因为需要做个权衡。
  • 资源:机器成本与人力成本的总和。

这里要知道,人力成本也是资源,而且比机器更重要。因为根据摩尔定律,机器越来越便宜。而根据IT行业的发展趋势,程序员越来越贵。因此,通常服务器反爬就是让爬虫工程师加班才是王道,机器成本并不是特别值钱。

4.反爬的三个方向
  • 基于身份识别进行反爬
  • 基于爬虫行为进行反爬
  • 基于数据加密进行反爬
5.常见基于身份识别进行反爬
1.通过headers字段来反爬

1.1通过headers中的User-Agent字段来反爬

  • 反爬原理:爬虫默认情况下没有User-Agent,而是使用模块默认设置
  • 解决方法:请求之前添加User-Agent即可;更好的方式是使用User-Agent池来解决(收集很多User-Agetn的方式,或是随机生成User-Agent)

1.2通过referer字段或者其他字段来反爬

  • 反爬原理:爬虫默认情况下不会带上referer字段,服务器通过判断请求发起的源头,以此判断请求是否合法。
  • 解决方法:添加referer字段即可

1.3通过cookie来反爬

  • 反爬原因:通过检查cookies来查看发起请求的用户是否具备相应权限,以此来进行反爬
  • 解决方法:进行模拟登录,成功获取cookies后再进行数据爬取
2.通过请求参数来反爬

请求参数的获取方法有很多,向服务器发送请求,很多时候需要携带i请求参数,通常服务器就可以通过检查请求参数是否正确来判断是否为爬虫。

2.1通过从html静态文件中获取请求数据(github登录数据)

  • 反爬原因:通过增加获取请求参数的难度进行反爬
  • 解决方法:仔细分析抓包得到的每一个包,搞清楚之间的联系

2.2通过发送请求获取请求数据

  • 反爬原因:仔细增加获取请求参数的难度进行反爬
  • 解决方法:仔细分析抓包得到的每一个包,搞清楚之间的联系,搞清楚请求参数的来源

2.3通过js生成请求参数

  • 反爬原理:js生成了请求参数
  • 解决方法:分析js,观察加密的实现过程,通过hs2py获取js的执行结果,或这使用senlnium来实现

2.4通过验证码来反爬

  • 反爬原理:对方服务器通过弹出验证码强制验证用户浏览行为
  • 解决方法:打码平台或者机器学习的方法识别验证码,其中打码平台廉价易用,更值得推荐。
6.常见基于爬虫行为进行反爬
1.基于请求频率或总请求数量

爬虫的行为与普通用户有很明显的区别,爬虫的请求频率与请求次数远高于普通用户

1.1通过请求ip/账号单位时间内总请求数量进行反爬

  • 反爬原理:正常浏览器请求网站,速度不会太快,同一个ip/账号大量请求了对方服务器,有很大可能被识别为爬虫
  • 解决方法:对应的通过购买高质量的ip的方式能够解决问题/购买多个账号

1.2通过同一ip/账号请求之间的间隔进行反爬

  • 反爬原理:正常人操作浏览器浏览网站,请求之间的时间间隔是随机的,而爬虫前后的请求之间的时间间隔通常比较固定同时时间间隔较短,因此可以用来做反爬。
  • 解决方法:请求之间进行随机等待,模拟真实用户操作,在添加时间间隔后,为了能够高速获取数据,尽量的使用代理池,如果是账号,则将账号请求之间设置随机休眠

1.3通过对请求ip/账号每天请求次数设置阈值进行反爬

  • 反爬原理:正常的浏览行为,其一天的请求次数是有限的,通常超过一个值,服务器就会拒绝相应
  • 解决方法:对应的通过购买高直亮的ip的方法/多账号,同时设置请求间随机休眠
2.根据爬取行为进行反爬,通常在爬取步骤上做分析

2.1通过js实现跳转来反爬

  • 反爬原理:js实现页面跳转,无法在源码中获取下一页url
  • 解决方法:多次抓包获取条状url,分析规律

2.2通过蜜罐(陷阱)获取爬虫ip(或者代理ip),进行反爬

  • 反爬原理:在爬虫获取链接进行请求的过程中,爬虫会根据正则,xpath、css等方式进行后续链接的提取,此时服务器可以设置一个陷阱url,会被提取规则获取,但是正常用户无法获取,这样就能够有效区分爬虫和正常用户。
  • 解决方法:完成爬虫的编写之后,使用代理批量爬取测试/仔细分析相应内容结构,找出页面中存在的陷阱

2.3通过假数据反爬

  • 反爬原理:向返回的响应中添加假数据午饭数据库,通常假数据不会被正常用户看到
  • 解决方法:长期运行,核对数据库中数据同实际页面中数据对应情况,如果存在问题/仔细分析响应内容

2.4阻塞任务队列

  • 反爬原理:通过生成大量垃圾url,从而阻塞任务队列,降低爬虫的实际工作效率
  • 解决方法:观察运行过程中请求响应状态/仔细分析源码获取垃圾url生成规则,对URL进行过滤。

2.5阻塞网络IO

  • 反爬原理:发送请求获取响应的过程实际上就下载的过程,在任务队列中混入一个大文件的url,当怕爬虫进行该请求时将会占网络io,如果是多线程则会占用线程
  • 解决方法:观察爬虫运行状态/多线程对请求线程计时/发送请求前

2.6运维平台综合审计

  • 反爬原理:通过运维平台进行综合管理,通常采用复合型反爬策略,多种手段同时使用
  • 解决方法:仔细观察分析,长期运行测试目标网站,检查数据采集速度,多方面处理。
7.常见基于数据加密进行反爬
7.1对响应中含有的数据进行特殊化处理

通常的特殊化处理主要指的就是css数据便宜/自定义字体/数据加密/数据图片/特殊编码格式等

7.1通过自定义字体来反爬
  • 反爬原理:使用自有字体文件
  • 解决方法:切换到手机版/解析字体文件进行翻译
7.2通过css来反爬
  • 反爬原理:源码数据不是真正数据,需要通过css位移才能产生真正数据
  • 解决方法:计算css的偏移
7.3通过js动态生成数据进行反爬
  • 反爬原理:通过js动态生成
  • 解决方法:解析关键js,获得数据生成流程,模拟生成数据
7.4通过图片化数据反爬
  • 反爬原理:做成了一个图片,无法通过.text来获取了
  • 解决方法:通过使用图片解需引擎从图片中解析数据
7.5通过编码格式进行反爬
  • 反爬原理:不适用与默认编码格式,在获取响应之后通常爬虫使用utf-8格式进行编码,此时编码结果将会是乱码或是报错
  • 解决方法:根据源码进行多格式解码,或者真正的解码格式
  • 1
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值