网站反爬虫策略

今天来谈谈关于反爬虫的东西。

随着大数据时代的来临,无论是个人还是企业,对于数据的需求都越来越大。这种需求也催生了如今异常热门的数据产业,也催生了日益完善的网络数据采集技术。

这种需求的扩大, 同时让网络爬虫日益猖獗,猖獗到甚至影响到了网站和APP的正常运行。

高频的网络爬虫行为无异于DDOS(分布式拒绝服务)攻击,虽然法律可以治它,但是其过程之繁琐,还是不如先让网站自身充分地强大起来。

为了便于基础薄弱的同学理解,我们先看一个基本的网站访问链路图:

这其中包含了我们从个人电脑的浏览器上访问一个网页所涉及的所有部件。同时我们可以将其简化为下图:

一、为什么要反爬虫?

在设计反爬虫系统之前,我们先来看看爬虫会给网站带来什么问题?

本质上来说,互联网上可以供人们浏览、查看和使用的网站及其网站上的数据,都是公开和允许获取的,所以并不存在于所谓的“非法授权访问”问题。

爬虫程序访问网页和人访问网页没有本质区别,都是由客户端向网站服务器发起HTTP请求,网站服务器接收到请求之后将内容响应返回给客户端。

只要是发起请求,网站服务器必然要进行响应,要进行响应,必然要消耗服务器的资源。

网站的访问者与网站之间是互相互惠互利的关系,网站为访问者提供了自己所需要的必要的信息和服务,而访问者也为网站带来了流量、访客、活跃度。所以网站的所有者会愿意消耗服务器的带宽、磁盘、内存,为访问者提供服务。

而爬虫程序呢?无异于白嫖党。成倍地消耗网站服务器资源、占用服务器带宽,却不会为网站带来一丝的利益,甚至于,最后的结果是有损于网站本身的。

爬虫,可能算得上是互联网里的非洲鬣狗了,也难怪遭网站的所有者讨厌了。

二、识别爬虫

既然讨厌爬虫,所以要将爬虫拒之于网站的门外了。要拒绝爬虫的访问,首先当然要识别出网络访问者中的爬虫程序。如何识别呢?

1、HTTP请求头

这算是最基础的网络爬虫识别了,正常的网络访问者都是通过浏览器对网站进行访问的。而浏览器都会带上自己的请求头以表明自己的基础信息。而这也是最容易被爬虫程序突破的识别手段,因为HTTP请求头谁都可以进行修改和伪造。

2、Cookie值

Cookie通常用来标识网站访问者的身份,就像是手上的一张临时凭证。并凭着这个凭着与网站服务器进行身份的校对。很遗憾,Cookie是保存在客户端的数据,也可以被修改和伪造。

3、访问频率

如果一个访问者,每隔1秒请求一次网站的某个页面,或者一秒钟请求了几百次这个页面。这个访问者不是爬虫程序就有鬼了。试问人类中有谁能快速和频繁地点击鼠标访问一个页面?他是得了帕金森综合征还是八爪鱼转世?

通过访问频率来识别爬虫程序是可行的,但是爬虫程序也能通过使用大量的代理IP来实现一个IP地址只访问了一次的效果,也可以通过随机的请求时间间隔规避。

4、鼠标行为轨迹

正常人类访问者浏览网页势必不会像机器一样,机械地移动和点击鼠标。而鼠标的移动和点击,是可以通过JS脚本捕获到的,所以可以通过判断访问者的鼠标行为轨迹来判断访问者是否为爬虫程序。

5、token值

现在很多网站都是前后端分离开发的,数据通过后端接口返回给前端,前端拿到数据再结合页面进行渲染。所以很多爬虫程序都直接找数据接口,而不是傻傻地请求页面了。token就用在验证这些后端数据接口上。token一般通过网页上的某个密钥加上时间再加上某些数据组合加密而成。

还有更多地识别爬虫的手段在此就不一一进行介绍。很遗憾的是,上述任何一种识别爬虫的手段,都有可能被爬虫绕过和突破。

三、拒绝爬虫

就像没有一劳永逸的网站安全防护一样,十年前把3389端口一关,就能防止服务器成为肉鸡,如今各种防火墙、各种安全措施都加上了,还有可能因为某个0Day漏洞被勒索。

爬虫与反爬虫之间,也永远都在斗争和升级。所不同的是,网络攻防是放开手脚的无限制级格斗,而反爬虫则是带着拳套和头盔的奥运拳击。

网站为了运营,势必要对外开放内容,而开放的内容就像是飘忽在非洲大草原的腐肉和血腥味,直勾勾地吸引着鬣狗的到来。

在开放内容和避免沦为爬虫的数据矿池之间平衡,是一个难事。

