反爬虫简述
爬虫程序的访问速率和目的与正常用户的访问速率和目的是不同的,大部分爬虫会无节制地对目标应用进行爬取,这给目标应用的服务器带来巨大的压力。爬虫程序发出的网络请求被运营者称为 "拉圾流量"。
开发者为了保证服务器的正常运转或降低服务器的压力与运营成本,不得不使出各种各样的技才手段来限制爬虫对服务器资源的访问。因为爬虫和反爬虫是综合技术的应用,反爬虫的现象与爬虫程师所用的工具和开发语言有关,甚至与爬虫工程师的个人能力也有一定关联.所以反爬虫的概念常模糊,业内并没有明确的定义。?简而言之,限制爬虫程序访问服务器资源和获取数据的行为称为反爬虫。限制手段包括但不限于请求限制、拒绝响应、客户端身份验证、文本混淆和使用动态渲染技术。这些限制根据出发点可以分为主动型反爬虫和被动型反爬虫。
(1)主动型反爬虫:开发者有意识地使用技术手段区分正常用户和爬虫,并限制爬虫对网站的议问行为,如验证请求头信息、限制访问频率、使用验证码等。
(2)被动型反爬虫:为了提升用户体验或节省资源,用一些技术间接提高爬虫访问难度的行为比如数据分段加载、点击切换标签页、鼠标悬停预览数据等。
(3)除此之外,还可以从特点上对反爬虫进行更细致的划分,如信息校验型反爬虫、动态渲染型反爬虫、文本混淆型反爬虫、特征识别型反爬虫等。需要注意的是,同一种限制现象可以被归类到不同的反爬虫类型中,比如通过JavaScript 生成随机字符串并将字符串放在请求头中发送给服务器,由服务器校验客户端身份的这种限制手段既可以说是信息校验型反爬虫,又可以说是动态渲染反爬虫。
反爬虫不仅要了解网站流量情况,还需要了解爬虫工程师常用的手段,并从多个方面进行针对性的防护。反爬虫的方案设计、实施和测试等都需要耗费大量的时间,而且往往需要多个部门配合才自完成。从这个角度来看,除了技术难度外,时间成本也是非常高的。
经济方面的开支通常有IP代理费用、云服务器购买费用、VIP账户开通费用等。除此之外、还要耗费比反爬虫更多的时间,这是因为当目标网站的算法或者网页结构更改时,爬虫代码也需要做对应的改变,有时候甚至需要重写代码。我们可以通过下表了解到它们之间针锋相对又互相进步的关系:
爬虫 | 反爬虫 |
Python 代码向目标网站发起网络请求,爬取网站数据 | 监控到异常流量,如果请求并非来自汉网站数据则拒绝请求 |
模拟浏览器标识,欺骗目标网站 | 监控到大量请求均来自同一个浏览器标识,考虑爬虫伪造,限制访问频率 |
使用IP轮换或多机的方式对目标网站发起请求 | 在一些人口或表单处增加验证码,以区别正常用户和爬虫 |
简单的验证码可以通过代码识别,复杂的验证码则通过接入打码平台,继续对目标网站发起请求 | 完善账号体系,规定只有VIP才能浏览关键信息,避免珍贵的数据被爬虫大规模爬取 |
注册多个账号并开通网站VIP | 自定义混淆规则对网站的重要信息进行混淆,增加爬虫识别难度 |
当解密成本较高时,采用屏幕截图的方式获取关键数据 | 根据自动化测试框架或浏览器的特征区别用户和爬虫 |
成本太高,有可能放弃爬取 | 成本太高,无法完全限制爬取 |
爬虫与反爬虫都是综合技能的应用,其中涉及的技术包括web开发,服务器,数据传输,编程语言特性和工具特性等。