❤️爬爬爬,光会爬怎么行!快来看看别人都是咋反爬的!❤️【建议收藏】

👉在爬虫技术泛滥的今天,有不少小伙伴或是因为兴趣,或是因为工作所需,决定去学习爬虫,一入爬虫坑~👈

《一篇万字博文带你入坑爬虫这条不归路 【万字图文】》

💩<-🐷但是,从最近我的技术交流群内粉丝们交流的一些问题中,我发现了一个很严重很严重的大问题——他们 只是单纯想爬,却连一些最基础的反爬技术都不知晓。🐷->💩

《两万字博文教你python爬虫requests库【详解篇】》
《万字博文教你python爬虫Beautiful Soup库【详解篇】》
《万字博文教你python爬虫XPath库【详解篇】》

🎈俗话说的好——知己知彼方能百战百胜。搞爬虫也一样, 我们不仅要知道怎么爬!还要知道别人怎么防止我们爬!这样我们才能做到——当爬不到想要的数据的时候,从容面对,知道为什么会爬不到,然后去解决它!🎈

《万字博文教你爬虫必备->Selenium【详解篇】(初篇)》

       👇
👉🚔直接跳到末尾🚔👈 ——>领取专属粉丝福利💖
       ☝️


下面,就带领同学们走入反爬虫的世界,深入理解其概念以及 常见的反爬虫措施&对应的解决方法! 💨💨💨

在这里插入图片描述

❤️对应一下看看你的爬虫技术到哪个阶段了!❤️

  • ⭐️0.前言
    • 💥(1)反爬虫的原因有三:
    • 💦(2)关于反爬虫必须了解的一些重要概念:
    • 💢(3)重点——反爬虫三大方向:
  • 💀第一个方向:基于身份识别进行反爬
    • ☀️(1)通过headers字段设置反爬:
    • 🌀(2)通过请求参数设置反爬:
  • 🎃第二个方向:基于爬虫行为的反爬
    • 🎅(1)根据爬取行为进行反爬,会在爬取源头——请求上做分析:
    • 🎉(2)根据爬取行为进行反爬,会在爬取过程——步骤上做分析:
  • 🔓第三个方向:基于数据加密进行反爬
  • 🍖拓展一:验证码的处理!
    • 🍮(1)处理方案:
    • 🍚(2)关于图片识别引擎(tesseract)这一处理方案的具体操作:
      • 🍏第一步:下载安装
      • 🍒第二步:使用
      • 🍑拓展:大厂的图片识别引擎(拿来直接调接口,何乐而不为~)
      • 🍉(3)常见验证码的种类:
  • 🔞拓展二:关于爬虫过程中chrome浏览器骚操作
  • 💣In The End!

⭐️0.前言

💥(1)反爬虫的原因有三:

  1. 爬虫占总PV较高(PV指页面访问的次数,每打开或刷新一次页面,算一个PV);
  2. 数据被批量抓走,会使数据拥有者丧失市场竞争力;
  3. 法律的灰色地带。
    在这里插入图片描述

💦(2)关于反爬虫必须了解的一些重要概念:

  1. 爬虫:网络爬虫也叫网络蜘蛛,它特指一类自动批量下载网络资源的程序,这是一个比较口语化的定义。更加专业和全面对的定义是:网络爬虫是伪装成客户端与服务端进行数据交互的程序。关键在于批量!
  2. 反爬虫:使用任何技术手段,阻止别人批量获取自己网站信息的一种方式,关键也在于批量。
  3. 误伤:在反爬虫过程中,错误的将普通用户识别为爬虫,误伤率高的反爬虫策略,效果再好也不能用。(伤敌一千,自损八百的招式可不能用!)
  4. 拦截:成功阻止爬虫访问,这里会有拦截率的概念,通常来说,拦截率高的反爬虫策略,误伤的可能性就越高,因此需要权衡利与弊。
  5. 资源:机器成本与人力成本的总和。(做啥事都要考虑成本,毕竟——成年人的世界不容易!)

成年人的世界不容易啊!

💢(3)重点——反爬虫三大方向:

本文的重点——反爬虫,反爬虫,它究竟有哪些方向呢?

  1. 基于身份识别进行反爬;
  2. 基于爬虫行为进行反爬;
  3. 基于数据加密进行反爬。

萌萌哒的狗子!

