常见的反爬手段和解决思路(爬虫与反爬虫)
常见的反爬手段和解决思路(爬虫与反爬虫)
- 学习目标
- 1 服务器反爬的原因
- 2 服务器长反什么样的爬虫
- (1)十分低级的应届毕业生
- (2)十分低级的创业小公司
- (3)不小心写错了没人去停止的失控小爬虫
- (4)成型的商业对手
- (5)抽风的搜索引擎
- 3 反爬虫领域常见的一些概念
- 4 反爬的三个方向
- (1)基于身份识别进行反爬
- (2)基于爬虫行为的反爬
- (3)基于数据加密进行反爬
- 5 常见基于身份识别进行反爬
- 5.1 通过headers字段来反爬
- (1)通过headers中的user-agent
- (2)通过refer字段或者是其他字段来反馈
- (3)通过cookie来反馈
- 5.2 通过请求参数来反爬
- (1)通过html静态文件中获取请求数据(github登录数据)
- (2)通过发送请求获取请求数据
- (3)通过js生成请求参数
- (4)通过验证码来反爬
- 6 常见基于爬虫行为进行反爬
- 6.1 基于请求频率或总请求书
- (1)通过请求ip账号单位时间内总请求数量进行反爬
- (2)通过同一ip/账号请求之间的问题进行反爬
- (3)通过同一ip/账号每天请求次数设置阈值进行反爬
- 6.2 根据爬虫行为进行反爬,通常在爬取步骤上做分析
- (1) 通过js实现跳转来反爬
- (2) 通过蜜罐(陷阱)获取爬虫ip(或者代理),进行反爬
- (4) 通过假数据反爬
- (4) 堵塞任务队列
- 7 常见基于数据加密进行反爬
- (1)对响应中含有的数据进行特殊化处理
- (2)通过自定义字体来反爬 下图来自猫眼电影电脑版
- (3)通过css来反爬下图猫眼去哪儿电脑版
- (4)通过js动态生成数据进行反爬
- (5)通过数据图片化反爬
- (6)通过编码格式进行反爬
- 小结
学习目标
1.了解服务器反爬的原因
2.了解服务器长反什么样的爬虫
3.了解反爬虫领域常见的一些概念
4.了解反爬的三个方向
5.了解常见基于身份识别进行反爬
6.了解常见基于数据加密进行反爬
1 服务器反爬的原因
(1)爬虫占总PV较高,浪费资源
(2)资源被批量抓走,丧失竞争力
(3)法律的灰色地带
2 服务器长反什么样的爬虫
(1)十分低级的应届毕业生
应届毕业生的爬虫通常简单粗暴,根本不管服务器压力,加上人数不可预测,很容易把站点弄垮
(2)十分低级的创业小公司
现在的创业公司越来越多,也不知道被谁忽悠的,然后大家创了业不知道干什么好,觉得大数据比较热,就开始做大数据,分析程序全部写的差不多了,发现自己手头上没有数据。怎么办?写爬虫啊,于是就有了不计其数的小爬虫,处于公司的生死存亡,不断爬取数据。
(3)不小心写错了没人去停止的失控小爬虫
有些网站已经做了相应的反爬,但是爬虫仍然不断爬取。什么意思?就是说,他们根本爬不到任何数据,除了httpcode是200以外,一切都是不对的,可是爬虫依然不停止这个很可能就是一些托管在某些服务器上的小爬虫,已经无人认领了,依然在辛勤的工作着。
(4)成型的商业对手
这个是最大的对手,他们有技术,有钱,要什么,有什么,如果和你死磕,你就只能硬着头皮和他死磕。
(5)抽风的搜索引擎
大家不要以为搜索引擎都是好人,他们也有抽风的时候,而且一抽风就会导致服务器性能下降,请求量跟网络攻击没什么区别。
3 反爬虫领域常见的一些概念
因为反爬暂时是个比较新的领域,因此有定义要自己下:
爬虫:
使用任何技术手段,批量获取网站信息的一种方式,关键在于批量
反爬虫:
使用任何技术手段,阻止别人批量获取自己网站信息的一种方式,关键也是批量
误伤:
在反爬虫的过程中,错误的将普通用户识别为爬虫。误伤率高的爬虫策略,效果再好也不能用。
拦截:
成功阻止爬虫访问。这里会有拦截率的概念。通常来说,拦截率越高的反爬虫策略,误伤的可能性就越高,因此需要做个权衡。
资源:
机器成本和人力成本的总和。
这里要切记,人力成本也是资源,而且比机器更重要,因为根据摩尔定律,机器越来越便宜。而根据it行业的发展趋势,程序员越来越贵。因此,通常服务器反爬就是让爬虫工程师加班才是王道,机器成本并不是特别值钱。
4 反爬的三个方向
(1)基于身份识别进行反爬
看请求是否为浏览器请求,若有问题则异常
(2)基于爬虫行为的反爬
一般是来到列表页面,从列表页面获得所有详情页面url,针对页面发起请求,爬虫对此进行检查
(3)基于数据加密进行反爬
爬取时解析过程中是加密的数据,乱码等
每个方向都会有若干手段
5 常见基于身份识别进行反爬
5.1 通过headers字段来反爬
(1)通过headers中的user-agent
反爬原因:
爬虫默认情况下没有user-agent,而是使用模块默认设置
解决方案:
请求之前添加user-agent;更好的方式是使用user-agent池来解决(收集一堆user-agent的方式,或者随机生成user-agent)
(2)通过refer字段或者是其他字段来反馈
反爬原因:
爬虫默认情况下不会带上refer字段,服务器端通过判断请求发起的源头,一次判断请求是否合法
解决方案:
添加refer字段
(3)通过cookie来反馈
反爬原因:
通过检查cookies来查看发起请求的用户是否具备相应权限,以此来进行反爬
解决方案:
进行模拟登陆,成功获取cookies之后进行数据爬取
5.2 通过请求参数来反爬
请求参数的获取方法有很多,向服务器发送请求,很多时候需要携带请求参数,通常服务器可以通过检查请求参数是否正确来判断是否为爬虫
(1)通过html静态文件中获取请求数据(github登录数据)
反爬原因:
通过增加获取请求参数的难度进行反爬
解决方案:
仔细分析抓包的每个包,搞清楚请求之间的联系
(2)通过发送请求获取请求数据
反爬原因:
通过增加获取请求参数的难度进行反爬
解决方案:
仔细分析抓包得到的每一个包,搞清楚请求之间的联系,搞清楚请求参数的来源
(3)通过js生成请求参数
有时浏览器对账号密码等进行加密,或者通过js生成临时数据
反爬原因:
js生成了请求参数
解决方案:
分析js,观察加密的实现过程,通过js2py获取js的执行结果,或者使用selenium来实现
(4)通过验证码来反爬
反爬原因:
对方服务器通过弹出验证码强制验证用户浏览行为
解决方案:
打码平台或者机器学习的方法识别验证码,其中打码平台廉价易用,值得推荐
6 常见基于爬虫行为进行反爬
6.1 基于请求频率或总请求书
爬虫的行为与普通用户有这明显的区别,爬虫的请求评率与请求次数远高于普通用户
(1)通过请求ip账号单位时间内总请求数量进行反爬
反爬原理:
正常浏览器请求网站,速度不会太快,同一个ip账号大量请求了对方服务器,有更大的可能性会被识别为爬虫
解决方法:
对应的通过购买高质量的ip的方式能够解决问题/购买多个账号
(2)通过同一ip/账号请求之间的问题进行反爬
反爬原理:
正常人操作浏览器浏览网站,请求之间的时间间隔是随机的,而爬虫前后两个请求之间时间间隔通常比较固定同时时间间隔较短,因此可以用来做反爬
解决方法:
请求之间随机等待,模拟真实用户操作,在添加时间间隔后,为了能够告诉获取数据,尽量使用代理池,如果是账号,则将账号请求之间设置随机休眠
(3)通过同一ip/账号每天请求次数设置阈值进行反爬
反爬原理:
正常的浏览行为,其一天的请求次数是有限的,通常超过某一个值,服务器就会拒绝响应
解决方法:
对应的通过购买高质量的ip的方法/多账号,同时设置请求间随机休眠
6.2 根据爬虫行为进行反爬,通常在爬取步骤上做分析
(1) 通过js实现跳转来反爬
反爬原理:
js实现页面跳转,无法在源码中获取下一页url
解决方法:
多次抓包获取条状url,分析规律
(2) 通过蜜罐(陷阱)获取爬虫ip(或者代理),进行反爬
反爬原理:
在爬虫获取链接进行请求的过程中,爬虫会根据正则,xpath,css等方式进行后续链接的提取,此时服务器端可以设置一个陷阱url,会被提取规则获取,但是正常用户无法获取,这样就能有效的区分爬虫和正常用户
解决方法:
完成爬虫的编写之后,使用代理批量爬取测试/仔细分析响应内容结构,找出页面中存在的陷阱
(4) 通过假数据反爬
反爬原理:
向返回的响应中添加假数据污染数据库,通常假数据不会被正常用户看到
解决方法:
长期运行,核对数据库中数据同实际页面中数据对应情况,如果存在问题/仔细分析响应内容
(4) 堵塞任务队列
反爬原理:
通过生成大量垃圾url,从而堵塞任务队列,降低爬虫的实际工作效率
解决方法:
观察运行过程中请求响应状态/仔细分析源码获取垃圾url生成规则,对url进行过滤
7 常见基于数据加密进行反爬
(1)对响应中含有的数据进行特殊化处理
通常的特殊化处理主要指的的就是css数据偏移,自定义字体/数据加密/数据图片/特殊编码格式等
(2)通过自定义字体来反爬 下图来自猫眼电影电脑版
对于上面字体可以所有的对应起来,到时候翻译,但有些麻烦
当手机版的时候,检查发现没有进行加密了
1)反爬思路:
使用自有字体文件
2)解决思路:
切换到手机版/解析字体文件进行翻译
(3)通过css来反爬下图猫眼去哪儿电脑版
(4)通过js动态生成数据进行反爬
可能先拿到数据,再通过js运算得到结果,再进行渲染,在源码中并没有存在,此时若在源码中无法找到该数据,就需要查看是否js生成,后面会专门讲解js解析该如何做。
反爬原因:
通过js动态生成
解决思路:
解析关键js,获得数据生成流程,模拟生成数据
(5)通过数据图片化反爬
将数据转化成图片,就是使你多走好几步
58同城短租()
解决思路:
通过使用图片解析引擎从图片中解析数据
(6)通过编码格式进行反爬
反爬原因:
不适用默认编码格式,在获取响应之后通常爬虫使用utf-8格式进行解码,此时解码结果将会是乱码或者报错
解决思路:
根据源码进行多格式解码,或者真正的解码格式
小结
掌握常见的反爬手段、原理以及应对思路
相关文章:

