python爬虫泛滥的解决方法详解


Posted in Python onNovember 25, 2020

我们可以把互联网上搬运数据的程序看成小蚂蚁,它们需要采集不同的食物带回洞里存储。但是大家也知道白蚁泛滥的事件,在我们的网络环境里,如果爬虫都集中在某几个位置,最直接的结果就是这个网站的拥挤。对于我们这些网站访问者而言也不是好事情,首先网页的页面会被卡住。网站的管理人员面对爬虫过多,这时候就要进行一系列的限制措施了,这里小编分了两个大的应对方向,从不同的角度进 行分析爬虫过多的解决思路。

一、识别爬虫

1. HTTP请求头

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

2. Cookie值

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

3. 访问频率

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

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

4. 鼠标行为轨迹

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

5. token值

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

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

二、拒绝爬虫

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

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

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

2. 行为上记录用户操作

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

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

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

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

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

4. 协议里申明权利

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

到此这篇关于python爬虫泛滥的解决方法详解的文章就介绍到这了,更多相关python爬虫泛滥的解决实例内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
Django集成百度富文本编辑器uEditor攻略
Jul 04 Python
Python使用scrapy抓取网站sitemap信息的方法
Apr 08 Python
Python  pip安装lxml出错的问题解决办法
Feb 10 Python
教你使用python画一朵花送女朋友
Mar 29 Python
python实现多人聊天室
Mar 31 Python
python 与服务器的共享文件夹交互方法
Dec 27 Python
使用Python向C语言的链接库传递数组、结构体、指针类型的数据
Jan 29 Python
详解Python网络框架Django和Scrapy安装指南
Apr 01 Python
树莓派采用socket方式文件传输(python)
Jun 22 Python
Python 面向对象部分知识点小结
Mar 09 Python
浅谈django不使用restframework自定义接口与使用的区别
Jul 15 Python
Python连接Postgres/Mysql/Mongo数据库基本操作大全
Jun 29 Python
cookies应对python反爬虫知识点详解
Nov 25 #Python
Python基于unittest实现测试用例执行
Nov 25 #Python
python反爬虫方法的优缺点分析
Nov 25 #Python
Pytest测试框架基本使用方法详解
Nov 25 #Python
python实现企业微信定时发送文本消息的实例代码
Nov 25 #Python
Python json解析库jsonpath原理及使用示例
Nov 25 #Python
搭建pypi私有仓库实现过程详解
Nov 25 #Python
You might like
虫族 Zerg 历史背景
2020/03/14 星际争霸
excellent!――ASCII Art(由目标图象生成ascii)
2007/02/20 PHP
php截取字符串并保留完整xml标签的函数代码
2013/02/06 PHP
ThinkPHP Where 条件中常用表达式示例(详解)
2017/03/31 PHP
JQuery 学习笔记 element属性控制
2009/07/23 Javascript
基于jQuery的仿flash的广告轮播
2010/11/05 Javascript
分享XmlHttpRequest调用Webservice的一点心得
2012/07/20 Javascript
鼠标焦点离开文本框时验证的js代码
2013/07/19 Javascript
判断客户浏览器是否支持cookie的示例代码
2013/12/23 Javascript
深入理解jQuery中的事件冒泡
2016/05/24 Javascript
javascript insertAfter()定义与用法示例
2016/07/25 Javascript
工厂模式在JS中的实践
2017/01/18 Javascript
js事件on动态绑定数据,绑定多个事件的方法
2018/09/15 Javascript
js canvas实现二维码和图片合成的海报
2020/11/19 Javascript
vue cli使用融云实现聊天功能的实例代码
2019/04/19 Javascript
基于Node.js的大文件分片上传示例
2019/06/19 Javascript
JS代码屏蔽F12,右键,粘贴,复制,剪切,选中,操作实例
2019/09/17 Javascript
JavaScript接口实现方法实例分析
2020/05/16 Javascript
[01:20:47]DOTA2-DPC中国联赛 正赛 Ehome vs Magma BO3 第一场 1月19日
2021/03/11 DOTA
Python入门篇之面向对象
2014/10/20 Python
详解用Python处理HTML转义字符的5种方式
2017/12/27 Python
100行python代码实现跳一跳辅助程序
2018/01/15 Python
在NumPy中创建空数组/矩阵的方法
2018/06/15 Python
python实现文本进度条 程序进度条 加载进度条 单行刷新功能
2019/07/03 Python
利用pyecharts实现地图可视化的例子
2019/08/12 Python
利用纯CSS3实现动态的自行车特效源码
2017/01/20 HTML / CSS
澳大利亚旅游网站:Lastminute
2017/08/07 全球购物
L’AGENCE官网:加州女装品牌
2018/06/03 全球购物
解释下列WebService名词:WSDL、SOAP、UDDI
2012/06/22 面试题
硕士研究生自我鉴定
2013/11/08 职场文书
普师专业个人自荐信范文
2013/11/26 职场文书
机电工程学生自荐信范文
2013/12/07 职场文书
认错检讨书
2014/10/02 职场文书
在人间读书笔记
2015/06/30 职场文书
公司趣味运动会开幕词
2016/03/04 职场文书
django如何自定义manage.py管理命令
2021/04/27 Python