【爬虫与反爬虫】从技术手段与原理深度分析

文章目录

  • 1. 爬虫的基本概念
    • 1.1. 什么是爬虫
    • 1.2. 爬虫的价值
    • 1.3. 爬虫的分类
  • 3. 爬虫技术原理与实现
  • 4. 反爬虫基本概念
    • 4.1. 什么是反爬虫
    • 4.2. 反爬虫的目的
    • 4.3. 反什么样的爬虫
  • 5. 由浅到深的反爬虫技术手段
    • 5.1. 主动常见型反爬虫
      • 5.1.1. 基于爬虫行为
      • 5.1.2. 基于身份识别
  • 6. 被动防御型反爬虫
    • 6.1. 数据防护
  • 7. 组合升级型反爬虫(智能风控)

【作者主页】:吴秋霖
【作者介绍】:Python领域优质创作者、阿里云博客专家、华为云享专家。长期致力于Python与爬虫领域研究与开发工作!
【作者推荐】:对JS逆向感兴趣的朋友可以关注《爬虫JS逆向实战》,对分布式爬虫平台感兴趣的朋友可以关注《分布式爬虫平台搭建与开发实战》
还有未来会持续更新的验证码突防、APP逆向、Python领域等一系列文章

1. 爬虫的基本概念

1.1. 什么是爬虫

  爬虫是获取数据的一种途径。即称之为网页蜘蛛、网络机器人。它是一种按照一定规则自动抓取万维网信息的程序或脚本。利用标准的HTTP协议,根据超级链接及WEB文档检索的方法遍历万维网信息空间的程序。爬虫通俗来说,通过编写代码自动模拟人的行为访问网站并把网页上所呈现能看到的数据信息采集下来

1.2. 爬虫的价值

  对于目前大数据行业而言,数据所带来的价值不言而喻。在如今信息爆炸的时代,互联网上承载着海量的信息。如果合理的利用爬虫技术对这些数据进行挖掘与分析,能够产生极大的商业价值,为企业产品赋能以及创造盈利的价值

1.3. 爬虫的分类

  不同类型的爬虫,实现原理也是各不相同。但这些实现原理中,会存在很多共性,所以爬虫的分类大致可以分为以下三种:

1、通用爬虫
  爬虫系统内重要的组成部分。通过指定初始链接对页面数据进行采集,同时将采集过程中新增的链接加入待采集任务中,如此重复该爬取过程直到停止,如图所
在这里插入图片描述

2、聚焦爬虫
  建立在通用爬虫的基础之上, 采集页面中特定局部内容。聚焦爬虫的工作流程较为复杂,需要根据一定的网页分析算法过滤与主题无关的链接,保留有用的链接,并将其放入等待抓取的链接队列。然后,它将根据一定的搜索策略从队列中选择下一步要抓取的网页链接,并重复上述过程,直到达到系统的某一条件时停止

相对于通用网络爬虫,聚焦爬虫还需要解决三个主要问题:目标的定义、网页与数据的分析及过滤、链接的搜索策略

在这里插入图片描述

3、增量式爬虫
  监测网站数据更新的情况,只采集网站中最新更新数据

4、分布式爬虫
  分布在不同区域的多台计算机联合起来完成同一个数据采集任务

3. 爬虫技术原理与实现

  爬虫采集数据的详细流程以及它的主要步骤包括:
在这里插入图片描述

1、首先选取指定网页,将网的链接地址作为种子URL
2、将这些种子URL放入到待抓取URL队列中
3、爬虫从待抓取URL队列中依次读取URL,并通过DNS解析URL,把链接地址转换为网站服务器所对应的IP地址
4、然后将IP地址和网页相对路径名称交给网页下载器,网页下载器负责页面内容的下载
5、网页下载器将相应网页的内容下载到本地
6、将下载到本地的网页存储到页面库中,同时将下载过网页的URL放入到已抓取URL队列中,这个队列记载了爬虫系统已经下载过的网页URL,以避免网页的重复抓取
7、将下载的网页,从中抽取出所包含的所有链接信息,并在已抓取URL中检查其是否被抓取过,如果还未被抓取过,则将这个URL放入到待抓取URL队列中
8、下载被放入待抓取URL队列中的URL对应的网页,如此重复3-7,形成循环,直到待抓取URL队列为空

