浅谈网络爬虫技术与反爬虫防护

安全 应用安全
网络爬虫按照实现的技术和结构可以分为以下几种类型:通用网络爬虫、聚焦网络爬虫、增量式网络爬虫、深层网络爬虫等。在实际的网络爬虫中,通常是这几类爬虫的组合体。

​什么是网络爬虫

网络爬虫本质上是一段计算机程序或脚本,其按照一定的逻辑和算法规则自动地抓取互联网信息。

网络爬虫的分类及技术原理

网络爬虫按照实现的技术和结构可以分为以下几种类型:通用网络爬虫、聚焦网络爬虫、增量式网络爬虫、深层网络爬虫等。在实际的网络爬虫中,通常是这几类爬虫的组合体。

1、通用网络爬虫(Scalable Web Crawler)

通用网络爬虫又叫作全网爬虫,爬取的目标资源在整个互联网上,由于信息量巨大,常用于大型的搜索引擎中。它主要由初始化URL集合、URL队列、页面爬行模块、页面分析模块、数据库等构成。具体步骤是首先选取部分种子URL,将这些URL放入待抓取URL队列,进行循环提取,一旦满足停止条件则不再进行网络爬虫搜索。通用网络爬虫由于抓取的信息巨大,常使用分布式网络爬虫框架进行设计实现。

图片

图1-1 通用网络爬虫原理及过程​

2、聚焦网络爬虫(Focused Crawler)

聚焦网络爬虫,也叫主题网络爬虫,是指按照预先定义好的主题,有选择地进行相关网页爬取的一种爬虫。和通用网络爬虫的区别在于,聚焦网络爬虫在实施页面抓取时会对内容进行处理筛选,将爬取的目标网页定位在与需求相关的页面中。目前爬虫应用中绝大多数是聚焦爬虫。

图片

图1-2 聚焦网络爬虫示例PYTHON代码

3、增量式网络爬虫(Incremental Web Crawler)

增量式网络爬虫在爬取网页的时候只会在需要的时候爬取新产生或发生更新的页面,对于没有发生变化的页面则不会爬取。这样能有效地减少数据下载量并及时更新已爬取过的网页,减少时间和存储空间上的浪费,但该算法的复杂度和实现难度更高。应用场景包括某电商网站会实时更新一批最近商品,书籍网站根据作者创作的进度实时更新最新的章节数据等,遇到类似的场景时,便可以采用增量式网络爬虫。

为了使爬虫获取到的数据以增量的形式稳定增长,增量爬虫的核心就是去重。Redis中的Set集合具有天然的去重属性,所以往往采用的策略是将爬取过程中产生的URL进行存储,存入到Redis中的Set中,当下次再爬取的时候,对在存储的URL中的Set中进行判断,如果URL存在则不发起请求,否则就发起请求。

4、深层网络爬虫

Web页面按存在方式可以分为表层网页(Surface Web)和深层网页(Deep Web)。表层网页指的直接使用静态的超链接就可以直接访问的静态页面。深层网页指的是那些大部分内容不能通过静态链接获取的、隐藏在搜索表单后面的,需要用户提交一些关键词才能获得的Web页面。

反爬虫

一方面,爬虫技术容易造成网站带宽资源的侵占,有些恶意爬虫可能会对服务器发起Dos攻击严重导致服务器瘫痪,另一方面从法律上讲,不正当的爬虫行为还会造成用户隐私的泄露,有的甚至导致公司的重要资源被批量爬取,丧失市  场竞争力。在这种背景下,发展反爬虫技术尤为重要。

反爬虫技术是使用技术手段,阻止别人批量获取自己网站信息的一种方式。技术关键也在于批量自动化处理。反爬虫的目标是将正常的用户流量和爬虫流量进行区分,并阻止爬虫访问内部真实数据。在实际反爬虫的过程中,错误的将普通用户识别为爬虫被称为误伤率。通常来说,拦截率越高的反爬虫策略,误伤的可能性就越高,因此需要做权衡。

反爬虫技术手段

针对恶意爬虫,可通过软件和硬件两方面进行反爬虫技术防护,采取如下措施来识别和阻断它。

1、软件方面

1.1 限制User-Agent字段

