社区
教程
Wiki
注册
登录
创作新主题
社区所有版块导航
Python
python开源
Django
Python
DjangoApp
pycharm
DATA
docker
Elasticsearch
分享
问与答
闲聊
招聘
翻译
创业
分享发现
分享创造
求职
区块链
支付之战
aigc
aigc
chatgpt
WEB开发
linux
MongoDB
Redis
DATABASE
NGINX
其他Web框架
web工具
zookeeper
tornado
NoSql
Bootstrap
js
peewee
Git
bottle
IE
MQ
Jquery
机器学习
机器学习算法
Python88.com
反馈
公告
社区推广
产品
短视频
印度
印度
一周十大热门主题
【深度学习】目标检测的常用数据处理方法!
【Nucleic Acids Research】利用生成式深度学习模型设计蓝藻细菌的合成启动子
本周推荐的6个火火火的Github开源项目!
GitHub(微博搜索)-20240416-1
融合ChatGPT+DALL·E 3,贾佳亚团队新作开源畅玩:识图推理生图一站解决
【生物催化】一种实用的机器学习辅助蛋白质工程研究范式
【东方金工·上海线下沙龙】深度学习与量化投资
GitHub(微博搜索)-20240414-1
ChatGPT Plus等用户,可使用最新GPT-4 Turbo模型
【一个机器学习知识库,涵盖了从基础到高级主题的机器学习知识,包括-20240413124243
关注
Py学习
»
Python
关于 Python 反爬虫,我有几点想说的
AirPython
• 3 年前 • 546 次点击
今天来谈谈关于反爬虫的东西。
随着大数据时代的来临,无论是个人还是企业,对于数据的需求都越来越大。这种需求也催生了如今异常热门的数据产业,也催生了日益完善的网络数据采集技术。
这种需求的扩大, 同时让网络爬虫日益猖獗,猖獗到甚至影响到了网站和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、协议里申明权利
网站的所有者必须在网站协议或用户协议里申明,允许正常的浏览、访问和数据获取,对于异常、高频、威胁网站服务器稳定的行为,将保留进一步处理的权利。
四、最后
没有一个城池是固若金汤的,也没有一个措施可以阻挡所有疯狂的爬虫。面对爬虫的行为,利用各种技术建立一个行之有效的识别、分级和处理机制,才能既保得网站的开放,才能获得网站的稳定。
留言送书
今日赠书:《Python入门到人工智能实战》
上周中奖名单:
今日留言主题
你觉得爬虫过程中,哪种反爬最难搞?
推荐阅读
爬虫,我想再推荐 6 个工具
我花 1 分钟写了一段爬虫,帮助小姐姐解放了双手
摸鱼篇,快速构造 Python 爬虫请求头
THANDKS
- End -
Python社区是高质量的Python/Django开发社区
本文地址:
http://www.python88.com/topic/62571
546 次点击
登录后回复