4. 反爬虫基本概念

4.1. 什么是反爬虫

  限制爬虫程序访问服务器资源和获取数据的行为称之为反爬虫,爬虫程序的访问速率和目的与正常用户的访问速率和目的是不同的,大部分爬虫会无节制地对目标应用进行爬取,这给目标应用的服务器带来巨大的压力。爬虫程序发出的网络请求称之为“垃圾流量”。开发者为了保证服务器的正常运转或降低服务器的压力与运营成本,不得不使出各种各样的技术手段来限制爬虫对服务器资源的访问

4.2. 反爬虫的目的

  • 避免浪费服务器资源
      因为爬虫占总PV比例较高。通过程序进行对URL请求去获得数据的成本是非常低的,从而造成大量低质量网页爬虫在网络横行,对目标网站产生大量的访问,导致目标网站的服务器资源大量消耗,轻则影响正常用户的访问速度,重则造成DDOS攻击导致网站服务不可用

  • 尽可能保护数据大量泄露
      虽然所有网站的数据都是共享给用户浏览查阅的,目前市面上很多成熟的爬虫软件可以大批量对一些网站数据进行采集,如果网站不加以施加必要的反爬虫技术手段,竞争对手则可以批量采集网页信息。长时间的积累带给企业的竞争力就会大大增加

4.3. 反什么样的爬虫

1、“新手”爬虫
  此类爬虫多出自于一些处于兴趣爱好的“新手”。此类爬虫通常简单粗暴,不会考虑服务器端面临的压力,加上人数不可预测,很容易带给网站流量压力

2、“失控”爬虫
  目前市面上绝大多数网站或多或少都做了一些相应的反爬虫措施。甚至很多爬虫在初期阶段并不会触碰到反爬禁忌,随着时间的慢慢推移当初的爬虫因为反爬措施的生效已不能正常采集数据或数据是错误的蜜罐数据,但是爬虫一旦不及时停止成为某些服务器上托管的小爬虫不间断的工作仍为造成对网站的影响

3、“成型”爬虫
  数据作为很多创业公司甚至成型商业对手的产品依托,此类爬虫拥有成熟的体系方案(包括不限于:资金、技术…),这个时候任何反制措施都不能彻底抵制爬虫对数据的采集,只能通过不断升级遏制爬虫的效率跟增加爬虫所要付出的“代价”从而提高数据获取的成本

5. 由浅到深的反爬虫技术手段

5.1. 主动常见型反爬虫

5.1.1. 基于爬虫行为

基于请求频率或总请求量进行反爬,因为爬虫的行为与普通用户有着明显区别,爬虫的请求频率与请求次数一般高于普通用户

1、通过请求IP/账号单位时间内总请求数量进行反爬

反爬原理: 正常浏览器请求网站,速度不会太快,同一IP/账号如果产生大量请求,将会判定识别为爬虫行为

2、通过同IP/账号请求之间的间隔时间分析进行反爬

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

3、通过蜜罐(陷阱)进行反爬

反爬原理:在爬虫获取链接进行请求的过程中,爬虫会根据正则、XPATH或CSS等方式进行后续链接的抽取,此时服务端可以设置一个陷阱URL,会被提取规则捕获提取,但我们的正常用户无法获取,能有效区分爬虫和正常用户

4、根据爬取行为触发深层次连环反制措施

反爬原理:服务器通过分析识别一旦判定该行为是爬虫行为将采用更为严厉的反制措施

