热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

常规反爬复习总结

一.常见基于身份识别进行反爬1通过headers字段来反爬headers中有很多字段,这些字段都有可能会被对方服务器拿过来进行判断是否为爬虫1.1通过headers中的User-A

一.常见基于身份识别进行反爬

1通过headers字段来反爬

headers中有很多字段, 这些字段都有可能会被对方服务器拿过来进行判断是否为爬虫


1.1通过headers中的User-Agent字段来反爬

●反爬原理:爬虫默认情况下没有User-Agent, 而是使用模块默认设置

●解决方法:请求之前添加User-Agent即可;更好的方式是使用User-Agent池来解决 (收集- 堆User-Agent的方式,或者是使用fake库随机生成User -Agent)


1.2通过referer字段或者是其他字段来反爬

●反爬原理:爬虫默认情况下不会带上referer字段, 服务器端通过判断请求发起的源头,以此判断请求是否合法

●解决方法:添加referer字段


1.3通过COOKIE来反爬

●反爬原因:通过检查COOKIEs来查看发起请求的用户是否具备相应权限,以此来进行反爬●解决方案:进行模拟登陆,成功获取COOKIEs之后在进行数据爬取

 

 


2.通过请求参数来反爬

请求参数的获取方法有很多,向服务器发送请求,很多时候需要携带请求参数,通常服务器端可以通过检查请求参数是否正确来判断是否为爬虫


2.1通过从html静态文件中获取请求数据(github登录数据)

●反爬原因:通过增加获取请求参数的难度进行反爬

●解决方案:仔细分析抓包得到的每-个包,搞清楚请求之间的联系


2.2通过发送请求获取请求数据

●反爬原因:通过增加获取请求参数的难度进行反爬

●解决方案:仔细分析抓包得到的每一个包,搞清楚请求之间的联系,搞清楚请求参数的来源


2.3通过js生成请求参数

●反爬原理: js生成了请求参数

●解决方法:分析js,观察加密的实现过程,通过js2py获取js的执行结果,或者使用selenium来实现


2.4通过验证码来反爬

●反爬原理:对方服务器通过弹出验证码强制验证用户浏览行为

●解决方法:打码平台或者是机器学习的方法识别验证码,其中打码平台廉价易用,更值得推荐

 

 

 

 


二.常见基于爬虫行为进行反爬

1基于请求频率或总请求数量

爬虫的行为 与普通用户有着明显的区别,爬虫的请求频率与请求次数要远高于普通用户


1.1通过请求ip/账号单位时间内总请求数量进行反爬

●反爬原理:正常浏览器请求网站,速度不会太快,同一个ip/账号大量请求了对方服务器,有更大的可能性会被识别为爬虫

●解决方法:对应的通过购买高质量的ip的方式能够解决问题/购买个多账号


1.2通过同一ip/账号请求之间的间隔进行反爬

●反爬原理:正常人操作浏览器浏览网站,请求之间的时间间隔是随机的,而爬虫前后两个请求之间时间间隔通常比较固定同时时间间隔较短,因此可以用来做反爬

●解决方法:请求之间进行随机等待,模拟真实用户操作,在添加时间间隔后,为了能够高速获取数据,尽量使用代理池,如果是账号,则将账号请求之间设置随机休眠


1.3通过对请求ip/账号每天请求次数设置阈值进行反爬

●反爬原理:正常的浏览行为,其-天的请求次数是有限的,通常超过某一个值,服务器就会拒绝响应

●解决方法:对应的通过购买高质量的ip的方法/多账号,同时设置请求间随机休眠

 

 


2根据爬取行为进行反爬,通常在爬取步骤上做分析


2.1通过js实现跳转来反爬

●反爬原理: js实现页面跳转,无法在源码中获取下-页url

●解决方法:多次抓包获取条状url, 分析规律


2.2通过蜜罐(陷阱)获取爬虫ip(或者代理ip),进行反爬

●反爬原理:在爬虫获取链接进行请求的过程中,爬虫会根据正则,xpath, css等方式进行后续链接的提取,此时服务器端可以设置-个陷阱url, 会被提取规则获取,但是正常用户无法获取,这样就能有效的区分爬虫和正常用户

●解决方法:完成爬虫的编写之后,使用代理批量爬取测试/仔细分析响应内容结构,找出页面中存在的陷阱


2.3通过假数据反爬

●反爬原理:向返回的响应中添加假数据污染数据库,通常假数据不会被正常用户看到

●解决方法:长期运行,核对数据库中数据同实际页面中数据对应情况,如果存在问题/仔细分析响应内容


2.4阻塞任务队列

●反爬原理:通过生成大量垃圾url,从而阻塞任务队列,降低爬虫的实际工作效率

●解决方法:观察运行过程中请求响应状态/仔细分析源码获取垃圾url生成规则,对URL进行过滤


2.5阻塞网络I0

●反爬原理:发送请求获取响应的过程实际上就是下载的过程,在任务队列中混入-个大文件的url, 当爬虫在进行该请求时将会占用网络io,如果是有多线程则会占用线程

●解决方法:观察爬虫运行状态/多线程对请求线程计时/发送请求前


2.6运维平台综合审计

●反爬原理:通过运维平台进行综合管理,通常采用复合型反爬虫策略,多种手段同时使用

