常见的反爬手段和解决思路(爬虫与反爬虫)

常见的反爬手段和解决思路(爬虫与反爬虫)

  • 学习目标
  • 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格式进行解码,此时解码结果将会是乱码或者报错
解决思路:根据源码进行多格式解码,或者真正的解码格式

小结

掌握常见的反爬手段、原理以及应对思路

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/862811.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

安装Docker运行TensorFlow容器-《MCU嵌入式AI开发笔记》(第9集)搜索柔贝特三哥视频同步更新

安装Docker运行 TensorFlow 容器-《MCU嵌入式AI开发笔记》(第9集)。目标:在国产MCU上运行AI深度学习算法,实现识别、判断等功能。搜索柔贝特三哥,《MCU嵌入式AI开发笔记》视频同步更新。 安装Docker运行 TensorFlow 容…

[推荐]有安全一点的网贷大数据信用查询网站吗?

在互联网金融日益发展的今天,网贷大数据查询网站成为了许多人申贷前的必备工具。随着使用这些网站的人群越来越多,安全问题也逐渐浮出水面。最近,就有许多用户反馈自己的个人信息在网贷大数据查询网站上被泄露。为了解决这一问题,…

reactjs18 中使用路由技巧

react18 版本中,路由的用法发生了变化,react18 版本中,路由由 react-router-dom 包提供。与 react-router 包不同的是,react-router-dom 包提供了 createBrowserRouter 方法,该方法可以创建路由对象。总之,…

原码、反码、补码、移码的计算转换

文章目录 正数负数原码 & 反码反码 -> 补码原码 <-> 补码移码 <- Other 方法总结练习 正数 原码 和 反码 和 补码 都是一样的不会发生变化 因此&#xff0c;计算的时候先看第一位 符号位 &#xff0c;只要能发现是正数&#xff0c;三者都不变 移码 在补码基础…

飞凌嵌入式技术创新日(北京站)圆满落幕,共创嵌入式技术的美好未来

2024年6月25日下午&#xff0c;飞凌嵌入式技术创新日&#xff08;北京站&#xff09;在北京中关村皇冠假日酒店盛大举行。此次活动汇聚了近300位嵌入式技术领域的专家和企业代表&#xff0c;共享嵌入式技术的盛宴&#xff0c;共创嵌入式技术的美好未来&#xff01; 进入活动现场…

美国抗攻击服务器有哪些可靠的解决方案

美国抗攻击服务器在面对日益严重的网络安全威胁时&#xff0c;需要采取一系列可靠的解决方案来确保服务器的稳定运行和数据安全。以下是一些科普性质的抗攻击服务器解决方案&#xff1a; 一、流量清洗与过滤 流量清洗是美国抗攻击服务器应对DDoS攻击的重要措施。当检测到异常流…

DC-DC变换电路的研究与设计

通过使用MATLAB进行电路仿真以及通过制作实物进行验证&#xff0c;通过BUCK电路设计DC-DC来达到我们预期的效果&#xff0c;资料获取到咸&#x1f41f;&#xff1a;xy591215295250 \\\或者联系wechat 号&#xff1a;comprehensivable 设计要求&#xff1a;设计一个DC-DC 电源&a…

[Go Web] Kratos 使用的简单总结

文章目录 1.Kratos 简介2.传输协议3.日志4.错误处理5.配置管理6.wire 1.Kratos 简介 Kratos并不绑定于特定的基础设施&#xff0c;不限定于某种注册中心&#xff0c;或数据库ORM等&#xff0c;所以您可以十分轻松地将任意库集成进项目里&#xff0c;与Kratos共同运作。 API -&…

如何找合适的C++项目给自己的简历加分?

在开始前刚好我有一些资料&#xff0c;是我根据网友给的问题精心整理了一份「嵌入式的资料从专业入门到高级教程」&#xff0c; 点个关注在评论区回复“888”之后私信回复“888”&#xff0c;全部无偿共享给大家&#xff01;&#xff01;&#xff01; C的工作多种多样&#x…

云原生之使用Docker部署RabbitMQ消息中间件

