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

news2024/11/27 17:46:47

文章目录

  • 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

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

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

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

相关文章

python 为什么这么受欢迎?python的优势到底在哪里?

常言道:“流水的语言,铁打的Python”,目前它可以说是已经"睥睨天下,傲视群雄"了。它天生丽质,易于读写,非常实用,从而赢得了广泛的群众基础,被誉为"宇宙最好的编程语言"&am…

2011年03月16日 Go生态洞察:Go朝着更高稳定性迈进

🌷🍁 博主猫头虎(🐅🐾)带您 Go to New World✨🍁 🦄 博客首页——🐅🐾猫头虎的博客🎐 🐳 《面试题大全专栏》 🦕 文章图文…

事务码增删查改表数据

常用事务码 SE11 SE14 SE16 SE16N SM30 SE11:查看数据库表/修改表中字段数量_类型/查看表中数据/设置表为可维护或不可维护 SE14:查看数据库表的创建日期创建用户名/查看表中字段/删除表中全部数据(只能全部删) SE16:查看数据库表/对可维护数据库表进行数据维护/SE16通过调试…

时间序列预测模型实战案例(十)(个人创新模型)通过堆叠CNN、GRU、LSTM实现多元预测和单元预测

本文介绍 本篇博客为大家讲解的是通过组堆叠CNN、GRU、LSTM个数,建立多元预测和单元预测的时间序列预测模型,其效果要比单用GRU、LSTM效果好的多,其结合了CNN的特征提取功能、GRU和LSTM用于处理数据中的时间依赖关系的功能。通过将它们组合在…

世界互联网大会领先科技奖发布 百度知识增强大语言模型关键技术获奖

11月8日,2023年世界互联网大会乌镇峰会正式开幕,今年是乌镇峰会举办的第十年,本次峰会的主题为“建设包容、普惠、有韧性的数字世界——携手构建网络空间命运共同体”。 目录 百度知识增强大语言模型关键技术荣获“世界互联网大会领先科技奖”…

asp.net水资源检测系统VS开发sqlserver数据库web结构c#编程Microsoft Visual Studio

一、源码特点 asp.net 水资源检测系统是一套完善的web设计管理系统,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。开发环境为vs2010,数据库为sqlserver2008,使用c#语言开 发 ASP.NET水资源检测系统1 (1) 应用技…

【前端】Jquery UI +PHP 实现表格拖动排序

目的&#xff1a;使用jquery ui库实现对表格拖拽排序&#xff0c;并且把排序保存到数据库中 效果如下 一、准备工作&#xff1a; 1、下载jquery ui库&#xff0c;可以直接引用线上路径 <link rel"stylesheet" href"https://code.jquery.com/ui/1.12.1/them…

《嵌入式虚拟化技术与应用》:深入浅出阐述嵌入式虚拟机原理,实现“小而能”嵌入式虚拟机!

随着物联网设备的爆炸式增长和万物互联应用的快速发展&#xff0c;虚拟化技术在嵌入式系统上受到了业界越来越多的关注、重视和实际应用。嵌入式系统与虚拟化技术这个跨界创新组合应运而生&#xff0c;其典型的应用场景包括软件定义汽车驾驶舱、工业领域的工作负载整合等。 虚…

终于有人说清楚了Cookie、Session、Token的区别。详解,面试题

前言&#xff1a; 众所周知&#xff0c;我们访问网页一般都是使用http协议&#xff0c;而http协议的每一次访问都是无状态的。 何为无状态&#xff1f;就是这一次请求和上一次请求是没有任何关系的、互不认识的、没有关联的。这种无状态的好处就是快速&#xff0c;坏处就是无法…

Bytebase:让数据库管理和协作变得无缝

背景 在团队规模较小的时候&#xff0c;往往部门数量有限&#xff0c;沟通协作成本较低&#xff0c;暂时可以通过某几个人管理数据库的方式让独轮车跑起来。但是&#xff0c;随着团队规模的扩大&#xff0c;部门及人员数量的增长&#xff0c;部门间沟通协作成本增加&#xff0c…

探索环保葡萄酒之生物动力