另外还有如下多种情况:

  • 推送目标假数据,向爬虫返回的响应中添加假数据污染目标数据库,通常假数据不会被正常用户所看到
  • 阻塞目标任务队列,通过生成大量垃圾链接,从而阻塞任务队列,降低爬虫的实际工作效率
  • 阻塞网络IO,在爬虫获取响应的实际下载过程中,往目标任务队列混入一个大文件链接,当爬虫在进行该请求时将会占用网络IO,如果目标采用的是多线程则会占用线程
  • 运维平台综合审计,通过对运维平台的综合管理,通常采用复合型反爬策略,结合多种手段同时进行反制

5.1.2. 基于身份识别

1、通过headers字段反爬

反爬原理: 因headers中有很多字段组成,其中的某些字段可以用来进行判断对方的行为是否是爬虫

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

referer: 爬虫默认情况下不会待referer字段,服务器端可以通过判断请求发起的源头,以此判断请求是否合法

user-agent: 爬虫默认情况下是没有带user-agent这个字段的

2、通过请求参数反爬

反爬原理: 服务器在接受客户端请求时,需携带请求相应的参数,由此服务器端可以通过校验请求参数是否正确来判断是否为爬虫

通过JS生成请求参数,以此来增加分析、获取参数难度。
通过发送请求生成请求参数,以此来增加获取参数难度
在html静态文件中放置参数数据,以此来增加获取请求参数难度

6. 被动防御型反爬虫

6.1. 数据防护

  采用多种技术手段来防护网站数据资产以及对响应中含有的数据进行特殊化处理,截止目前市面上常见的一些反爬虫手段涵盖但不限于:文本混淆、页面动态渲染、请求签名校验、验证码、js混淆等

在这里插入图片描述

其中文本混淆包含css偏移、图片伪装文本、自定义字体

1、CSS偏移反爬

反爬原理:源码数据不为真正数据,需要通过CSS位移才能产生真正数据。利用CSS来将浏览器中显示的文字,在HTML中以乱序的方式存储,从而来限制爬虫。利用CSS样式将乱序的文字排版成人类正常阅读顺序的反爬虫手段

在这里插入图片描述

2、图片伪装反爬

反爬原理:用图片替换原来文本内容,从而让爬虫程序无法直接正常获取数据

在这里插入图片描述

3、自定义字体反爬

反爬原理:使用@font-face为网页指定字体。将自定义字体文件放在Web服务器上,并在CSS样式中使用它。面对爬虫程序时,没有相应的字体映射关系,是无法直接获取到有效数据的

在这里插入图片描述

4、页面动态渲染反爬

反爬原理:页面内容由JS渲染而成,真数据则通过 Ajax接口等形式获取的,通过获取网页源代码,无法直接获取效数据信息

5、页面动态渲染反爬

反爬原理:目前几乎所有的应用程序在涉及到用户信息安全的操作时,都会弹出验证码让用户进行识别。以确保该操作为正常用户行为

在这里插入图片描述

4、请求签名校验反爬虫

反爬原理:签名验证是防止服务器被恶意链接和篡改数据的有效方式之一,也是目前后端API最常用的防护方式之一。签名是一个根据数据源进行计算或者加密的过程,用户经过签名后会一个具有一致性和唯一性的字符串,从而可以有效的避免服务器端,将伪造的数据或被篡改的数据当成正常数据处理,爬虫则需要破解该参数的加密方法,这无疑进一步提升了爬虫采集的难度

在这里插入图片描述

7. 组合升级型反爬虫(智能风控)

  云计算成为趋势、AI技术不断突破,同时爬虫另有花样技术的层出不穷。很多企业逐渐选择加入第三方势力,云计算厂商可直接为企业提供云端反爬能力,将曾经传统的战局从反爬虫与爬虫的1v1演变成了企业+云厂商与爬虫的2v1模式,助力企业的反爬能力。一些厂商的智能风控系统防护针对爬虫来说面临着极大的挑战。如:网易的易盾、数美验证码、瑞数全新一代WAF、白云山科技Baishan Canvas平台以及Cloudflare Bot Managent

  好了,到这里又到了跟大家说再见的时候了。创作不易,帮忙点个赞再走吧。你的支持是我创作的动力,希望能带给大家更多优质的文章

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Banana Pi BPI-M6(Raspberry Pi 5 替代品)初始设置及固件烧录

