企业如何有效的防爬虫?

news/2024/7/19 8:37:10 标签: 爬虫, python, 开发语言, 人工智能, 数据抓取

爬虫,简单来说,就是在尽量减少对正常用户的干扰的情况下尽可能的加大爬虫的成本。

而反防爬虫,或者说制造隐蔽性强的爬虫,就是尽量模拟正常用户的行为。

这两者是动态博弈的。大公司基本都有防爬的项目,以保护数据安全。

你去试试爬几个大网站就知道了。
在这里插入图片描述

比如,github用的是ratelimit,就搜索接口而言,对非登录用户限制非常严格,一小时只允许几十次搜索。而对登录账号则很宽松。这样就把行为统计规约到了账号上,毕竟换账号成本比ip高。

而谷歌则更复杂,比如它会在网页中执行一段js,js中做一些校检,然后服务器端将请求数据对比,这样那些不支持动态解析的爬虫就都死了。

另外谷歌也会维护一份爬虫ip列表,这样即使你使用爬虫ip也很容易死,当然很多收费爬虫ip使用的是一些黑科技,确实可以绕过这份列表。

阿里内部也有一套专门的防爬系统,用的一个比较复杂的建模策略,能够直接无视爬虫ip的更换,从行为模式上检测出爬虫。比如一些特定数据受到非正常量级的请求,那么就可以判定有人在做坏事了。

当然防爬有误报是正常的,所以一般反爬系统都要做一个容限,只有超过一定阀值了才会bang掉你。即使bang掉了,一般也是让你填一个验证码。无论你是做验证码识别,还是花钱人肉打码,他的目的其实都达到了:增加爬取者的成本。

所以简单来说,一个成功的爬虫,需要这几个特点:

模拟浏览器提交

简单的,使用webkit来提交数据,这个基本可以过大多数浏览源检测的反爬系统了。

但是有的反爬系统检测浏览源的时候,会根据大众浏览器的一些特性,比如IE,Firefox,Chrome等的私有js函数来判定浏览器,这样webkit,以及一些封装好的无界面浏览器也被当成爬虫了。当然,你也可以利用调用chromuim来爬取数据,但是这个资源开销就更大了。

控制单ip/账号频率

挂私有爬虫ip来爬的就不说了,大家都会用,但是对于一般人来说,几万ip差不多是极限了,所以一个ip还是得多次请求,账号同理。而控制了爬取速度,则意味着爬完一圈需要更多时间。时间都是成本。

控制爬取策略

如果简单的只对目标数据进行爬取,那么如果反爬系统对访问概况和用户行为进行分析,其实很简单就能判定爬虫的那堆ip:你除了这堆数据什么都没访问,一看就不是正常用户。

当然策略这个东西,就需要更多的博弈了。爬虫要增加迷惑度,需要去访问一些无关的东西,最后是研究正常用户的访问流程,然后模拟一遍。再者,控制速度。毕竟反爬系统的统计区间是肯定有限制的,不可能拿一个月的数据都分析一遍找出爬虫

以上,其实懂了爬虫的策略,反爬策略也很明朗了。

爬虫成本

反爬系统的存在,意义就在于增加这个成本。当然也需要衡量自身的成本,毕竟不能本末倒置,反爬成本太高就没价值了。


http://www.niftyadmin.cn/n/13532.html

相关文章

计算机毕业设计Java垂钓分享交流网的设计与实现(源码+系统+mysql数据库+lw文档)

计算机毕业设计Java垂钓分享交流网的设计与实现(源码系统mysql数据库lw文档) 计算机毕业设计Java垂钓分享交流网的设计与实现(源码系统mysql数据库lw文档)本源码技术栈: 项目架构:B/S架构 开发语言:Java语言 开发软件:idea ecl…

基于Springboot旅游网站管理系统、Springboot旅游线路和景点网站系统设计与实现 毕业设计开题报告

本科生毕业论文 基于java(springboot框架)旅游网站管理系统 开题报告 学 院: 专 业: 计算机科学与技术 年 级: 学生姓名: 指导教师&…

关于我对线程安全问题中死锁的理解

文章目录1.什么是死锁2.三个典型情况3.可重入与不可重入4.死锁的四个必要条件5.如何破除死锁1.什么是死锁 比如张三谈了一个女朋友,张三就对这个女朋友加锁了。 此时李四也看上了这个女生,但是他只能等待张三分手(解锁)后&#xf…

并查集的学习

并查集是一种树型的数据结构,并查集可以高效地进行如下操作: 1、查询元素p和元素q是否属于同一组 2、合并元素p和元素q所在地组 并查集结构: 是一种树型结构,这棵树地要求比较简单 1、每个元素都唯一对应一个节点 2、每一组数…

CSS盒子模型

🍓个人主页:bit.. 🍒系列专栏:Linux(Ubuntu)入门必看 C语言刷题 数据结构与算法 HTML和CSS3 目录 1.盒子模型 1.2盒子模型(Box Model)组成 1.3边框(border) 1.4 表格的…

Java多线程之相关拓展(静态代理和Lamda表达式演变)

Java多线程拓展之静态代理和Lamda表达式演变一、静态代理1、概念2、优点3、样例二、Lamda表达式(演变过程展示)1、定义一个函数式接口并实现类(最初状态)2、静态内部类(状态演变2)3、局部内部类&#xff08…

复习计算机网络——第三章记录(1)

数据链路层 功能:通过一些数据链路层的协议,在不太可靠的物理链路上实现可靠的数据传输。 相关基本概念: 1、结点(node):网络中的主机(host)和路由器(router&#xff…

【c++】STL--string

前言 最开始我们学习c语言的时候,我们发现刷题或者写代码都是比较麻烦的,如果说用c语言造一辆车,那么我需要用c语言先把轮子造好--各个零件,当我们造好之后再组装。那么c则是造好了轮子,只需要我们组装就好了。这里的的…