《一篇万字博文带你入坑爬虫这条不归路 【万字图文】》
《两万字博文教你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)反爬虫的原因有三:
- 爬虫占总PV较高(PV指页面访问的次数,每打开或刷新一次页面,算一个PV);
- 数据被批量抓走,会使数据拥有者丧失市场竞争力;
- 法律的灰色地带。
💦(2)关于反爬虫必须了解的一些重要概念:
- 爬虫:网络爬虫也叫网络蜘蛛,它特指一类自动批量下载网络资源的程序,这是一个比较口语化的定义。更加专业和全面对的定义是:网络爬虫是伪装成客户端与服务端进行数据交互的程序。关键在于批量!
- 反爬虫:使用任何技术手段,阻止别人批量获取自己网站信息的一种方式,关键也在于批量。
- 误伤:在反爬虫过程中,错误的将普通用户识别为爬虫,误伤率高的反爬虫策略,效果再好也不能用。(伤敌一千,自损八百的招式可不能用!)
- 拦截:成功阻止爬虫访问,这里会有拦截率的概念,通常来说,拦截率高的反爬虫策略,误伤的可能性就越高,因此需要权衡利与弊。
- 资源:机器成本与人力成本的总和。(做啥事都要考虑成本,毕竟——成年人的世界不容易!)
💢(3)重点——反爬虫三大方向:
本文的重点——反爬虫,反爬虫,它究竟有哪些方向呢?
- 基于身份识别进行反爬;
- 基于爬虫行为进行反爬;
- 基于数据加密进行反爬。
突然蹦出来发爬虫的三大方向,同学们是不是感觉脑瓜子嗡嗡的,不要急不要急哈!老师下面就带大家深入了解一下它们!(PS:拿出你们的小本本好好听课哦!)
💀第一个方向:基于身份识别进行反爬
关于反爬虫三大方向放在第一位的是——基于身份识别进行反爬。这是我们在进行爬虫的时候所遇到的第一层障碍,
同时也是最容易解决的一个哦!如果你能熟练攻破此类问题,那么你就是个合格的入门级爬虫工程师啦!!!
☀️(1)通过headers字段设置反爬:
-
通过headers中的user-agent字段来反爬
🔒反爬原理:爬虫默认情况下没有user-agent字段,而是使用模块默认设置。我们在爬取某网站时就会被直接识破是爬虫而不是用户操作!
🔑解决方法:请求之前添加user-agent即可,更好的方式是使用user-agent池来解决(收集一堆的user-agent的方式,或者是随机生成user-agent)! -
通过referer字段或者是其他字段来反爬
🔒反爬原理:爬虫默认情况下不会带上referer字段,服务器通过判断请求发起的源头,以此判断请求是否合法。
🔑 解决方法:添加referer字段! -
通过cookie来反爬
🔒反爬原理:通过检查cookies来查看发起请求用户是否具备相应权限,以此来进行反爬。
🔑解决方案:进行模拟登录,成功获取cookies之后在进行数据爬取!
🌀(2)通过请求参数设置反爬:
-
通过从html静态文件中获取请求数据
🔒反爬原理:通过增加获取请求参数的难度进行反爬。
🔑解决方法:仔细分析抓包得到的每一个包,搞清楚之间的联系! -
通过发送请求获取请求数据
🔒反爬原理:通过增加获取请求参数的难度进行反爬。
🔑解决方法:仔细分析抓包得到的每一个包,搞清楚之间的联系,搞清楚请求参数的来源! -
通过js生成请求参数(JS渗透实战:百度翻译实战;咪咕登录实战;获取网易云评论实战)
🔒反爬原理:js生成了请求参数。
🔑解决方法:分析js,观察加密实现的过程,通过js2py获取js的执行结果,或者使用selenium来实现! -
通过验证码来反爬(三大常用验证码:解决图形验证码;解决点触验证码;解决滑块验证码)
🔒反爬原理:对方服务器通过弹出验证码强制检验用户浏览行为。
🔑解决方法:打码平台或者是机器学习的方法识别验证码,其中打码平台(比如:超级鹰…)廉价易用,更值得推荐!
🎃第二个方向:基于爬虫行为的反爬
关于反爬虫三大方向放在第二位的是——基于爬虫行为的反爬。这是我们在进行爬虫的时候所遇到的第二层障碍,
需要使用到爬虫进阶的操作进行解决!如果你能熟练攻破此类问题,那么你就是个合格的中级级爬虫工程师啦!!!
🎅(1)根据爬取行为进行反爬,会在爬取源头——请求上做分析:
-
基于请求频率或总请求数量
🔒反爬原理:正常浏览器请求网站,速度不会太快,同一个IP/账号大量请求了对方服务器,有更大可能性会被识别为爬虫。
🔑解决方法:对应的通过购买高质量的IP的方式能够解决问题/IP代理池! -
通过同一IP/账号请求之间的间隔进行反爬
🔒反爬原理:正常人操作浏览器浏览网站,请求之间的时间间隔是随机的,而爬虫前后两个请求之间时间间隔通常比较固定同时时间间隔比较短,因此可以用来做反爬。
🔑解决方法:请求之间进行随机等待,模拟真实用户操作,在添加时间间隔之后,为了能够高速获取数据,尽量使用IP代理池,如果是账号,则将账号请求之间设置随机休眠! -
通过对请求IP/账号每天请求次数设置值进行反爬
🔒反爬原理:正常的浏览器行为,其一天的请求次数是有限的,通常超过够一个值,服务器就会拒绝响应。
🔑解决方法:对应的通过购买高质量的IP的方法/多账号,同时设置请求间随机休眠!
🎉(2)根据爬取行为进行反爬,会在爬取过程——步骤上做分析:
-
通过js实现跳转来反爬
🔒反爬原理:js实现页面跳转,无法在源码中获取下一页url。
🔑解决方法:多次抓包获取多条url,分析规律! -
通过蜜罐(陷阱)获取爬虫IP(或者代理IP),进行反爬
🔒 反爬原理:在爬虫获取链接请求的过程中,爬虫会根据正则,xpath,css等方式进行后续链接的提取,此时服务器端可以设置一个陷阱url,会被提取规则获取,但是正常用户无法获取,这样就能有效的区分爬虫和正常用户。
🔑解决方法:完成爬虫的编写之后,使用代理批量爬取测试/仔细分析响应内容结构,找出页面中存在的陷阱! -
通过假数据反爬
🔒反爬原理:向返回的响应中添加假数据污染数据库,通常假数据不会被正常用户看见。
🔑解决方法:长期运行,核对数据库中数据同实际页面中数据对应情况,如果存在问题,分析响应内容! -
阻塞任务队列
🔒反爬原理:通过生成大量垃圾url,从而阻塞任务队列,降低爬虫的实际工作效率。
🔑解决方法:观察运行过程中请求响应状态,仔细分析源码获取的垃圾url生成规则,对url进行过滤! -
阻塞网络IO
🔒反爬原理:发送请求获取响应的过程实际上就是下载的过程,在任务队列中混入一个大文件的url,当爬虫在进行该请求时将会占用网络io,如果是有多线程,则会占用线程。
🔑解决方法:观察爬虫运行状态/多线程请求线程计时! -
运维平台综合审计
🔒反爬原理:通过运维平台综合管理,通常采用复合型反爬虫策略,多种手段同时使用。
🔑解决方法:仔细观察分析,长期运行测试目标网站,检查数据采集速度,多方面综合处理!
🔓第三个方向:基于数据加密进行反爬
(手段:对响应中含有的数据进行特殊化处理!)
关于反爬虫三大方向放在第三位的是——基于数据加密进行反爬。这是我们在进行爬虫的时候所遇到的第三层障碍,
需要使用到爬虫高级的操作进行解决!如果你能熟练攻破此类问题,那么你就是个合格的高级爬虫工程师啦!!!
-
通过自定义字体来反爬(处理字体反爬(以解决58同城官网字体反爬为例))
🔒反爬思路:使用自定义字体文件。
🔑解决思路:切换到手机版,解析字体文件进行翻译/仔细分析所抓取的所有包,找到对应的字体文件,解析这个字体文件进行翻译!
(下图是爬取58同城官网的数据)
-
通过css来反爬
🔒反爬原理:源码数据不为真实数据,需要通过css位移才能产生真实数据。
🔑解决方法:计算css的偏移! -
通过js动态生成数据进行反爬:
🔒反爬原理:网页部分数据通过js动态生成。
🔑解决思路:解析关键js,获得数据生成流程,模拟生成数据! -
通过数据图片化反爬
🔒反爬原理:将数据图片化。
🔑解决思路:通过使用图片解析引擎从图片中获取数据! -
通过编码格式进行反爬
🔒反爬原理:不使用默认编码格式,在获取响应之后,通常爬虫使用utf-8格式进行解码,此时解码结果将会是乱码或者报错。
🔑解决思路:根据源码进行多格式解码,获取真正的解码格式!
🍖拓展一:验证码的处理!
我们在登录注册时频繁发送请求,服务器弹出图片验证码进行验证!不过现在大多网站哪怕你第一次发送请求,它也蹦出图片验证码要求你验证!
🍮(1)处理方案:
- 手动输入,但仅限于登录一次,无法持续;
- 图片识别引擎,使用光学识别引擎处理图片中的数据,目前常用于图片数据提取,较少用于验证码处理;
- 打码平台,爬虫常用解决验证码的方案。
🍚(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在本地!)
-
js的解析:
1.确定js的位置 ①观察按钮的绑定js事件(此法不保证一定能找到) ②通过initiator定位到js文件 ③通过serach 搜索关键字定位到js文件 ④通过元素绑定的事件监听函数找到js文件 2.在chrome浏览器,检查,通过consle执行部分js代码,解析部分js代码代表的含义 3.模拟重现 ①使用 js2py 翻译工具,python程序重现; ②还有 pyv8,executejs,splash 原理与 js2py 相似; ③纯python的实现 ;
-
思路:
在了解js内容和执行顺序之后,通过python来完成js执行过程,得到结果; 在了解js内容和执行顺序之后,使用类似 js2py 的模块来执行js代码,得到结果。
💣In The End!
从现在做起,坚持下去,一天进步一小点,不久的将来,你会感谢曾经努力的你! |
本博主会持续更新爬虫基础分栏及爬虫实战分栏,认真仔细看完本文的小伙伴们,可以点赞收藏并评论出你们的读后感。并可关注本博主,在今后的日子里阅读更多爬虫文!
如有错误或者言语不恰当的地方可在评论区指出,谢谢!
如转载此文请联系我说明用以意并标注出处及本博主名,谢谢!
可通过点击下面——>添加私人VX号—>请标明来自CSDN,会拉你进入技术交流群(群内涉及各个领域大佬级人物,任何问题都可讨论~)—>互相学习&&共同进步(非诚勿扰):