根据生物动力农业和园艺协会的说法&#xff0c;生物动力农业是“一种精神-伦理-生态的农业、园艺、食品生产和营养方法。”生物动力农民将他们的农场或葡萄园视为一个坚固的有机体&#xff0c;一个自我维持的生态系统。这些农业哲学和实践在整个农业周期中应用了一种整体方法。…

开源GIS工具分享,基于Java的开源GIS代码库GeoTools介绍

GeoTools介绍 GeoTools是一个基于Java开发的开源(LGPL)的GIS代码库,它为地理空间数据的操作提供了符合标准的方法,例如实现地理信息系统。GeoTools 库数据结构基于开放地理空间联盟 (OGC) 规范。 GeoTools提供了用于处理空间数据的类库和工具,包括数据读写、空间分析、…

对话李彦宏:AI 大模型时代,应用开发机会比移动互联网大十

AI 2.0 时代&#xff0c;ChatGPT 的出现&#xff0c;让大模型引发的诸神之战正式打响。百度作为中国首个推出真实应战“武器”的公司&#xff0c;其基于千亿量级数据炼就而成的“文心一言”背后&#xff0c;蕴藏哪些鲜为人知的故事&#xff1f;这种打破人类对过往 NLP 之智能对…

说说你对immutable的理解?如何应用在react项目中?

一、是什么 Immutable&#xff0c;不可改变的&#xff0c;在计算机中&#xff0c;即指一旦创建&#xff0c;就不能再被更改的数据 对 Immutable对象的任何修改或添加删除操作都会返回一个新的 Immutable对象 Immutable 实现的原理是 Persistent Data Structure&#xff08;持…

关掉电脑的自动更新

1、键盘上同时按【winR】&#xff0c;打开【运行】窗口&#xff0c;参考下图。 2、然后在运行窗口里输入【services.msc】&#xff0c;并按一下回车键&#xff0c;打开服务管理器&#xff0c;参考下图。 3、在服务中管理器中&#xff0c;我们找到【windows update】&#xff0c…

数实结合的复杂电磁环境构建解决方案

数实结合的复杂电磁环境构建解决方案 数实结合的复杂电磁环境构建 目前无线收发设备面临的电磁环境愈发恶劣。为了检验设备在复杂电磁环境下的实际工作性能&#xff0c;需进行各种应用条件下的测试和试验。外场测试难以提供各种应用环境&#xff0c;存在测试周期长、成本高、难…

电脑出现“此驱动器存在问题请立即扫描”该怎么办?

在您将可移动设备&#xff08;例如&#xff1a;U盘、移动硬盘&#xff09;连接到计算机时&#xff0c;您可能会收到一条错误消息“此驱动器存在问题请立即扫描并修复问题”。收到此错误消息后&#xff0c;您的设备在大多数情况下将无法访问。那么&#xff0c;电脑出现“此驱动器…

Redis系列-Redis安装与配置【2】

目录 Redis系列-Redis安装与配置【2】二、Redis安装与配置Redis安装步骤windowDocker安装 Redis配置文件说明Redis启动和停止命令启动Redis服务打开Redis客户端进行连接 使用可视化工具Another Redis Desktop ManagerRedisInsight 个人主页: 【⭐️个人主页】 需要您的【&#…

Linux 内核顶层Makefile 详解

目录 Linux 内核获取Linux 内核初次编译Linux 工程目录分析VSCode 工程创建顶层Makefile 详解make xxx_defconfig 过程Makefile.build 脚本分析make 过程built-in.o 文件编译生成过程make zImage 过程 前几章我们重点讲解了如何移植uboot 到I.MX6U-ALPHA 开发板上&#xff0c;从…

优思学院|为何CPK要大于1.33?

当初接触六西格玛或者质量工程的人们&#xff0c;通常对于Cpk值都会有一些疑问。其中一个最普遍的问题就是&#xff1a;为什么通常要求Cpk大于1.33呢&#xff1f; 这个问题首先涉及到正态分布的核心&#xff0c;和你的统计工具看到你的过程中的变化的能力。让我们来简单描绘一…