Banana Pi BPI-M6:初始设置和镜像烧录 Banana Pi BPI-M6 的首次测试 在上一篇文章中,我比较了Banana Pi BPI-M6和Raspberry Pi 5的硬件特性。两者都拥有出色的硬件技术,在性能方面应该不会有太大的问题。 今天我想测试一下 Banana Pi。作为…

Zabbix“专家坐诊”第210期问答汇总

问题一 Q:zabbix触发器条件基于历史趋势的函数有示例吗?还有这些基于历史趋势的函数,具体是读取历史表还是趋势表? A:读历史表,示例可以看看官网的。 https://www.bookstack.cn/read/zabbix-5.0-zh/37cf0…

Qt实现自定义多选下拉列表

目录 前言1、 功能描述2、代码实现总结 前言 本文记录了一种通过继承 QComboBox 实现下拉列表多选功能的方法。效果如下图所示: 1、 功能描述 普通的下拉列表只支持选择一个选项,在软件开发过程中,经常会遇到下拉列表支持选择多个选项的需…

网络原理---拿捏网络层:IP协议

文章目录 IP协议4位版本4位首部长度、选项8位服务类型(TOS)16位总长度16位标识、3位标志、13位片偏移8位生存时间(TTL)8位协议16位首部校验和32位源IP地址、32位目的IP地址解决IP地址不够用的问题动态分配IP地址NAT机制&#xff0…

RPA处理重复工作,助力高效资金管理

在瞬息万变的市场竞争中,众多企业开展多元化经营以获取最大的经济效益。然而,企业的多元化经营程度越高,协调活动可能造成的决策延误也越多,其资金管理往往将面临更大的考验。随着新技术的发展,更多具备多元产业的企业…

关于卷积神经网络的填充(padding)

认识填充 (padding) 随着卷积层数的加深,输出进一步缩小,那么最终会导致输出很快就只剩下1∗1的数组,这也就没办法继续计算了,所以提出了填充的方法来方便网络的进一步加深。 其实填充的原因有两点&#xf…

亚马逊云科技Zero ETL集成全面可用,可运行近乎实时的分析和机器学习

亚马逊云科技数据库、数据分析和机器学习全球副总裁Swami Sivasubramanian曾指出:“数据是应用、流程和商业决策的核心。”如今,客户常用的数据传输模式是建立从Amazon Aurora到Amazon Redshift的数据管道。这些解决方案能够帮助客户获得新的见解&#x…

“2024杭州国际物联网展览会”定于4月份在杭州国际博览中心召开

随着科技的飞速发展,物联网已经成为当今社会的一个重要组成部分。物联网技术正在逐渐渗透到各个领域,为人们的生活带来更多的便利和智慧。物联网的发展趋势将受到技术、应用、安全等多方面的影响和推动。未来,物联网将更加智能化、自主化和安…

使用Docker部署开源分布式任务调度系统DolphinScheduler

🔥博客主页: 小羊失眠啦. 🎥系列专栏:《C语言》 《数据结构》 《Linux》《Cpolar》 ❤️感谢大家点赞👍收藏⭐评论✍️ 使用Docker部署开源分布式任务调度系统DolphinScheduler 文章目录 使用Docker部署开源分布式任务…

Bun 1.0.7 版本发布,实现多个 Node.js 兼容改进

导读Bun 是一个集打包工具、转译器和包管理器于一体的 JavaScript 运行时,由 Jarred Sumner 发布了 1.0.7 版本。本次更新实现了对 Node.js 运行时的多项兼容性改进,并修复了近 60 个 bug。 根据发布说明,本版本对 “bun install” 命令进行…

