Python爬虫教程:聊聊反爬爬虫经常遇到的问题及解决方法

反爬的三个方向:1.基于身份识别进行反爬,2.基于爬虫行为进行反爬,3.基于数据加密进行反爬。

1.常见基于身份识别进行反爬

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

1.1 通过headers中的user-agent字段进行反爬

反爬原理:爬虫默认情况下没有user-agent,而是使用模块默认设置。

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

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

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

解决方法:添加referer字段

1.3 通过cookie来反爬

反爬原因:通过检查cookies来查看发起请求的用户是否具备相应权限,以此来进行反爬。

解决方案:进行模拟登录,成功获取cookies之后再进行数据爬取

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

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

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

解决方案:仔细分析抓包得到的每一个包,搞清楚请求之间的联系

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

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

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

2.3 通过js生成请求参数

反爬原理:js生成了请求参数

解决方法:分析js,观察加密的实现过程,通过js2py获取js的执行结果,或者使用selenium来实现

2.4 通过验证码来反爬

反爬原理:对方服务器通过弹出验证码强制验证用户浏览行为

解决方法:打码平台或者是机器学习的方法识别验证码,其中打码平台廉价易用,更值得推荐

3.常见基于 ‘ 爬虫行为 ’进行反爬

3.1 基于请求频率或总请求数量

爬虫的行为与普通用户有着明显的区别,爬虫的请求频率与请求次数要远高于普通用户。

3.1.1 通过请求ip/账号单位时间内总请求数量进行反爬

反爬原理:正常浏览器请求网络,速度不会太快,同一个ip/账号大量请求了对方服务器,有更大的可能性会被识别为爬虫

解决方法:对应的通过购买高质量的ip的方式能够解决问题/购买多个账号

import requests

url = "https://baidu.com"
# 设置代理 IP 地址
proxies = {
  "http": "http://代理IP:端口",
  "https": "http://代理IP:端口",
}
# 注意 proxies 参数
response = requests.get(url, proxies=proxies)

print(response.text)

3.1.2 通过同一ip/账号请求之间的间隔进行反爬

反爬原理:正常人操作浏览器浏览网站,请求之间的时间间隔是随机的,而爬虫前后两个请求之间间隔通常比较固定同时时间间隔较短,因此可用来反爬

解决方法:请求之间进行随机等待,模拟真实用户操作,在添加时间间隔后,为了能够高速获取数据,尽量使用代理池,如果是账号,则将账号请求之间设置随机休眠

3.1.3 通过对请求ip/账号每天请求次数设置阈值进行反爬

反爬原理:正常的浏览行为,其一天的请求次数是有限的,通常超过某一个值,服务器就会拒绝响应

解决方法:对应的通过购买高质量的ip/多账号的方法,同时设置请求间随机休眠

3.2 根据爬虫行为进行反爬,通常在爬取步骤上做分析

3.2.1 通过js实现跳转来反爬

反爬原理:js实现页面跳转,无法在源码中获取下一页url

解决方法:多次抓包获取条状url,分析规律

3.2.2 通过蜜罐(陷阱)获取爬虫ip(或代理ip),进行反爬

反爬原理:在爬虫获取链接进行请求的过程中,爬虫会根据正则,xpath,css等方式进行后续链接的提取,此时服务器端可以设置一个陷阱url,会被提取规则获取,但是正常用户无法获取,这样就能有效的区分爬虫和正常用户

解决方法:完成爬虫的编写之后,使用代理批量爬取测试/仔细分析响应内容结构,找出页面中存在的陷阱

3.2.3 通过假数据反爬

反爬原理:向返回的响应中添加假数据污染数据库,通常假数据不会被正常用户看到

解决方法:长期运行,核对数据库中数据同实际页面中数据对应情况,如果存在问题/仔细分析响应内容

3.2.4 阻塞任务队列

反爬原理:通过生成大量垃圾url,从而阻塞任务队列,降低爬虫的实际工作效率

解决方法:观察运行过程中请求影响状态/仔细分析源码获取垃圾url生成规则,对url进行过滤

3.2.5 阻塞网络io

反爬原理:发送请求获取响应的过程实际上就是下载的过程,在任务队列中混入一个大文件的url,当爬虫在进行该请求时将会占用网络io,如果是有多线程则会占用线程

解决方法:观察爬虫运行状态/多线程对请求线程计时/发送请求线

3.2.6 运维平台综合审计

反爬原理:通过运维平台进行综合管理,通常采用复合型反爬策略,多种手段同时使用

解决方法:仔细观察分析,长期运行测试目标网站,检查数据采集速度,多方面处理

4.常见基于数据加密进行反爬

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

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

4.1.1 通过自定义字体来反爬

猫眼口碑,左面写的口碑9.2,检查之后,右面根本不会显示该数字,而是显示几个方框

在无痕模式准备抓包,打开网址,可以找到它的数字就像一段乱码,这就是它自定义的字体:

处理方法:我们可以将数字和自定义字体对应起来,比如9对应的就是

4.1.2 通过css来反爬

反爬思路:源码数据不为真正数据,需要通过css位移才能产生真正数据

解决思路:计算css偏移

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

反爬原理:通过js动态生成

解决思路:解析关键js,获得数据生成流程,模拟生成数据

4.1.4 通过数据图片化反爬

一串数字在做成图片显示

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

4.1.5 通过编码格式进行反爬

反爬原理:不适用默认编码格式,在获取响应后通常爬虫使用utf-8格式进行解码,此时解码结果将会是乱码或者报错

解决思路:根据源码进行多格式解码,或者真正的解码格式

感兴趣的小伙伴,赠送全套Python学习资料,包含面试题、简历资料等具体看下方。

一、Python所有方向的学习路线

Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照下面的知识点去找对应的学习资源,保证自己学得较为全面。

img
img

二、Python必备开发工具

工具都帮大家整理好了,安装就可直接上手!img

三、最新Python学习笔记

当我学到一定基础,有自己的理解能力的时候,会去阅读一些前辈整理的书籍或者手写的笔记资料,这些笔记详细记载了他们对一些技术点的理解,这些理解是比较独到,可以学到不一样的思路。

img

四、Python视频合集

观看全面零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。

img

五、实战案例

纸上得来终觉浅,要学会跟着视频一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。

img

六、面试宝典

在这里插入图片描述

在这里插入图片描述

简历模板在这里插入图片描述
若有侵权,请联系删除
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值