加入收藏 | 设为首页 | 会员中心 | 我要投稿 西安站长网 (https://www.029zz.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

如何应对网站反爬虫策略?如何高效地爬大量数据?

发布时间:2022-12-05 06:30:59 所属栏目:大数据 来源:互联网
导读: 先说结论:在爬虫与反爬虫的对弈中,爬虫一定会胜利。换言之,只要人类能够正常访问的网页,爬虫在具备同等资源的情况下就一定可以抓取到。
robots.txt 只是约定,爬虫遵守或者不遵守完全在

先说结论:在爬虫与反爬虫的对弈中,爬虫一定会胜利。换言之,只要人类能够正常访问的网页,爬虫在具备同等资源的情况下就一定可以抓取到。

robots.txt 只是约定,爬虫遵守或者不遵守完全在于爬虫作者的意愿。举个例子,公交车上贴着「请为老弱病残孕让座」,但是大部分人并不见得会遵守。一般来讲,只有大的搜索引擎爬虫会遵守你网站的 robots.txt 协议,其它的爬虫基本都不会看一眼你的 robots.txt 写的是什么。

大部分情况下,反爬虫的需求是不能影响到网站正常使用的,一个网站的功能性需求一定高于反爬虫需求,所以大部分网站反爬虫一定不会恶心到正常用户的使用。比如豆瓣电影的电影详情页是 「movie.douban.com/subject/26266072/」,其中可变部分为后面代表每部电影的数字编号,豆瓣绝不会为了反爬虫将网页 URL 结构替换成淘宝的 URL 那样复杂。同理百度也一定不会要求你每次访问就输入一个验证码,来确认你是人类而不是机器。所以这里首先需要明确一个概念就是:只能尽可能加大爬虫抓取数据的代价,而不可能做到百分之百防止爬虫。

----------------

那么,如何加大爬虫的抓取难度呢?下面根据自己做 Anti-Spider 的一点经验,胡说几句吧。

首先,最简单的方式便是校验 User-Agent。校验 User-Agent 其实并不能起到反爬虫的作用,因为几乎所有写爬虫的人,看到的前三篇教程里,就会有一篇讲到要模拟 User-Agent。除了 User-Agent,所有通过 HTTP 请求传递到服务器的客户端参数都不能完全当做反爬虫的依据,因为模拟和伪造的成本太低了。

然后,一个比较常见的反爬虫策略是基于访问数量,爬虫的访问总数会远高于人类,设定一个阈值,超过阈值的就是爬虫。常见使用这样处理方式的网站有 58 同城等,在访问 58 同城较快时,会弹出一个验证码。然而只要有规律的 sleep,就可以轻松绕过这条限制。

这种处理方案的升级版是找到人与爬虫访问特征的不一致究竟在哪里。爬虫与人类在访问特征上最大的不一样在于,人不会长时间持续访问一个网站,正常人类在天级的时间周期里访问一个网站的总次数 y 大致满足——

0)">y = k*x^{a} (0< a < 1, k > 0)

我们不关心 k、a 的值具体是什么,但是比较明显的是,一个正常用户访问会在较短时间里完成某一时间周期的总请求数的绝大部分。映射到总用户上,确定的一段时间里,正常用户访问的总页数会在某个量级时开始骤减。

而爬虫访问一个网站的总次数 y 与某个时间周期的关系则大致为——

0)">y = k*x(k > 0)

其实就是,爬虫的访问数量会随着时间增长而线性增长。于是,根据这样的特点,可以参考人类社会的个人所得税制度或者阶梯电价制度,对于一个较短周期设置比较宽的阈值,而随着时间长度的增加而逐步收紧阈值。当然,具体的阈值设置为多少合适,要根据特定网站的日志分析之后得出具体数据。

到这里,很多爬虫已经会开始表现的精力不足了。大部分爬虫会直接命中短时间的策略被封,那些 sleep 一下的爬虫,在爬取一段时间之后,依然会命中中长时间的策略。如果再 sleep,抓取的效率太低,成本与收益不成正比,自然就不会再抓了。

对应的,爬虫的开发者会想办法继续反反爬虫。常见的方案是通过代理 IP 和批量注册的账号。那些大规模抓取数据的爬虫,为了能够长时间抓取数据,一般是不会跑在个人电脑上的,而是通过云服务器或者 VPS。再进一步的识别爬虫,则可以根据来访 IP 的风险属性进一步识别。一般需要这样处理的话,都是一些中大型的商业网站了。个人网站一来没必要大数据爬虫,二是没有精力,一般不会更进一步反爬虫了。

-----------------

最后,再最后水一下不再更新的破爬虫相关博客:

爬虫必备——requests

01. 准备

02. 简单的尝试

番外篇. 搭建称手的Python开发环境

03. 豆瓣电影TOP250

04. 另一种抓取方式

05. 存储

06. 海量数据的抓取策略

07. 反爬机制

08. 模拟登录

09. 通过爬虫找出我和轮子哥之间的最短关注链

(编辑:西安站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!