【机器学习】六、概率图模型

今天我们对概率图模型(Probabilistic Graphical Model,PGM)做一个总结。 模型表示 概率图模型,是指一种用图结构来描述多元随机变量之间条件独立关系的概率模型。 它提出的背景是为了更好研究复杂联合概率分布的数据特征&#x…

华为gre带验证key案例

配置FW_A。 a.配置接口的IP地址,并将接口加入安全区域。 system-view [sysname] sysname FW_A [FW_A] interface GigabitEthernet 1/0/1 [FW_A-GigabitEthernet1/0/1] ip address 1.1.1.1 24 [FW_A-GigabitEthernet1/0/1] quit [FW_A] interface GigabitEthernet 1/…

在Linux中搭建Mosquitto MQTT协议消息服务端并结合内网穿透工具实现公网访问

文章目录 前言1. Linux 搭建 Mosquitto2. Linux 安装Cpolar3. 创建MQTT服务公网连接地址4. 客户端远程连接MQTT服务5. 代码调用MQTT服务6. 固定连接TCP公网地址7. 固定地址连接测试 前言 Mosquitto是一个开源的消息代理,它实现了MQTT协议版本3.1和3.1.1。它可以在不…

GZ038 物联网应用开发赛题第1套

2023年全国职业院校技能大赛 高职组 物联网应用开发 任 务 书 (第1套卷) 工位号:______________ 第一部分 竞赛须知 一、竞赛要求 1、正确使用工具,操作安全规范; 2、竞赛过程中如有异议,可向现场考评人员反映,不得扰乱赛场秩序; 3、遵守赛场纪律,尊重考评人员…

HGHAC4.2.1开启DCS Failsafe Mode的步骤

瀚高数据库 目录 环境 文档用途 详细信息 环境 系统平台:Linux x86-64 Red Hat Enterprise Linux 7 版本:4.5.8 文档用途 本文档用于介绍hghac4.2.1版本开启dcs failsafe mode的步骤及验证方法 详细信息 一、新增功能说明 Hghac4.2.1封装自patroni3.…

71 内网安全-域横向网络传输应用层隧道技术

目录 必备知识点:1.代理和隧道技术区别?2.隧道技术为了解决什么?3.隧道技术前期的必备条件? 演示案例:网络传输应用层检测连通性-检测网络层ICMP隧道Ptunnel使用-检测利用传输层转发隧道Portmap使用-检测,利用传输层转发隧道Netcat使用-检测,利用,功能应用层DNS隧…

网站小程序分类目录网源码系统+会员登录注册功能 带完整搭建教程

大家好啊,源码小编今天来给大家分享一款网站小程序分类目录网源码系统会员登录注册功能 。 以下是核心代码图模块: 系统特色功能一览: 分类目录:系统按照不同的类别对网站进行分类,方便用户查找自己需要的网站。用户可…

K8S篇之etcd数据备份与恢复

一、etcd备份与恢复 基本了解: 1、k8s 使用etcd数据库实时存储集群中的数据,安全起见,一定要备份。 2、备份只需要在一个节点上备份就可以了,每个节点上的数据是同步的;但是数据恢复是需要在每个节点上进行。 3、etcd…

门窗定制服务预约小程序效果如何

无论建筑工程还是普通家庭,都有门窗订购需求,对商家来说,不断传播品牌、获客转化是首要的,然而在实际经营中门窗生意也会面临一些痛点: 1、品牌宣传拓客难 门窗生意同行较多,而且传单等形式低效且不太适用…

【原创】java+swing+mysql宠物领养管理系统设计与实现

摘要: 生活中,有很多被人遗弃的宠物,这些宠物的处理成为了一个新的难题。生活中也有许多人喜欢养宠物,为了方便大家进行宠物领养,提高宠物领养管理的效率和便利性。本文针对这一问题,提出设计和实现一个基…