云原生之使用Docker部署RabbitMQ消息中间件 一、RabbitMQ介绍1.1 RabbitMQ简介1.2 RabbitMQ特点1.3 RabbitMQ使用场景 二、检查Docker环境2.1 检查Docker版本2.2 检查操作系统版本2.3 检查Docker状态 三、下载RabbitMQ镜像四、部署RabbitMQ服务4.1创建挂载目录4.2 运行RabbitMQ…

【Qt】QMessageBox 各种对话框的默认显示效果

1. 函数原型 void about(QWidget *parent, const QString &title, const QString &text)void aboutQt(QWidget *parent, const QString &title QString())QMessageBox::StandardButton critical(QWidget *parent, const QString &title, const QString &…

使用li标签实现数据列表效果(鼠标移动和选中时均有阴影效果)

文章目录 一、最终效果&#xff1a;二、完整页面代码 一、最终效果&#xff1a; 选中的数据有阴影效果&#xff0c;鼠标移动时也有阴影效果 二、完整页面代码 list-style-type: none是去掉无序标签前的点的样式 <template><div><div class"my-new-lis…

打造坚固的SSH防护网:端口敲门入门指南

欢迎来到我的博客&#xff0c;代码的世界里&#xff0c;每一行都是一个故事 &#x1f38f;&#xff1a;你只管努力&#xff0c;剩下的交给时间 &#x1f3e0; &#xff1a;小破站 打造坚固的SSH防护网&#xff1a;端口敲门入门指南 前言什么是端口敲门端口敲门的优点1. 增强安全…

React的Redux的状态管理

步骤 1.创建新项目 npx create-react-app react-redux 2.安装配套工具 npm i reduxjs/toolkit react-redux 3.启动项目 npm run start 4.在src目录下创建store文件夹 5.在store文件夹下创建modules文件夹 6.在store文件夹里创建index.js文件 7.在counterStore.js文件…

自动化代码规范检查--Sonarqube部署

参考文档 官方文档安装数据库 官方给出几种数据库: # 我们选用postgres, 拉取镜像 docker pull postgres:16.0# 创建存储卷 docker volume create postgresql-data# 运行容器 docker run -d --name sonarqube-postgres \-p 5432:5432 \-e POSTGRES_DB=sonar_DB \-e POSTGRE…

高性价比蓝牙耳机有哪些?2024超高性价比蓝牙耳机推荐

在2024移动互联网高速发展的时代&#xff0c;蓝牙耳机已成为我们生活中不可或缺的一部分。走在街头&#xff0c;低头看手机&#xff0c;滑动屏幕选歌&#xff0c;耳边传来清晰的旋律&#xff0c;这一幕已经成为现代生活的标配。但面对市场上琳琅满目的蓝牙耳机品牌和型号&#…

数据库同步最简单的方法

数据库同步到底有咩有简单的方法&#xff0c;有肯定是有的&#xff0c;就看你有咩有缘&#xff0c;看到这篇文章&#xff0c;你就是有缘人。众所周知&#xff0c;数据库同步向来都不是一件简单的事情&#xff0c;它很繁琐&#xff0c;很费精力&#xff0c;很考验经验&#xff0…

力扣 刷题 使用双指针进行数组去重分析

目录 双指针 一、26.删除有序数组中的重复项 题目 题解 二、80. 删除有序数组中的重复项 II 题目 题解 三、27. 移除元素 题目 题解 双指针 我们这里所说的双指针实际上并不是真正的指针&#xff0c;它只是两个变量&#xff0c;用于标识数组的索引等&#xff0c;因其…

vue3封装表格嵌套表单问题汇总

1.插槽嵌套多层数据ui组件怎么使用 思路&#xff1a;插槽具名【区分】后暴露传递&#xff0c;这个为神魔要区分&#xff0c;因为封装组件表格列表项也有插槽 步骤一&#xff1a;表单插槽暴露 <ElFormclass"form-search":model"formParams"ref"form…

java基于ssm+jsp 多人命题系统

1管理员功能模块 管理员登录&#xff0c;管理员通过输入用户、密码等信息进行系统登录&#xff0c;如图1所示。 图1管理员登录界面图 管理员对个人中心进行操作填写原密码、新密码、确认密码并进行添加、删除、修改以及查看&#xff0c;如图2所示。 图2个人信息功能界面图 学…