●解决方法:仔细观察分析,长期运行测试目标网站,检查数据采集速度,多方面处理

 

 

 

 


三.常见基于数据加密进行反爬

 


1 对响应中含有的数据进行特殊化处理

通常的特殊化处理主要指的就是css数据偏移/自定义字体/数据加密/数据图片/特殊编码格式等


1.1通过自定义字体来反爬如:猫眼电影 

●反爬思路:使用自有字体文件

●解决思路:切换到手机版/解析字体文件进行翻译


1.2通过css偏移+雪碧图来反爬,如:猫眼,去哪儿

●反爬思路:源码数据不为真正数据,需要通过css位移才能产生真正数据

●解决思路:计算css的偏移


1.3通过js动态生成数据进行反爬

●反爬原理:通过js动态生成

●解决思路:解析关键js, 获得数据生成流程,模拟生成数据


1.4通过数据图片化反爬

●如58同城短租

●解决思路:通过使用图片解析引擎从图片中解析数据


1.5通过编码格式进行反爬

●反爬原理:不适用默认编码格式,在获取响应之后通常爬虫使用utf-8格式进行解码,此时解码结果将会是乱码或者报错

●解决思路:根据源码进行多格式解码,或者真正的解码格式

 


小结

●掌握常见的反爬手段、原理以及应对思路


推荐阅读
  • 深入理解Cookie与Session会话管理
    本文详细介绍了如何通过HTTP响应和请求处理浏览器的Cookie信息,以及如何创建、设置和管理Cookie。同时探讨了会话跟踪技术中的Session机制,解释其原理及应用场景。 ... [详细]
  • 深入理解OAuth认证机制
    本文介绍了OAuth认证协议的核心概念及其工作原理。OAuth是一种开放标准,旨在为第三方应用提供安全的用户资源访问授权,同时确保用户的账户信息(如用户名和密码)不会暴露给第三方。 ... [详细]
  • 本文介绍了如何使用jQuery根据元素的类型(如复选框)和标签名(如段落)来获取DOM对象。这有助于更高效地操作网页中的特定元素。 ... [详细]
  • 本文介绍如何在 Xcode 中使用快捷键和菜单命令对多行代码进行缩进,包括右缩进和左缩进的具体操作方法。 ... [详细]
  • 本文介绍了一款用于自动化部署 Linux 服务的 Bash 脚本。该脚本不仅涵盖了基本的文件复制和目录创建,还处理了系统服务的配置和启动,确保在多种 Linux 发行版上都能顺利运行。 ... [详细]
  • 在Linux系统中配置并启动ActiveMQ
    本文详细介绍了如何在Linux环境中安装和配置ActiveMQ,包括端口开放及防火墙设置。通过本文,您可以掌握完整的ActiveMQ部署流程,确保其在网络环境中正常运行。 ... [详细]
  • 如何在WPS Office for Mac中调整Word文档的文字排列方向
    本文将详细介绍如何使用最新版WPS Office for Mac调整Word文档中的文字排列方向。通过这些步骤,用户可以轻松更改文本的水平或垂直排列方式,以满足不同的排版需求。 ... [详细]
  • 理解存储器的层次结构有助于程序员优化程序性能,通过合理安排数据在不同层级的存储位置,提升CPU的数据访问速度。本文详细探讨了静态随机访问存储器(SRAM)和动态随机访问存储器(DRAM)的工作原理及其应用场景,并介绍了存储器模块中的数据存取过程及局部性原理。 ... [详细]
  • 几何画板展示电场线与等势面的交互关系
    几何画板是一款功能强大的物理教学软件,具备丰富的绘图和度量工具。它不仅能够模拟物理实验过程,还能通过定量分析揭示物理现象背后的规律,尤其适用于难以在实际实验中展示的内容。本文将介绍如何使用几何画板演示电场线与等势面之间的关系。 ... [详细]
  • 本文介绍如何通过Windows批处理脚本定期检查并重启Java应用程序,确保其持续稳定运行。脚本每30分钟检查一次,并在需要时重启Java程序。同时,它会将任务结果发送到Redis。 ... [详细]
  • MySQL中枚举类型的所有可能值获取方法
    本文介绍了一种在MySQL数据库中查询枚举(ENUM)类型字段所有可能取值的方法,帮助开发者更好地理解和利用这一数据类型。 ... [详细]
  • 本文介绍如何在应用程序中使用文本输入框创建密码输入框,并通过设置掩码来隐藏用户输入的内容。我们将详细解释代码实现,并提供专业的补充说明。 ... [详细]
  • 本文介绍如何通过SQL查询从JDE(JD Edwards)系统中提取所有字典数据,涵盖关键表的关联和字段选择。具体包括F0004和F0005系列表的数据提取方法。 ... [详细]
  • 本文详细介绍了如何通过命令行启动MySQL服务,包括打开命令提示符窗口、进入MySQL的bin目录、输入正确的连接命令以及注意事项。文中还提供了更多相关命令的资源链接。 ... [详细]
  • 本文介绍如何使用 NSTimer 实现倒计时功能,详细讲解了初始化方法、参数配置以及具体实现步骤。通过示例代码展示如何创建和管理定时器,确保在指定时间间隔内执行特定任务。 ... [详细]
author-avatar
沉佩颖岳玲
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有