常见三大反爬方向

1、身份识别

(1)headers字段

  • User-Agent字段
    反爬原理:爬虫默认情况下没有User-Agent,而是使用模块默认设置
    解决方法:请求之前添加User-Agent即可,最好使用User-Agent池来解决

  • 可使用fake-useragent模块自动生成,官方文档:http://useragentstring.com/

  • 用户代理字符串列表:http://useragentstring.com/pages/useragentstring.php![img](https://cdn.nlark.com/yuque/0/2023/png/22414596/1673451087366-cb78318c-b536-4a7b-86e0-78e107a5e888.png)

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

  • 如果请求头有带referer字段,添加上即可
    img

  • cookie
    反爬原因:通过检查cookies来查看发起请求的用户是否具备相应权限,以此来进行反爬
    解决方案:1、成功获取cookies之后模拟登录;2、通过post请求携带data模拟登录

  • 方法1:先登录,获取cookies之后模拟登录
    img

  • 方法2:通过post请求携带data模拟登录
    img

(2)请求参数

  • html静态文件
    反爬原因:请求参数为某个html文件内的参数
    解决方案:利用search寻找相关html静态文件
  • 发送请求
    反爬原因:请求参数为已发送请求包的返回参数
    解决方案:利用search寻找相关包
  • js生成
    反爬原理:js生成请求参数
    解决方法:分析js,观察加密的实现过程,通过js2py获取js的执行结果
  • 验证码
    反爬原理:通过弹出验证码强制验证
    解决方法:连接打码平台API或者使用机器学习的方法识别验证码

2、爬虫行为

(1)请求频率

  • 同一ip/账号单位时间内总请求数量
    反爬原理:同一个ip/账号大量请求对方服务器,会被识别为爬虫
    解决方法:1、使用多ip代理(最好是高匿代理),搭建ip代理池;2、使用多账号
  • 同一ip/账号请求间隔
    反爬原理:请求间隔固定或请求时间间隔较短,会被识别为爬虫
    解决方法:1、使用randam随机函数获取随机请求间隔,模拟真实用户操作;2、使用多ip代理(最好是高匿代理),搭建ip代理池;3、使用多账号,账号请求之间设置随机休眠
  • 同一ip/账号每日请求次数
    反爬原理:日请求次数超过服务器设定值,服务器拒绝响应
    解决方法:1、使用多ip代理(最好是高匿代理),搭建ip代理池;2、使用多账号

(2)爬取过程

  • js跳转
    反爬原理:通过js实现页面跳转,无法在源码中获取下一页url
    解决方法:抓包跳转后的页面,获取对应请求的url,分析其规律
  • 陷阱
    反爬原理:设置容易被爬虫语法规则获取的陷阱url,但正常用户无法获取,有效区分爬虫和正常用户
    解决方法:仔细分析响应内容结构,找出页面中存在的陷阱
  • 假数据
    反爬原理:向返回的响应中添加假数据污染数据库
    解决方法:核对数据库中数据同实际页面中数据的对应情况
  • 阻塞任务队列
    反爬原理:通过生成大量垃圾url,从而阻塞任务队列,降低爬虫的实际工作效率
    解决方法:观察运行过程中请求响应状态,仔细分析源码,获取垃圾url生成规则,对url进行过滤
  • 阻塞网络IO
    反爬原理:发送请求获取响应的过程实际上就是下载的过程,在任务队列中混入一个大文件的url,当爬虫在进行该请求时将会占用网络IO,如果是有多线程则会占用线程
    解决方法: 观察爬虫运行状态,对请求线程计时
  • 运维平台综合审计
    反爬原理:通过运维平台进行综合管理,通常采用复合型反爬虫策略,多种手段同时使用
    解决方法: 根据上面的解决方案多方面处理

3、数据加密

(1)数据特殊化处理

  • 自定义字体
    反爬思路: 使用自有字体文件
    解决思路:1、切换到手机版再进行分析;2、解析字体再进行翻译

  • 例:猫眼电影评分
    img

  • 方法1. 切换到手机版后,字体可以直接获取img

  • 方法2. 找到对应文件进行字体解析
    img

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

  • 例:去哪儿网
    img

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

  • 例:登录时,post请求的password为加密数据img

  • 数据图片化
    反爬原理:通过图片展示数据
    解决思路:通过使用图片解析引擎从图片中解析数据

  • 编码格式
    反爬原理: 不使用默认编码格式(通常爬虫使用utf-8格式进行解码)
    解决思路:根据源码尝试多种格式解码