一、为什么要反爬虫?
在设计反爬虫系统之前,我们先来看看爬虫会给网站带来什么问题?
本质上来说,互联网上可以供人们浏览、查看和使用的网站及其网站上的数据,都是公开和允许获取的,所以并不存在于所谓的“非法授权访问”问题。
爬虫程序访问网页和人访问网页没有本质区别,都是由客户端向网站服务器发起HTTP请求,网站服务器接收到请求之后将内容响应返回给客户端。
只要是发起请求,网站服务器必然要进行响应,要进行响应,必然要消耗服务器的资源。
网站的访问者与网站之间是互相互惠互利的关系,网站为访问者提供了自己所需要的必要的信息和服务,而访问者也为网站带来了流量、访客、活跃度。因此,网站所有者会愿意使用服务器的带宽、磁盘和内存,以便为访问者提供服务。
而爬虫程序呢?无异于白嫖党。成倍地消耗网站服务器资源、占用服务器带宽,却不会为网站带来一丝的利益,甚至于,最后的结果是有损于网站本身的。
爬虫,可能算得上是互联网里的非洲鬣狗了,也难怪遭网站的所有者讨厌了。
二、识别爬虫
既然讨厌爬虫,所以要将爬虫拒之于网站的门外了。要拒绝爬虫的访问,首先当然要识别出网络访问者中的爬虫程序。如何识别呢?
1. HTTP请求头
一般的网络访问者会使用浏览器对网站进行访问,因此这个识别是针对最基础的网络爬虫的。而浏览器都会带上自己的请求头以表明自己的基础信息。HTTP请求头容易被爬虫程序突破,因为任何人都可以修改和伪造。
2. Cookie值
Cookie通常被用于识别网站访问者的身份,类似于手中的一张临时身份证。并凭着这个凭着与网站服务器进行身份的校对。很遗憾,Cookie保存在客户端,并且能够被修改和伪造。
3. 访问频率
当一个访问者每秒钟请求网站的某个页面,或者在几秒内请求了数百次这个页面时。这个访问者不是爬虫程序就有鬼了。有哪个人类可以快速和频繁地点击鼠标来访问一个页面?他是否患有帕金森氏症或者是八爪鱼转世?
通过访问频率来识别爬虫程序是可行的,但是爬虫程序也能通过使用大量的代理IP来实现一个IP地址只访问了一次的效果,也可以通过随机的请求时间间隔规避。
4. 鼠标行为轨迹
普通的人类访问者在浏览网页时,不会像机器一样按部就班地移动鼠标并点击。而鼠标的移动和点击,是可以通过JS脚本捕获到的,所以可以通过判断访问者的鼠标行为轨迹来判断访问者是否为爬虫程序。
5. token值
许多网站现在采用前后端分离的开发方式,由后端接口返回数据给前端,前端在拿到数据后再结合页面进行渲染。所以很多爬虫程序都直接找数据接口,而不是傻傻地请求页面了。token就用在验证这些后端数据接口上。通常,Token是由某些数据经过时间和网页密钥的组合加密而成的。
还有更多地识别爬虫的手段在此就不一一进行介绍。可惜的是,无论上述何种方式用于辨认网络爬虫,都存在可能被爬虫欺骗或穿透的风险。
三、拒绝爬虫
就像没有一劳永逸的网站安全防护一样,十年前把3389端口一关,就能防止服务器成为肉鸡,如今各种防火墙、各种安全措施都加上了,还有可能因为某个0Day漏洞被勒索。
爬虫与反爬虫之间,也永远都在斗争和升级。网络攻防和反爬虫之间的区别在于,前者是一场无限制的搏斗,而后者则像参加奥运会的拳击选手那样戴着手套和头盔。
网站为了运营,势必要对外开放内容,而开放的内容就像是飘忽在非洲大草原的腐肉和血腥味,直勾勾地吸引着鬣狗的到来。
在开放内容和避免沦为爬虫的数据矿池之间平衡,是一个难事。
1. 内容上限制内容的开放
开放的内容是获取用户、流量的基础,所以内容必须是开放的。但是内容的开放并不是无限制的开放。未注册用户可以查看一到两篇内容,但无法无限制地浏览所有内容。这种限制可以采取登录、扫码验证或接入谷歌验证码等点击验证机制。
现在已经有越来越多的网站采用了有限内容开放的机制,比如微博、知乎、淘宝等,你可以看到一页两页的内容,但是如果还想继续,对不起请登录。
2. 行为上记录用户操作
需要访问者进行登录并不能解决问题,因为模拟登录一直是网络爬虫程序的一个热门发展分支,无论是图片验证码、拼图、滑块还是点选汉字,都会被突破。编写APP及爬虫程序可以让短信验证码与网站进行通信。
所以记录用户行为必不可少,用户的一切操作和访问行为都需要记录在案,这是分析和处理爬虫的基础。
3. 控制上严厉打击高频行为
从实际上来看,也有很多爬虫程序的运行并非是为了往死里薅网站的数据和内容,仅仅是为了方便进行手工的收集和整理工作,这种类型的爬虫行为一般会比人工浏览的频次要高,但是又显著低于鬣狗般的高频爬虫,对这种类型的爬虫行为可以忽略掉。做人留一线,日后好相见。
但是对于影响网站服务器运行的高频爬虫行为,必须采取措施。结合用户和IP信息,对相关用户或IP进行处理。
4. 协议里申明权利
网站的所有者必须在网站协议或用户协议里申明,允许正常的浏览、访问和数据获取,对于异常、高频、威胁网站服务器稳定的行为,将保留进一步处理的权利。
以上是Python反爬虫的知识点有哪些的详细内容。更多信息请关注PHP中文网其他相关文章!