1、内容上限制内容的开放

开放的内容是获取用户、流量的基础,所以内容必须是开放的。但是内容的开放并不是无限制的开放。非注册用户可以看到一篇内容、两篇内容,但是不能无限地一直看到内容。这个限制,可以是要求登录,可以是要求扫码验证,可以是接入谷歌验证码之类的点击验证机制。

现在已经有越来越多的网站采用了有限内容开放的机制,比如微博、知乎、淘宝等,你可以看到一页两页的内容,但是如果还想继续,对不起请登录。

2、行为上记录用户操作

需要访问者进行登录并不能解决问题,因为模拟登录一直是网络爬虫程序的一个热门发展分支,无论是图片验证码、拼图、滑块还是点选汉字,都会被突破。甚至于短信验证码都可以通过编写APP与爬虫程序和网站之间进行通信。

所以记录用户行为必不可少,用户的一切操作和访问行为都需要记录在案,这是分析和处理爬虫的基础。

3、控制上严厉打击高频行为

从实际上来看,也有很多爬虫程序的运行并非是为了往死里薅网站的数据和内容,仅仅是为了方便进行手工的收集和整理工作,这种类型的爬虫行为一般会比人工浏览的频次要高,但是又显著低于鬣狗般的高频爬虫,对这种类型的爬虫行为可以忽略掉。做人留一线,日后好相见。

但是对于影响网站服务器运行的高频爬虫行为,必须采取措施。结合用户和IP信息,对相关用户或IP进行处理。

4、协议里申明权利

网站的所有者必须在网站协议或用户协议里申明,允许正常的浏览、访问和数据获取,对于异常、高频、威胁网站服务器稳定的行为,将保留进一步处理的权利。

四、最后

没有一个城池是固若金汤的,也没有一个措施可以阻挡所有疯狂的爬虫。面对爬虫的行为,利用各种技术建立一个行之有效的识别、分级和处理机制,才能既保得网站的开放,有能获得网站的稳定。

以上就是网站反爬虫策略的详细内容,更多关于网站反爬虫的资料请关注我们其它相关文章!

(0)

