爬虫笔记总结(开篇)

服务器反爬的原因

  • 爬虫占用PV较高,浪费资源(PV是指页面访问次数)
  • 资源被批量抓走,丧失竞争能力
  • 法律灰色地带

服务器常反什么样的爬虫

  • 十分低级的应届毕业生
  • 十分低级的创业公司
  • 不小心写错没人去停止的失控小爬虫
  • 成型的商业竞争对手
  • 抽风的搜索引擎

反爬领域常见概念

  • 爬虫:使用任何手段,批量获取网站信息的一种方式,关键在于批量
  • 反爬虫:使用任何技术,阻止别人批量获取自己网站信息的一种方式,关键也在于批量
  • 误伤:反爬过程中,错误的将普通用户识别为爬虫。误伤率高的反爬策略,效果再好也不能使用
  • 拦截:成功的阻止爬虫访问。这里会有拦截率的概念,通常来说,拦截率越高的反爬虫策略,误伤可能性越高,因此需要做好权衡
  • 资源:机器成本和人力成本总和

反爬的三个方向

基于身份识别的反爬

1、通过headers中的User-Agent字段进行反爬
  • 反爬原理:爬虫默认情况下是没有User-Agent,而是使用模块默认设置的
  • 解决方法:请求之前添加User-Agent即可,更好的方式是使用User-Agent池来解决(收集一堆User-Agent方式,或者使用随机生成User-Agent)
2、使用referer字段或者其他字段来进行反爬
  • 反爬原理:默认情况下不会带上reterer字段(或者其他字段),服务器通过判断请求的源头,以此请求是否合法
  • 解决方式:检查用户端发起方式,进行模仿用户
3、通过cookie、session、token(身份认证Authorzation)来进行反爬
  • 反爬原理:通过检查用户身份信息是否具备相应权限,来此进行反爬
  • 解决方式:进行模拟登陆,获取身份信息

总结:
headers(User-Agent、 referer、 cookies)
请求参数(html文件提取、发送请求获取、通过js生成、通过验证码)

基于爬虫行为进行反爬

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 运维平台综合审计

  • 反爬原理:通过运维平台进行综合管理,通常采用复合型反爬虫策略,多种手段同时使用
  • 解决方法: 仔细观察分析,长期运行测试目标网站,检查数据采集速度,多方面处理

基于数据加密进行反爬

1 对响应中含有的数据进行特殊化处理

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

1.1 通过自定义字体来反爬
下图来自猫眼电影电脑版
爬虫笔记总结(开篇)_第1张图片

  • 反爬思路: 使用自有字体文件
  • 解决思路:切换到手机版/解析字体文件进行翻译

1.2 通过css来反爬
下图来自猫眼去哪儿电脑版
爬虫笔记总结(开篇)_第2张图片

  • 反爬思路:源码数据不为真正数据,需要通过css位移才能产生真正数据
  • 解决思路:计算css的偏移

1.3 通过js动态生成数据进行反爬

  • 反爬原理:通过js动态生成
  • 解决思路:解析关键js,获得数据生成流程,模拟生成数据

1.4 通过数据图片化反爬

  • 58同城短租](https://baise.58.com/duanzu/38018718834984x.shtml)
  • 解决思路:通过使用图片解析引擎从图片中解析数据

1.5 通过编码格式进行反爬

  • 反爬原理: 不适用默认编码格式,在获取响应之后通常爬虫使用utf-8格式进行解码,此时解码结果将会是乱码或者报错
  • 解决思路:根据源码进行多格式解码,或者真正的解码格式

小结

  • 掌握 常见的反爬手段、原理以及应对思路

你可能感兴趣的:(爬虫,爬虫,笔记)