概念引入:

PV:pv是pageview的缩写,即页面浏览量,通常是衡量一个网络新闻频道或网站甚至一条网络新闻的主要指标。网页浏览数是评价网站流量最常用的指标之一。

爬虫的目的是使用程序技术手段大批量获取网站信息的一种方式,其页面资源请求和爬取对于站长企业或者商家来说是大量无用的PV和服务器带宽资源消耗

反爬虫:使用任何技术手段,阻止别人批量获取自己网站信息的一种方式。关键也在于批量。

反爬的三种常见方法

  • 基于身份识别进行反爬

  • 基于爬虫行为进行反爬

  • 基于数据加密进行反爬

一 、常见基于身份识别进行反爬

这是最简单且基础的反爬

1 通过headers字段来反爬

headers中有很多字段,这些字段都有可能会被对方服务器拿过来进行判断是否为爬虫

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

  • 反爬原理:爬虫默认情况下没有User-Agent,而是使用模块默认设置

  • 解决方法:请求之前添加User-Agent即可;更好的方式是使用User-Agent池来解决(收集一堆User-Agent的方式,或者是随机生成User-Agent)

    举例:

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

概念:referer作为请求头header的一部分,作用当前你在A网站,通过站内链接到B网站时,请求头中referer就带有原来A网站参数

!

把网页地址复制到浏览器新页面的地址栏里,进行直接访问,这样的话就不会有referer,浏览器刷新也不会有referer。

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

1.3 通过cookie来反爬

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

2 通过请求参数来反爬

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

2.1 通过从html静态文件中获取请求数据

  • 反爬原因:通过增加获取请求参数的难度进行反爬

    举例(某银行利率网站)

    额外通过请求加载html页面方式获取数据,普通爬虫不能通过爬取父页面来看到其请求子页面html数据

  • 解决方案:仔细分析抓包得到的每一个包,有请求静态html的把网址记录下来额外爬取

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

  • 反爬原因:通过增加获取请求参数的难度进行反爬

    举例(还是某银行利率网站),起因是爬取他源码发现一个有效的数据都没爬到,在其页面的管理开发工具里找到其有效数据都是.json请求获取的反爬措施处理

打开.json网站可以看到(队中上图网页完全吻合)

  • 解决方案:分析抓包得到的每一个包,搞清楚请求之间的联系,搞清楚请求参数的来源

之后案例和分析作者会陆续补充

2.3 通过js生成请求参数

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

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 常见基于数据加密进行反爬

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

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

    1.1 通过自定义字体来反爬

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

    1.2 通过css来反爬

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

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

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

1.4 通过数据图片化反爬

  • 解决思路:通过使用图片解析引擎从图片中解析数据

1.5 通过编码格式进行反爬

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

二、常见基于爬虫行为进行反爬

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.2 通过css来反爬

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

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

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

1.4 通过数据图片化反爬

  • 解决思路:通过使用图片解析引擎从图片中解析数据

1.5 通过编码格式进行反爬

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