突然蹦出来发爬虫的三大方向,同学们是不是感觉脑瓜子嗡嗡的,不要急不要急哈!老师下面就带大家深入了解一下它们!(PS:拿出你们的小本本好好听课哦!)

在这里插入图片描述

💀第一个方向:基于身份识别进行反爬

关于反爬虫三大方向放在第一位的是——基于身份识别进行反爬。这是我们在进行爬虫的时候所遇到的第一层障碍,
同时也是最容易解决的一个哦!如果你能熟练攻破此类问题,那么你就是个合格的入门级爬虫工程师啦!!!

☀️(1)通过headers字段设置反爬:

  1. 通过headers中的user-agent字段来反爬
    🔒反爬原理:爬虫默认情况下没有user-agent字段,而是使用模块默认设置。我们在爬取某网站时就会被直接识破是爬虫而不是用户操作!
    🔑解决方法:请求之前添加user-agent即可,更好的方式是使用user-agent池来解决(收集一堆的user-agent的方式,或者是随机生成user-agent)!

  2. 通过referer字段或者是其他字段来反爬
    🔒反爬原理:爬虫默认情况下不会带上referer字段,服务器通过判断请求发起的源头,以此判断请求是否合法。
    🔑 解决方法:添加referer字段!

  3. 通过cookie来反爬
    🔒反爬原理:通过检查cookies来查看发起请求用户是否具备相应权限,以此来进行反爬。
    🔑解决方案:进行模拟登录,成功获取cookies之后在进行数据爬取!

🌀(2)通过请求参数设置反爬:

  1. 通过从html静态文件中获取请求数据
    🔒反爬原理:通过增加获取请求参数的难度进行反爬。
    🔑解决方法:仔细分析抓包得到的每一个包,搞清楚之间的联系!

  2. 通过发送请求获取请求数据
    🔒反爬原理:通过增加获取请求参数的难度进行反爬。
    🔑解决方法:仔细分析抓包得到的每一个包,搞清楚之间的联系,搞清楚请求参数的来源!

  3. 通过js生成请求参数(JS渗透实战:百度翻译实战;咪咕登录实战;获取网易云评论实战)
    🔒反爬原理:js生成了请求参数。
    🔑解决方法:分析js,观察加密实现的过程,通过js2py获取js的执行结果,或者使用selenium来实现!

  4. 通过验证码来反爬(三大常用验证码:解决图形验证码;解决点触验证码;解决滑块验证码)
    🔒反爬原理:对方服务器通过弹出验证码强制检验用户浏览行为。
    🔑解决方法:打码平台或者是机器学习的方法识别验证码,其中打码平台(比如:超级鹰…)廉价易用,更值得推荐!

🎃第二个方向:基于爬虫行为的反爬

关于反爬虫三大方向放在第二位的是——基于爬虫行为的反爬。这是我们在进行爬虫的时候所遇到的第二层障碍,
需要使用到爬虫进阶的操作进行解决!如果你能熟练攻破此类问题,那么你就是个合格的中级级爬虫工程师啦!!!

🎅(1)根据爬取行为进行反爬,会在爬取源头——请求上做分析:

  1. 基于请求频率或总请求数量
    🔒反爬原理:正常浏览器请求网站,速度不会太快,同一个IP/账号大量请求了对方服务器,有更大可能性会被识别为爬虫。
    🔑解决方法:对应的通过购买高质量的IP的方式能够解决问题/IP代理池!

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

  3. 通过对请求IP/账号每天请求次数设置值进行反爬
    🔒反爬原理:正常的浏览器行为,其一天的请求次数是有限的,通常超过够一个值,服务器就会拒绝响应。
    🔑解决方法:对应的通过购买高质量的IP的方法/多账号,同时设置请求间随机休眠!

🎉(2)根据爬取行为进行反爬,会在爬取过程——步骤上做分析:

  1. 通过js实现跳转来反爬
    🔒反爬原理:js实现页面跳转,无法在源码中获取下一页url。
    🔑解决方法:多次抓包获取多条url,分析规律!

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

  3. 通过假数据反爬
    🔒反爬原理:向返回的响应中添加假数据污染数据库,通常假数据不会被正常用户看见。
    🔑解决方法:长期运行,核对数据库中数据同实际页面中数据对应情况,如果存在问题,分析响应内容!

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

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

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

