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 相关文章推荐
Python实现向服务器请求压缩数据及解压缩数据的方法示例
Jun 09 Python
利用Python代码实现数据可视化的5种方法详解
Mar 25 Python
python使用openpyxl库修改excel表格数据方法
May 03 Python
spark: RDD与DataFrame之间的相互转换方法
Jun 07 Python
python检测文件夹变化,并拷贝有更新的文件到对应目录的方法
Oct 17 Python
python设置环境变量的作用和实例
Jul 09 Python
基于python计算并显示日间、星期客流高峰
May 07 Python
python中if及if-else如何使用
Jun 02 Python
详解python对象之间的交互
Sep 29 Python
python制作微博图片爬取工具
Jan 16 Python
Django项目如何获得SSL证书与配置HTTPS
Apr 30 Python
python文件与路径操作神器 pathlib
Apr 01 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
php读取文件内容至字符串中,同时去除换行、空行、行首行尾空格(Zjmainstay原创)
2012/07/31 PHP
php 文件下载 出现下载文件内容乱码损坏的解决方法(推荐)
2016/11/16 PHP
Yii2.0实现的批量更新及批量插入功能示例
2019/01/29 PHP
php实现文章评论系统
2019/02/18 PHP
PHP迭代器和生成器用法实例分析
2019/09/28 PHP
用JavaScript 处理 URL 的两个函数代码
2007/08/13 Javascript
JS 实现完美include载入实现代码
2010/08/05 Javascript
通过DOM脚本去设置样式信息
2010/09/19 Javascript
基于jquery DOM写的类似微博发布的效果
2012/10/20 Javascript
各种页面定时跳转(倒计时跳转)代码总结
2013/10/24 Javascript
jquery ajax中使用jsonp的限制解决方法
2013/11/22 Javascript
Jquery中国地图热点效果-鼠标经过弹出提示层信息的简单实例
2014/02/12 Javascript
jQuery不使用插件及swf实现无刷新文件上传
2014/12/08 Javascript
简介JavaScript中substring()方法的使用
2015/06/06 Javascript
jQuery实现带有洗牌效果的动画分页实例
2015/08/31 Javascript
javascript弹性运动效果简单实现方法
2016/01/08 Javascript
jQuery解决浏览器兼容性问题案例分析
2016/04/15 Javascript
javascript正则表达式模糊匹配IP地址功能示例
2017/01/06 Javascript
EasyUI为Numberbox添加blur事件的方法
2017/03/05 Javascript
select标签设置默认选中的选项方法
2018/03/02 Javascript
JS前端知识点 运算符优先级,URL编码与解码,String,Math,arguments操作整理总结
2019/06/27 Javascript
解决vue cli4升级sass-loader(v8)后报错问题
2020/07/30 Javascript
用Python中的__slots__缓存资源以节省内存开销的方法
2015/04/02 Python
详细解析Python当中的数据类型和变量
2015/04/25 Python
python中使用xlrd读excel使用xlwt写excel的实例代码
2018/01/31 Python
python绘制直方图和密度图的实例
2019/07/08 Python
解决python3 requests headers参数不能有中文的问题
2019/08/21 Python
利用pandas将非数值数据转换成数值的方式
2019/12/18 Python
解决Tensorboard 不显示计算图graph的问题
2020/02/15 Python
CSS3绘制超炫的上下起伏波动进度加载动画
2016/04/21 HTML / CSS
canvas 橡皮筋式线条绘图应用方法
2019/02/13 HTML / CSS
在Java开发中如何选择使用哪种集合类
2016/08/09 面试题
元旦文艺汇演主持词
2014/03/26 职场文书
共产党员批评与自我批评
2014/10/15 职场文书
2017公司年会主持人开幕词
2016/03/04 职场文书
Python游戏开发实例之graphics实现AI五子棋
2021/11/01 Python