【作者主页】:吴秋霖
【作者介绍】:Python领域优质创作者、阿里云博客专家、华为云享专家。长期致力于Python与爬虫领域研究与开发工作!
【作者推荐】:对JS逆向感兴趣的朋友可以关注《爬虫JS逆向实战》,对分布式爬虫平台感兴趣的朋友可以关注《分布式爬虫平台搭建与开发实战》
还有未来会持续更新的验证码突防、APP逆向、Python领域等一系列文章
爬虫是获取数据的一种途径。即称之为网页蜘蛛、网络机器人。它是一种按照一定规则自动抓取万维网信息的程序或脚本。利用标准的HTTP协议,根据超级链接及WEB文档检索的方法遍历万维网信息空间的程序。爬虫通俗来说,通过编写代码自动模拟人的行为访问网站并把网页上所呈现能看到的数据信息采集下来
对于目前大数据行业而言,数据所带来的价值不言而喻。在如今信息爆炸的时代,互联网上承载着海量的信息。如果合理的利用爬虫技术对这些数据进行挖掘与分析,能够产生极大的商业价值,为企业产品赋能以及创造盈利的价值
不同类型的爬虫,实现原理也是各不相同。但这些实现原理中,会存在很多共性,所以爬虫的分类大致可以分为以下三种:
1、通用爬虫
爬虫系统内重要的组成部分。通过指定初始链接对页面数据进行采集,同时将采集过程中新增的链接加入待采集任务中,如此重复该爬取过程直到停止,如图所
2、聚焦爬虫
建立在通用爬虫的基础之上, 采集页面中特定局部内容。聚焦爬虫的工作流程较为复杂,需要根据一定的网页分析算法过滤与主题无关的链接,保留有用的链接,并将其放入等待抓取的链接队列。然后,它将根据一定的搜索策略从队列中选择下一步要抓取的网页链接,并重复上述过程,直到达到系统的某一条件时停止
相对于通用网络爬虫,聚焦爬虫还需要解决三个主要问题:目标的定义、网页与数据的分析及过滤、链接的搜索策略
3、增量式爬虫
监测网站数据更新的情况,只采集网站中最新更新数据
4、分布式爬虫
分布在不同区域的多台计算机联合起来完成同一个数据采集任务
爬虫采集数据的详细流程以及它的主要步骤包括:
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队列为空
限制爬虫程序访问服务器资源和获取数据的行为称之为反爬虫,爬虫程序的访问速率和目的与正常用户的访问速率和目的是不同的,大部分爬虫会无节制地对目标应用进行爬取,这给目标应用的服务器带来巨大的压力。爬虫程序发出的网络请求称之为“垃圾流量”。开发者为了保证服务器的正常运转或降低服务器的压力与运营成本,不得不使出各种各样的技术手段来限制爬虫对服务器资源的访问
避免浪费服务器资源
因为爬虫占总PV比例较高。通过程序进行对URL请求去获得数据的成本是非常低的,从而造成大量低质量网页爬虫在网络横行,对目标网站产生大量的访问,导致目标网站的服务器资源大量消耗,轻则影响正常用户的访问速度,重则造成DDOS攻击导致网站服务不可用
尽可能保护数据大量泄露
虽然所有网站的数据都是共享给用户浏览查阅的,目前市面上很多成熟的爬虫软件可以大批量对一些网站数据进行采集,如果网站不加以施加必要的反爬虫技术手段,竞争对手则可以批量采集网页信息。长时间的积累带给企业的竞争力就会大大增加
1、“新手”爬虫
此类爬虫多出自于一些处于兴趣爱好的“新手”。此类爬虫通常简单粗暴,不会考虑服务器端面临的压力,加上人数不可预测,很容易带给网站流量压力
2、“失控”爬虫
目前市面上绝大多数网站或多或少都做了一些相应的反爬虫措施。甚至很多爬虫在初期阶段并不会触碰到反爬禁忌,随着时间的慢慢推移当初的爬虫因为反爬措施的生效已不能正常采集数据或数据是错误的蜜罐数据,但是爬虫一旦不及时停止成为某些服务器上托管的小爬虫不间断的工作仍为造成对网站的影响
3、“成型”爬虫
数据作为很多创业公司甚至成型商业对手的产品依托,此类爬虫拥有成熟的体系方案(包括不限于:资金、技术…),这个时候任何反制措施都不能彻底抵制爬虫对数据的采集,只能通过不断升级遏制爬虫的效率跟增加爬虫所要付出的“代价”从而提高数据获取的成本
基于请求频率或总请求量进行反爬,因为爬虫的行为与普通用户有着明显区别,爬虫的请求频率与请求次数一般高于普通用户
1、通过请求IP/账号单位时间内总请求数量进行反爬
反爬原理: 正常浏览器请求网站,速度不会太快,同一IP/账号如果产生大量请求,将会判定识别为爬虫行为
2、通过同IP/账号请求之间的间隔时间分析进行反爬
反爬原理: 正常用户在操作浏览器浏览网站,请求之间的时间间隔是随机的,而爬虫前后两个请求之间时间间隔通常比较固定,同时时间间隔比较短,因此可以用来做反爬
3、通过蜜罐(陷阱)进行反爬
反爬原理:在爬虫获取链接进行请求的过程中,爬虫会根据正则、XPATH或CSS等方式进行后续链接的抽取,此时服务端可以设置一个陷阱URL,会被提取规则捕获提取,但我们的正常用户无法获取,能有效区分爬虫和正常用户
4、根据爬取行为触发深层次连环反制措施
反爬原理:服务器通过分析识别一旦判定该行为是爬虫行为将采用更为严厉的反制措施
另外还有如下多种情况:
1、通过headers字段反爬
反爬原理: 因headers中有很多字段组成,其中的某些字段可以用来进行判断对方的行为是否是爬虫
cookies: 通过检查cookies来查看发起请求的用户是否
具备相应的权限,以此来进行反爬
referer: 爬虫默认情况下不会待referer字段,服务器端可以通过判断请求发起的源头,以此判断请求是否合法
user-agent: 爬虫默认情况下是没有带user-agent这个字段的
2、通过请求参数反爬
反爬原理: 服务器在接受客户端请求时,需携带请求相应的参数,由此服务器端可以通过校验请求参数是否正确来判断是否为爬虫
通过JS生成请求参数,以此来增加分析、获取参数难度。
通过发送请求生成请求参数,以此来增加获取参数难度
在html静态文件中放置参数数据,以此来增加获取请求参数难度
采用多种技术手段来防护网站数据资产以及对响应中含有的数据进行特殊化处理,截止目前市面上常见的一些反爬虫手段涵盖但不限于:文本混淆、页面动态渲染、请求签名校验、验证码、js混淆等
其中文本混淆包含css偏移、图片伪装文本、自定义字体
1、CSS偏移反爬
反爬原理:源码数据不为真正数据,需要通过CSS位移才能产生真正数据。利用CSS来将浏览器中显示的文字,在HTML中以乱序的方式存储,从而来限制爬虫。利用CSS样式将乱序的文字排版成人类正常阅读顺序的反爬虫手段
2、图片伪装反爬
反爬原理:用图片替换原来文本内容,从而让爬虫程序无法直接正常获取数据
3、自定义字体反爬
反爬原理:使用@font-face为网页指定字体。将自定义字体文件放在Web服务器上,并在CSS样式中使用它。面对爬虫程序时,没有相应的字体映射关系,是无法直接获取到有效数据的
4、页面动态渲染反爬
反爬原理:页面内容由JS渲染而成,真数据则通过 Ajax接口等形式获取的,通过获取网页源代码,无法直接获取效数据信息
5、页面动态渲染反爬
反爬原理:目前几乎所有的应用程序在涉及到用户信息安全的操作时,都会弹出验证码让用户进行识别。以确保该操作为正常用户行为
4、请求签名校验反爬虫
反爬原理:签名验证是防止服务器被恶意链接和篡改数据的有效方式之一,也是目前后端API最常用的防护方式之一。签名是一个根据数据源进行计算或者加密的过程,用户经过签名后会一个具有一致性和唯一性的字符串,从而可以有效的避免服务器端,将伪造的数据或被篡改的数据当成正常数据处理,爬虫则需要破解该参数的加密方法,这无疑进一步提升了爬虫采集的难度
云计算成为趋势、AI技术不断突破,同时爬虫另有花样技术的层出不穷。很多企业逐渐选择加入第三方势力,云计算厂商可直接为企业提供云端反爬能力,将曾经传统的战局从反爬虫与爬虫的1v1演变成了企业+云厂商与爬虫的2v1模式,助力企业的反爬能力。一些厂商的智能风控系统防护针对爬虫来说面临着极大的挑战。如:网易的易盾、数美验证码、瑞数全新一代WAF、白云山科技Baishan Canvas平台以及Cloudflare Bot Managent
好了,到这里又到了跟大家说再见的时候了。创作不易,帮忙点个赞再走吧。你的支持是我创作的动力,希望能带给大家更多优质的文章