通常见到的反爬虫技术大致可以分为如下几类:

1.请求头headers
2.用户操作的网站行为
3.网站目录数据加载方式
4.数据加密
5.验证码识别

最为头疼的就是验证码识别,暂时没有完美的解决方案。

最简单的当属第一类:基于用户请求的headers
可以添加headers请求头,将浏览器信息以字典的数据形式写入爬虫代码的请求头。

第二类,基于用户操作网站行为,这相当于将爬虫伪装为一个人的行为在浏览页面(比方说,一个人不可能在1秒钟能同时打开十个以上的网页)。
可以使用IP代理,每请求几次就换一个IP,这样可以绕过IP检测机制;可以使用time模块的延迟机制,隔几秒请求一次,再隔几秒请求一次。总的意思,相当于模拟人在操作。

第三类,基于网站目录数据加载
一般来说,是Ajax通过访问接口的方式生成数据,我们分析网站设计,找到Ajax请求,解析数据结构及其含义,爬虫模拟Ajax请求。

第四类,基于数据加密
一般是使用JavaScript实现加密代码,我们需要分析代码的加密方式,然后在爬虫代码中模拟其加密方式,再次发送请求。但是有一点,这类花费时间比较长。
还一种是基于自动化测试技术的,相当于模拟人的操作行为。

第五类,基于验证码识别
对于这类,在爬虫领域还没有一个完美的解决方案。
现在验证码技术发展很快,对于复杂验证码的处理爬虫技术相对滞后。一般,我们依赖第三方平台和ORC技术识别,并不是不能解决,只是方法不是特别完美。随着深度学习技术的发展,也是识别验证码很好的方法之一。
对于简单的验证码图片可以使用tesseract来处理,对于复杂的可以去打码平台。