🔓第三个方向:基于数据加密进行反爬

(手段:对响应中含有的数据进行特殊化处理!)

关于反爬虫三大方向放在第三位的是——基于数据加密进行反爬。这是我们在进行爬虫的时候所遇到的第三层障碍,
需要使用到爬虫高级的操作进行解决!如果你能熟练攻破此类问题,那么你就是个合格的高级爬虫工程师啦!!!

  1. 通过自定义字体来反爬(处理字体反爬(以解决58同城官网字体反爬为例))
    🔒反爬思路:使用自定义字体文件。
    🔑解决思路:切换到手机版,解析字体文件进行翻译/仔细分析所抓取的所有包,找到对应的字体文件,解析这个字体文件进行翻译!
    (下图是爬取58同城官网的数据)
    在这里插入图片描述

  2. 通过css来反爬
    🔒反爬原理:源码数据不为真实数据,需要通过css位移才能产生真实数据。
    🔑解决方法:计算css的偏移!

  3. 通过js动态生成数据进行反爬:
    🔒反爬原理:网页部分数据通过js动态生成。
    🔑解决思路:解析关键js,获得数据生成流程,模拟生成数据!

  4. 通过数据图片化反爬
    🔒反爬原理:将数据图片化。
    🔑解决思路:通过使用图片解析引擎从图片中获取数据!

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

🍖拓展一:验证码的处理!

我们在登录注册时频繁发送请求,服务器弹出图片验证码进行验证!不过现在大多网站哪怕你第一次发送请求,它也蹦出图片验证码要求你验证!

🍮(1)处理方案:

  1. 手动输入,但仅限于登录一次,无法持续;
  2. 图片识别引擎,使用光学识别引擎处理图片中的数据,目前常用于图片数据提取,较少用于验证码处理;
  3. 打码平台,爬虫常用解决验证码的方案。

🍚(2)关于图片识别引擎(tesseract)这一处理方案的具体操作:

🍏第一步:下载安装

    项目地址:https://github.com/tesseract-ocr/tesseract
    引擎安装:
        (1)mac环境下直接执行命令:
        brew install --with-training-tools tesseract
        
        (2)windows环境下的安装,可以通过exe安装包安装,下载地址:GitHub项目中的wiki找到,安装完成后将tesseract执行文件的目录加入到path环境变量中,方便调用!
        
        (3)linux环境下安装
        sudo apt-get install tesseract-ocr

🍒第二步:使用

图片识别引擎tesseract通过python使用。(以下代码没有对图片进行任何处理,效果不佳!)

战前准备:
	(1)PIL用于打开图片文件
	    pip install pillow
	(2)pytesseract模块用于从图片中解析数据
	    pip install pytesseract

字符验证码图片


from PIL import Image
import pytesseract

im = Image.open('download.png')

result = pytesseract.image_to_string(im)
print(result)

🍑拓展:大厂的图片识别引擎(拿来直接调接口,何乐而不为~)

其他OCR平台
	    (1)微软Azure图像识别:
	        https://azure.microsoft.com/zh-cn/services/cognitive-services/computer-vi
	    (2)有道智云文字识别:
	        http://aidemo.youdao.com/ocrdemo
	    (3)阿里云图文识别:
	        https://www.aliyun.com/product/cdi/
	    (4)腾讯OCR文字识别:
	        https://cloud.tencent.com/product/ocr

🍉(3)常见验证码的种类:

第一种:url地址不变,验证码不变;
第二种:url地址不变,验证码变化。

🐮关于验证码这一部分,同学们是不是一直有个疑问:对方服务器是如何判断当前我输入的验证码是显示在我屏幕上的验证码?🐮

💘其实这就是通过cookie来实现的,对应的,在请求页面,请求验证码,需要保证cookie的一致性,使用requests.session来解决。💘

🔞拓展二:关于爬虫过程中chrome浏览器骚操作