反爬虫策略分析及处理相关推荐

  1. 反爬虫策略调研与分析

    爬虫时代 在互联网上,各类的信息数据相当大一部分是发布在Web页面上的,于是一大批以此为生的网站便诞生了. baidu和google便成为其中的佼佼者,它们是这个星球上最大牌的爬虫,最多的爬虫,为这个 ...

  2. 反击“猫眼电影”网站的反爬虫策略

    0×01 前言 前两天在百家号上看到一篇名为<反击爬虫,前端工程师的脑洞可以有多大?>的文章,文章从多方面结合实际情况列举了包括猫眼电影.美团.去哪儿等大型电商网站的反爬虫机制.的确,如文 ...

  3. python爬取网页防止重复内容_python解决网站的反爬虫策略总结

    本文详细介绍了网站的反爬虫策略,在这里把我写爬虫以来遇到的各种反爬虫策略和应对的方法总结一下. 从功能上来讲,爬虫一般分为数据采集,处理,储存三个部分.这里我们只讨论数据采集部分. 一般网站从三个方面 ...

  4. Scrapy绕过反爬虫策略汇总

    文章目录 一.Scrapy无法返回爬取内容的几种可能原因 1,ip封锁爬取 2,xpath路径不对 3,xpath路径出现font,tbody标签 4,xpath路径不够明确 5,robot协议 6, ...

  5. 使用scrapy做爬虫遇到的一些坑:网站常用的反爬虫策略,如何机智的躲过反爬虫Crawled (403)

    在这幅图中我们可以很清晰地看到爬虫与反爬虫是如何进行斗智斗勇的. 在学习使用爬虫时,我们制作出来的爬虫往往是在"裸奔",非常的简单. 简单低级的爬虫有一个很大的优点:速度快,伪装度 ...

  6. scrapy框架开发爬虫实战——反爬虫策略与反反爬虫策略

    反爬虫.反反爬虫 简单低级的爬虫有一个很大的优点:速度快,伪装度低.如果你爬取的网站没有反爬机制,爬虫们可以非常简单粗暴地快速抓取大量数据,但是这样往往就导致一个问题,因为请求过多,很容易造成服务器过 ...

  7. 【web性能优化】之一:反爬虫策略

    反爬虫策略,表面上看似乎跟WEB系统优化没有关系,经过分析,发现该策略是可以归到WEB性能优化的系列之中. 通过分析apache日志发现,某系统40%的带宽和服务器资源都消耗在爬虫上,如果除去10%- ...

  8. 代理ip网站开发_网站反爬虫策略,用代理IP都能解决吗?

    很多人会使用到网页采集器,其实这也是通过程序来进行采集的,如果没有使用代理IP,采集速度快了,照样是会被封住的.另外,这些网站还有其他的一些反爬策略,同样也会影响到我们采集网页的数据,这是如何限制的呢 ...

  9. 网站反爬虫策略VS反反爬虫策略

    网站反爬虫策略 1.通过User-Agent校验反爬 2.通过访问频度反爬 3.通过验证码校验反爬 4.通过变换网页结构反爬 5.通过账号权限反爬 反反爬虫策略制定 1.发送模拟User-Agent: ...

  10. 常见的一些反爬虫策略(下篇)-Java网络爬虫系统性学习与实战系列(10)

    常见的一些反爬虫策略(下篇)-Java网络爬虫系统性学习与实战系列(10) 文章目录 联系方式 反爬虫策略 文本混淆 SVG映射 CSS文字偏移 图片混淆伪装 字体反爬 Referer字段反爬 数据分 ...

最新文章

  1. 《linux程序设计》--读书笔记--第十四章信号量、共享内存和消息队列
  2. 不该被忽视的CoreJava细节(四)
  3. 基于weka实现的神经网络算法实现
  4. leetcode算法题--合并两个有序数组
  5. 再见,Navicat!这个IDEA的兄弟,真香!
  6. 用DirectX Audio和DirectShow播放声音和音乐(3)
  7. Linux入门:usermod - 修改用户帐户信息
  8. selenium 学习之路开始了,一遍搬一遍理解学习,加油!!!
  9. 查不到元素_浓重中国元素游戏的本地化地狱
  10. c语言程序设计自考真题,自学考试《C语言程序设计》随堂试题及答案
  11. IE浏览器打不开网页
  12. java每日一练——第六天:输入3个整数,输出它们的1次幂、2次幂和3次幂
  13. 《勋伯格和声学》读书笔记(十一):相隔三个和四个循环五度的转调
  14. Cadence学习三:如何快速的建立artwork层?
  15. CSS深入理解z-index(z-index相关知识总结)
  16. 人工智能正通过这9种方式重塑人力资源行业
  17. java 免费发送手机短信功能
  18. 思科网络学院-网络互连ccna3-第九章
  19. 独立博客网站做网站推广的一些想法
  20. Anolis OS8.6QU1通过cephadm部署ceph17.2.0分布式块存储(三)添加其它主机和添加mgr节点

热门文章

  1. ARM CMSIS 4.5.0
  2. 2020年5月份编程语言排行榜
  3. MATLAB - 傅里叶分析及 FFT 频谱分析
  4. ClickHouse安装与引擎
  5. idea 背景图插件
  6. php加入语音播报功能_微信收付款怎么设置语音播报
  7. java csv 换行_javacsv如何换行输入
  8. 如何破解 App 网络代理后出现网络不可用的情况
  9. 2021年PMP考试模拟题5(含答案解析)
  10. 408计算机考试科目英语数学,关于计算机考研408的那些事儿