相关推荐

  • python解决网站的反爬虫策略总结

    本文详细介绍了网站的反爬虫策略,在这里把我写爬虫以来遇到的各种反爬虫策略和应对的方法总结一下. 从功能上来讲,爬虫一般分为数据采集,处理,储存三个部分.这里我们只讨论数据采集部分. 一般网站从三个方面反爬虫:用户请求的Headers,用户行为,网站目录和数据加载方式.前两种比较容易遇到,大多数网站都从这些角度来反爬虫.第三种一些应用ajax的网站会采用,这样增大了爬取的难度(防止静态爬虫使用ajax技术动态加载页面). 1.从用户请求的Headers反爬虫是最常见的反爬虫策略. 伪装header

  • 关于爬虫和反爬虫的简略方案分享

    前言 爬虫和反爬虫日益成为每家公司的标配系统. 爬虫在情报获取.虚假流量.动态定价.恶意攻击.薅羊毛等方面都能起到很关键的作用,所以每家公司都或多或少的需要开发一些爬虫程序,业界在这方面的成熟的方案也非常多. 有矛就有盾,每家公司也相应的需要反爬虫系统来达到数据保护.系统稳定性保障.竞争优势保持的目的. 像安全与黑客从来都是相辅相成一样. 爬虫与反爬虫也是在双方程序员的斗智斗勇的过程不断发展和成长的. 抓包 抓包的目的: 分析出协议请求使用的数据,请求接口,参数等等. 常用的抓包分析工具: Fi

  • Python反爬虫伪装浏览器进行爬虫

    对于爬虫中部分网站设置了请求次数过多后会封杀ip,现在模拟浏览器进行爬虫,也就是说让服务器认识到访问他的是真正的浏览器而不是机器操作 简单的直接添加请求头,将浏览器的信息在请求数据时传入: 打开浏览器--打开开发者模式--请求任意网站 如下图:找到请求的的名字,打开后查看headers栏,找到User-Agent,复制.然后添加到请求头中 代码如下: import requests url = 'https://www.baidu.com' headers ={ 'User-Agent':'Mo

  • 浅谈Scrapy框架普通反爬虫机制的应对策略

    简单低级的爬虫速度快,伪装度低,如果没有反爬机制,它们可以很快的抓取大量数据,甚至因为请求过多,造成服务器不能正常工作.而伪装度高的爬虫爬取速度慢,对服务器造成的负担也相对较小. 爬虫与反爬虫,这相爱相杀的一对,简直可以写出一部壮观的斗争史.而在大数据时代,数据就是金钱,很多企业都为自己的网站运用了反爬虫机制,防止网页上的数据被爬虫爬走.然而,如果反爬机制过于严格,可能会误伤到真正的用户请求;如果既要和爬虫死磕,又要保证很低的误伤率,那么又会加大研发的成本. 简单低级的爬虫速度快,伪装度低,如果

  • Python3爬虫学习之应对网站反爬虫机制的方法分析

    本文实例讲述了Python3爬虫学习之应对网站反爬虫机制的方法.分享给大家供大家参考,具体如下: 如何应对网站的反爬虫机制 在访问某些网站的时候,网站通常会用判断访问是否带有头文件来鉴别该访问是否为爬虫,用来作为反爬取的一种策略. 例如打开搜狐首页,先来看一下Chrome的头信息(F12打开开发者模式)如下: 如图,访问头信息中显示了浏览器以及系统的信息(headers所含信息众多,具体可自行查询) Python中urllib中的request模块提供了模拟浏览器访问的功能,代码如下: from

  • Nginx反爬虫策略,防止UA抓取网站

    新增反爬虫策略文件: vim /usr/www/server/nginx/conf/anti_spider.conf 文件内容 #禁止Scrapy等工具的抓取 if ($http_user_agent ~* (Scrapy|Curl|HttpClient)) { return 403; } #禁止指定UA及UA为空的访问 if ($http_user_agent ~ "WinHttp|WebZIP|FetchURL|node-superagent|java/|FeedDemon|Jullo|Ji

  • python爬虫 urllib模块反爬虫机制UA详解

    方法: 使用urlencode函数 urllib.request.urlopen() import urllib.request import urllib.parse url = 'https://www.sogou.com/web?' #将get请求中url携带的参数封装至字典中 param = { 'query':'周杰伦' } #对url中的非ascii进行编码 param = urllib.parse.urlencode(param) #将编码后的数据值拼接回url中 url += p

  • Python爬虫与反爬虫大战

    爬虫与发爬虫的厮杀,一方为了拿到数据,一方为了防止爬虫拿到数据,谁是最后的赢家? 重新理解爬虫中的一些概念 爬虫:自动获取网站数据的程序 反爬虫:使用技术手段防止爬虫程序爬取数据 误伤:反爬虫技术将普通用户识别为爬虫,这种情况多出现在封ip中,例如学校网络.小区网络再或者网络网络都是共享一个公共ip,这个时候如果是封ip就会导致很多正常访问的用户也无法获取到数据.所以相对来说封ip的策略不是特别好,通常都是禁止某ip一段时间访问. 成本:反爬虫也是需要人力和机器成本 拦截:成功拦截爬虫,一般拦截

  • 关于反爬虫的一些简单总结

    爬虫与反爬虫,这相爱相杀的一对,简直可以写出一部壮观的斗争史.而在大数据时代,数据就是金钱,很多企业都为自己的网站运用了反爬虫机制,防止网页上的数据被爬虫爬走.然而,如果反爬机制过于严格,可能会误伤到真正的用户请求:如果既要和爬虫死磕,又要保证很低的误伤率,那么又会加大研发的成本. 简单低级的爬虫速度快,伪装度低,如果没有反爬机制,它们可以很快的抓取大量数据,甚至因为请求过多,造成服务器不能正常工作. 1.爬取过程中的302重定向 在爬取某个网站速度过快或者发出的请求过多的时候,网站会向你所在的

  • python 常见的反爬虫策略

    1.判断请求头来进行反爬 这是很早期的网站进行的反爬方式 User-Agent 用户代理 referer 请求来自哪里 cookie 也可以用来做访问凭证 解决办法:请求头里面添加对应的参数(复制浏览器里面的数据) 2.根据用户行为来进行反爬 请求频率过高,服务器设置规定时间之内的请求阈值 解决办法:降低请求频率或者使用代理(IP代理) 网页中设置一些陷阱(正常用户访问不到但是爬虫可以访问到) 解决办法:分析网页,避开这些特殊陷阱 请求间隔太短,返回相同的数据 解决办法:增加请求间隔 3.js加

  • 详解python 破解网站反爬虫的两种简单方法

    最近在学爬虫时发现许多网站都有自己的反爬虫机制,这让我们没法直接对想要的数据进行爬取,于是了解这种反爬虫机制就会帮助我们找到解决方法. 常见的反爬虫机制有判别身份和IP限制两种,下面我们将一一来进行介绍. (一) 判别身份 首先我们看一个例子,看看到底什么时反爬虫. 我们还是以 豆瓣电影榜top250(https://movie.douban.com/top250) 为例.` import requests # 豆瓣电影榜top250的网址 url = 'https://movie.douban

随机推荐