(使用隐身窗口,首次打开网站,不会带上cookie,能够观察页面的获取情况,包括对方服务器如何设置cookie在本地!)

  1. js的解析:

     1.确定js的位置
             ①观察按钮的绑定js事件(此法不保证一定能找到)
             ②通过initiator定位到js文件
             ③通过serach 搜索关键字定位到js文件
             ④通过元素绑定的事件监听函数找到js文件
         
     2.在chrome浏览器,检查,通过consle执行部分js代码,解析部分js代码代表的含义
     
     3.模拟重现
     ①使用 js2py 翻译工具,python程序重现;
     ②还有 pyv8,executejs,splash 原理与 js2py 相似;
     ③纯python的实现 ;
    
  2. 思路:

     在了解js内容和执行顺序之后,通过python来完成js执行过程,得到结果;
     在了解js内容和执行顺序之后,使用类似 js2py 的模块来执行js代码,得到结果。
    

💣In The End!

在这里插入图片描述

从现在做起,坚持下去,一天进步一小点,不久的将来,你会感谢曾经努力的你!

本博主会持续更新爬虫基础分栏及爬虫实战分栏,认真仔细看完本文的小伙伴们,可以点赞收藏并评论出你们的读后感。并可关注本博主,在今后的日子里阅读更多爬虫文!

	如有错误或者言语不恰当的地方可在评论区指出,谢谢!
	如转载此文请联系我说明用以意并标注出处及本博主名,谢谢!

  可通过点击下面——>添加私人VX号—>请标明来自CSDN,会拉你进入技术交流群(群内涉及各个领域大佬级人物,任何问题都可讨论~)—>互相学习&&共同进步(非诚勿扰):

热门文章

暂无图片
编程学习 ·

Java输出数组的内容

Java输出数组的内容_一万个小时-CSDN博客_java打印数组内容1. 输出内容最常见的方式// List<String>类型的列表List<String> list new ArrayList<String>();list.add("First");list.add("Second");list.add("Third");list.ad…
暂无图片
编程学习 ·

母螳螂的“魅惑之术”

在它们对大蝗虫发起进攻的时候&#xff0c;我认认真真地观察了一次&#xff0c;因为它们突然像触电一样浑身痉挛起来&#xff0c;警觉地面对限前这个大家伙&#xff0c;然后放下自己优雅的身段和祈祷的双手&#xff0c;摆出了一个可怕的姿势。我被眼前的一幕吓到了&#xff0c;…
暂无图片
编程学习 ·

疯狂填词 mad_libs 第9章9.9.2

#win7 python3.7.0 import os,reos.chdir(d:\documents\program_language) file1open(.\疯狂填词_d9z9d2_r.txt) file2open(.\疯狂填词_d9z9d2_w.txt,w) words[ADJECTIVE,NOUN,VERB,NOUN] str1file1.read()#方法1 for word in words :word_replaceinput(fEnter a {word} :)str1…
暂无图片
编程学习 ·

HBASE 高可用

为了保证HBASE是高可用的,所依赖的HDFS和zookeeper也要是高可用的. 通过参数hbase.rootdir指定了连接到Hadoop的地址,mycluster表示为Hadoop的集群. HBASE本身的高可用很简单,只要在一个健康的集群其他节点通过命令 hbase-daemon.sh start master启动一个Hmaster进程,这个Hmast…
暂无图片
编程学习 ·

js事件操作语法

一、事件的绑定语法 语法形式1 事件监听 标签对象.addEventListener(click,function(){}); 语法形式2 on语法绑定 标签对象.onclick function(){} on语法是通过 等于赋值绑定的事件处理函数 , 等于赋值本质上执行的是覆盖赋值,后赋值的数据会覆盖之前存储的数据,也就是on…
暂无图片
编程学习 ·

Photoshop插件--晕影动态--选区--脚本开发--PS插件

文章目录1.插件界面2.关键代码2.1 选区2.2 动态晕影3.作者寄语PS是一款栅格图像编辑软件&#xff0c;具有许多强大的功能&#xff0c;本文演示如何通过脚本实现晕影动态和选区相关功能&#xff0c;展示从互联网收集而来的一个小插件&#xff0c;供大家学习交流&#xff0c;请勿…
暂无图片
编程学习 ·

vs LNK1104 无法打开文件“xxx.obj”

写在前面&#xff1a; 向大家推荐两本新书&#xff0c;《深度学习计算机视觉实战》和《学习OpenCV4&#xff1a;基于Python的算法实战》。 《深度学习计算机视觉实战》讲了计算机视觉理论基础&#xff0c;讲了案例项目&#xff0c;讲了模型部署&#xff0c;这些项目学会之后可以…
暂无图片
编程学习 ·

工业元宇宙的定义与实施路线图