常见的反爬手段和解决思路(爬虫与反爬虫)
常见的反爬手段和解决思路(爬虫与反爬虫) 学习目标1 服务器反爬的原因2 服务器长反什么样的爬虫(1)十分低级的应届毕业生(2)十分低级的创业小公司(3)不小心写错了没人去停止的失控小…...

Stable Diffusion【真人模型】:人像光影摄影极限写实真实感大模型
大家好,我是极客菌 今天和大家分享一个基于SD1.5的真人大模型:人像光影摄影极限写实真实感大模型。 该模型具有以下特点: 真实肤感(在面部肌理和皮肤肌理上均有加强学习,拒绝ai出图假的问题) 永不脱妆&a…...

java实现图片添加水印
文章目录 前言一、工具类WatermarkUtil二、工具类介绍2.1 图片来源类型2.2 水印类型2.3 读取本地图片2.4 读取网络图片2.5 水印处理2.6 添加水印 三、测试添加水印总结 前言 给图片添加水印是一个很常见的需求,一般是用来防盗用。比如我们csdn上面写的文章中&#…...

CSS规则——font-face
font-face 什么是font-face? 想要让网页文字千变万化,仅靠font-family还不够,还要借助font-face(是一个 CSS 规则,它允许你在网页上使用自定义字体,而不仅仅是用户系统中预装的字体。这意味着你可以通过提…...

【单片机毕业设计选题24034】-基于STM32的手机智能充电系统
系统功能: 系统可以设置充电时长,启动充电后按设置的充电时长充电,充电时间到后自动 停止充电,中途检测到温度过高也会结束充电并开启风扇和蜂鸣器报警。 系统上电后,OLED显示“欢迎使用智能充电系统请稍后”,两秒钟…...

[C++][数据结构][图][中][图的遍历][最小生成树]详细讲解
目录 1.图的遍历1.广度优先遍历2.深度优先遍历 2.最小生成树1.Kruskal算法2.Prim算法 1.图的遍历 给定一个图G和其中任意一个顶点 v 0 v_0 v0,从 v 0 v_0 v0出发,沿着图中各边访问图中的所有顶点,且每个顶 点仅被遍历一次 “遍历”&…...
退市新规解读—财务类强制退市
一、退市风险警示:第一年触及相关指标 上市公司最近一个会计年度触及下列退市风险指标之一,公司股票或存托凭证被实施退市风险警示(*ST): 第1项 组合类财务指标 仅发行A股或B股,最近一个会计年度或追溯重述后最近一个会计年度 …...
小程序的生命周期使用方法和应用场景
小程序生命周期 初始化(App Launch) • 触发时机:小程序首次启动时。 • 主要事件:onLaunch。 • 功能与适用场景: • 全局数据初始化:设置应用的全局状态和变量。 • 登录状态检查:判断用户是…...
什么是C++模块化系统?C++20的模块化系统。
C20引入的模块化系统是一种新的代码组织和编译机制,它旨在替代传统的头文件机制,提供更好的代码组织、更快的编译速度和更强的封装性。模块化系统的主要目标包括: 减少编译时间:通过减少冗余的头文件解析和宏定义传播,…...

智慧校园-档案管理系统总体概述
智慧校园档案管理系统,作为教育信息化进程中的重要一环,它运用现代信息技术的力量,彻底改变了传统档案管理的面貌,为学校档案资源的收集、整理、存储、检索与利用开辟了全新的途径。这一系统全面覆盖学生、教职工、教学科研及行政…...

文心一言 VS 讯飞星火 VS chatgpt (290)-- 算法导论21.3 3题
三、给出一个包含 m 个 MAKE-SET 、UNION 和 FINDSET 操作的序列(其中有 n 个是 MAKE-SET 操作),当仅使用按秩合并时,需要 Ω(mlgn) 的时间。如果要写代码,请用go语言。 文心一言: 在并查集(Union-Find)数…...
逻辑回归梯度推导
逻辑回归是一种广泛使用的分类算法,用于估计一个事件发生的概率。它是线性回归的扩展,通过sigmoid函数将线性回归的输出映射到[0, 1]区间,从而用于分类任务。 在逻辑回归中,我们使用对数似然损失函数(log-likelihood l…...
Python 使用函数输出一个整数的逆序数
在Python中,你可以定义一个函数来输出一个整数的逆序数。这里有一个简单的实现方法: def reverse_integer(x):# 检查输入是否为整数if not isinstance(x, int):raise ValueError("Input must be an integer")# 将整数转换为字符串,…...

【Linux】Wmware Esxi磁盘扩容
目录 一、概述 1.1 磁盘分区概念 1.2 LVM概念 二、扩容步骤 二、报错 一、概述 1.1 磁盘分区概念 在 Linux 中,每一个硬件设备都映射到一个系统的文件,对于硬盘、光驱等 IDE 或 SCSI 设备也不例外。Linux把各种 IDE 设备分配了一个由 hd 前缀组成的文…...

树莓派4B_OpenCv学习笔记15:OpenCv定位物体实时坐标
今日继续学习树莓派4B 4G:(Raspberry Pi,简称RPi或RasPi) 本人所用树莓派4B 装载的系统与版本如下: 版本可用命令 (lsb_release -a) 查询: Opencv 版本是4.5.1: 今日学习 OpenCv定位物体实时位置,代码来源是…...

MySQL之如何定位慢查询
1、如何定位慢查询 1.1、使用开源工具 调试工具:Arthas 运维工具:Promethuss、Skywalking 1.2、MySQL自带慢日志 慢查询日志记录了所有执行时间超过指定参数(long_query_time,单位:秒,默认10秒&#x…...

Open3D 删除点云中重复的点
目录 一、算法原理1、重叠点2、主要函数二、代码实现三、结果展示本文由CSDN点云侠原创,原文链接。如果你不是在点云侠的博客中看到该文章,那么此处便是不要脸的爬虫与GPT。 一、算法原理 1、重叠点 原始点云克隆一份 构造重叠区域 合并点云获得重叠点 2、主要…...

填报志愿选专业是兴趣重要还是前景重要?
进行专业评估,找到一个适合自己的专业是一件非常困难的事情。在进行专业选择时,身上理想化色彩非常严重的人,会全然不顾及他人的劝阻,义无反顾的以兴趣为主,选择自己热爱的专业。一些较多考虑他人建议,能听…...
python开发基础——day9 函数基础与函数参数
一、初识函数(function) 编程函数!数学函数,里面的是逻辑,功能,而不是套公式 编程函数的作用实现特定操作的一段代码 你现在请客,每个人都点同样的一份吃的,请100个人 1.薯条 2.上校鸡块 3.可乐 那…...

STM32——使用TIM输出比较产生PWM波形控制舵机转角
一、输出比较简介: 只有高级定时器和通用寄存器才有输入捕获/输出比较电路,他们有四个CCR(捕获/比较寄存器),共用一个CNT(计数器),而输出比较功能是用来输出PWM波形的。 红圈部分…...
浏览器访问 AWS ECS 上部署的 Docker 容器(监听 80 端口)
✅ 一、ECS 服务配置 Dockerfile 确保监听 80 端口 EXPOSE 80 CMD ["nginx", "-g", "daemon off;"]或 EXPOSE 80 CMD ["python3", "-m", "http.server", "80"]任务定义(Task Definition&…...
利用ngx_stream_return_module构建简易 TCP/UDP 响应网关
一、模块概述 ngx_stream_return_module 提供了一个极简的指令: return <value>;在收到客户端连接后,立即将 <value> 写回并关闭连接。<value> 支持内嵌文本和内置变量(如 $time_iso8601、$remote_addr 等)&a…...
QMC5883L的驱动
简介 本篇文章的代码已经上传到了github上面,开源代码 作为一个电子罗盘模块,我们可以通过I2C从中获取偏航角yaw,相对于六轴陀螺仪的yaw,qmc5883l几乎不会零飘并且成本较低。 参考资料 QMC5883L磁场传感器驱动 QMC5883L磁力计…...

学校招生小程序源码介绍
基于ThinkPHPFastAdminUniApp开发的学校招生小程序源码,专为学校招生场景量身打造,功能实用且操作便捷。 从技术架构来看,ThinkPHP提供稳定可靠的后台服务,FastAdmin加速开发流程,UniApp则保障小程序在多端有良好的兼…...
Element Plus 表单(el-form)中关于正整数输入的校验规则
目录 1 单个正整数输入1.1 模板1.2 校验规则 2 两个正整数输入(联动)2.1 模板2.2 校验规则2.3 CSS 1 单个正整数输入 1.1 模板 <el-formref"formRef":model"formData":rules"formRules"label-width"150px"…...
Webpack性能优化:构建速度与体积优化策略
一、构建速度优化 1、升级Webpack和Node.js 优化效果:Webpack 4比Webpack 3构建时间降低60%-98%。原因: V8引擎优化(for of替代forEach、Map/Set替代Object)。默认使用更快的md4哈希算法。AST直接从Loa…...
uniapp 集成腾讯云 IM 富媒体消息(地理位置/文件)
UniApp 集成腾讯云 IM 富媒体消息全攻略(地理位置/文件) 一、功能实现原理 腾讯云 IM 通过 消息扩展机制 支持富媒体类型,核心实现方式: 标准消息类型:直接使用 SDK 内置类型(文件、图片等)自…...

海云安高敏捷信创白盒SCAP入选《中国网络安全细分领域产品名录》
近日,嘶吼安全产业研究院发布《中国网络安全细分领域产品名录》,海云安高敏捷信创白盒(SCAP)成功入选软件供应链安全领域产品名录。 在数字化转型加速的今天,网络安全已成为企业生存与发展的核心基石,为了解…...

Java后端检查空条件查询
通过抛出运行异常:throw new RuntimeException("请输入查询条件!");BranchWarehouseServiceImpl.java // 查询试剂交易(入库/出库)记录Overridepublic List<BranchWarehouseTransactions> queryForReagent(Branch…...

Java数组Arrays操作全攻略
Arrays类的概述 Java中的Arrays类位于java.util包中,提供了一系列静态方法用于操作数组(如排序、搜索、填充、比较等)。这些方法适用于基本类型数组和对象数组。 常用成员方法及代码示例 排序(sort) 对数组进行升序…...