软件编码中User-Agent字段可以携带一串包括浏览器、操作系统、CPU等用户设备信息的字符串,如果请求来自非浏览器,就能识别其为爬虫,阻止爬虫抓取网站信息。其缺点是攻击者很容易将爬虫请求的User-Agent字段伪装成特定地址轻而易举绕过这一规则。

1.2 数据加密

前端对一些关键请求参数,如一些用户信息类,地址类进行加密,用加密后的数据请求服务器,这样网络爬虫由于不知道密钥,就无法进行模拟请求服务器。

1.3 验证码

使用验证码可以防止应用或者网站被恶意注册、攻击,对于网站、APP而言,大量的无效注册、重复注册甚至是恶意攻击很令人头痛。数字、字母加干扰线、噪点,字母重叠摆放,文字点选,滑动拼图,图片选择,点击验证,鼠标轨迹等等,无论何种形式的验证码,其根本目的都是为了实现人机识别,通过交互来验证发起请求的是人还是机器。

1.4 使用蜜罐系统

蜜罐最早是来自于网络攻防中,主要指防守方故意设置一个或多个服务器漏洞,让攻击方轻易地入侵进来,而这些服务器一般安装了监控软件用来监控入侵者的一举一动。

蜜罐技术作为主动欺骗防御技术的核心,通过暗设陷阱,主动诱导攻击,动态感知攻击行为并定位攻击源,从而可以对攻击行为进行捕获和分析,推测攻击意图和动机来进行防御,保障网络的安全运行。目前市面上一些主流云服务系统均搭建了蜜罐系统进行反爬虫防御。

2、硬件方面

2.1 防火墙/服务器限制IP

爬虫自动化程序一般对服务器内容的访问量大,不同于正常用户,通过在服务器或者防火墙将访问量大的IP地址加入黑名单,禁止其访问。不过限制IP缺点也很明显,攻击者可以通过IP代理的方法实现换IP的目的,来从而避免其IP加入黑名单。

2.2 部署Web应用防火墙WAF

WAF是检测机器爬虫流量最常用的硬件产品,常用三种方式:Robot检测(识别User-Agent)、开启JS脚本反爬虫网站反爬虫(检查浏览器合法性)和CC攻击防护(限制IP/Cookie/Referer访问者对特定路径访问频率),来解决业务网站遭受的爬虫问题。

另外,目前一些云WAF厂商在此基础上,还提供了智能的反爬虫模块,有的产品基于AI分析引擎,通过流量画像匹配用户爬虫,从而建立模型和行为标签,提供爬虫和IP情报,使用户快速识别爬虫行为,从而进行相关的干预。

风险和挑战

由于篇幅有限,一些技术细节并未开展详细说明。但随着大数据、人工智能时代的来临,爬虫与反爬虫注定不仅仅是一场无休止的战斗,而且还越来越具备智能交互、模型分析、决策判断等技能。这给实际运维带来新的挑战,我们将持续关注该领域发展,提升抵御网络爬虫风险的各种能力。

责任编辑:武晓燕 来源: 匠心独运维妙维效
相关推荐

2022-09-14 23:06:45

爬虫反爬虫数据

2022-08-17 13:30:43

爬虫Python

2018-07-02 14:12:26

Python爬虫反爬技术

2017-05-16 15:33:42

Python网络爬虫核心技术框架

2020-05-21 09:25:17

2017-04-27 20:45:48

爬虫反爬虫

2021-03-18 14:35:36

爬虫技术开发

2016-08-17 23:53:29

网络爬虫抓取系统

2022-01-26 00:19:17

2021-04-25 21:18:27

技术开发爬虫

2019-10-29 07:01:02

网络爬虫网络安全网络攻击

2016-08-18 00:21:12

网络爬虫抓取网络

2016-08-18 00:04:09

网络爬虫抓取系统服务器

2020-11-02 10:50:21

爬虫Python网络

2017-05-15 10:39:48

爬虫应对机制

2020-08-03 08:01:50

爬虫技巧

2020-10-19 19:25:32

Python爬虫代码

2016-10-20 20:21:09

Python爬虫技巧

2020-10-10 06:21:15

爬虫互联网

2021-03-25 11:24:25

点赞
收藏

51CTO技术栈公众号