工业元宇宙的定义与实施路线图 李正海 1 工业元宇宙 给大家做一个关于工业元宇宙的定义。对于工业&#xff0c;从设计的角度来讲&#xff0c;现在的设计人员已经做到了普遍的三维设计&#xff0c;但是进入元宇宙时代&#xff0c;就不仅仅只是三维设计了&#xff0c;我们的目…
暂无图片
编程学习 ·

【leectode 2022.1.15】完成一半题目

有 N 位扣友参加了微软与力扣举办了「以扣会友」线下活动。主办方提供了 2*N 道题目&#xff0c;整型数组 questions 中每个数字对应了每道题目所涉及的知识点类型。 若每位扣友选择不同的一题&#xff0c;请返回被选的 N 道题目至少包含多少种知识点类型。 示例 1&#xff1a…
暂无图片
编程学习 ·

js 面试题总结

一、js原型与原型链 1. prototype 每个函数都有一个prototype属性&#xff0c;被称为显示原型 2._ _proto_ _ 每个实例对象都会有_ _proto_ _属性,其被称为隐式原型 每一个实例对象的隐式原型_ _proto_ _属性指向自身构造函数的显式原型prototype 3. constructor 每个prot…
暂无图片
编程学习 ·

java练习代码

打印自定义行数的空心菱形练习代码如下 import java.util.Scanner; public class daYinLengXing{public static void main(String[] args) {System.out.println("请输入行数");Scanner myScanner new Scanner(System.in);int g myScanner.nextInt();int num g%2;//…
暂无图片
编程学习 ·

RocketMQ-什么是死信队列?怎么解决

目录 什么是死信队列 死信队列的特征 死信消息的处理 什么是死信队列 当一条消息初次消费失败&#xff0c;消息队列会自动进行消费重试&#xff1b;达到最大重试次数后&#xff0c;若消费依然失败&#xff0c;则表明消费者在正常情况下无法正确地消费该消息&#xff0c;此时…
暂无图片
编程学习 ·

项目 cg day04

第4章 lua、Canal实现广告缓存 学习目标 Lua介绍 Lua语法 输出、变量定义、数据类型、流程控制(if..)、循环操作、函数、表(数组)、模块OpenResty介绍(理解配置) 封装了Nginx&#xff0c;并且提供了Lua扩展&#xff0c;大大提升了Nginx对并发处理的能&#xff0c;10K-1000K Lu…
暂无图片
编程学习 ·

输出三角形

#include <stdio.h> int main() { int i,j; for(i0;i<5;i) { for(j0;j<i;j) { printf("*"); } printf("\n"); } }
暂无图片
编程学习 ·

stm32的BOOTLOADER学习1

序言 最近计划学习stm32的BOOTLOADER学习,把学习过程记录下来 因为现在网上STM32C8T6还是比较贵的,根据我的需求flash空间小一些也可以,所以我决定使用stm32c6t6.这个芯片的空间是32kb的。 #熟悉芯片内部的空间地址 1、flash ROM&#xff1a; 大小32KB&#xff0c;范围&#xf…
暂无图片
编程学习 ·

通过awk和shell来限制IP多次访问之学不会你打死我

学不会你打死我 今天我们用shell脚本&#xff0c;awk工具来分析日志来判断是否存在扫描器来进行破解网站密码——限制访问次数过多的IP地址&#xff0c;通过Iptables来进行限制。代码在末尾 首先我们要先查看日志的格式&#xff0c;分析出我们需要筛选的内容&#xff0c;日志…
暂无图片
编程学习 ·

Python - 如何像程序员一样思考

在为计算机编写程序之前&#xff0c;您必须学会如何像程序员一样思考。学习像程序员一样思考对任何学生都很有价值。以下步骤可帮助任何人学习编码并了解计算机科学的价值——即使他们不打算成为计算机科学家。 顾名思义&#xff0c;Python经常被想要学习编程的人用作第一语言…
暂无图片
编程学习 ·

蓝桥杯python-数字三角形

问题描述 虽然我前后用了三种做法&#xff0c;但是我发现只有“优化思路_1”可以通过蓝桥杯官网中的测评&#xff0c;但是如果用c/c的话&#xff0c;每个都通得过&#xff0c;足以可见python的效率之低&#xff08;但耐不住人家好用啊&#xff08;哭笑&#xff09;&#xff09…