反爬虫策略收录集

news2024/11/15 4:00:59

前言

反爬虫,是指对扫描器中的网络爬虫环节进行反制,通过一些反制策略来阻碍或干扰爬虫的正常爬行,从而间接地起到防御目的。下面是一些常见的反爬虫策略的收录。

入门版

封IP

由于服务器有防火墙(如果防火墙在TCP/UDP层或者它们以下的层做限制是无法绕过的,必须调整真实的物理IP)或者站点程序有相关限流设置,单位时间内请求过多时,会禁止可疑IP的访问。

爬虫对抗方案:
使用sleep等待随机时间,但是这种方式会拉长爬虫周期
建立IP代理池机制,通过大量代理IP去访问,但是可能校对【账户-UA-IP】等信息,有可能触发session失效被要求重新登录

封User-Agent

User-Agent的角色就是客户端的身份标识。很多的爬虫请求头就是默认的一些很明显的爬虫头python-requests/2.18.4,诸如此类,当发现携带有这类headers的数据包,直接拒绝访问。

爬虫对抗方案:
设置个User-Agent列表,从列表里随机抽出一个User-Agent,封装到http请求里
强烈建议爬虫程序降低访问频率(模拟用户行为),建设站点账号列表(使爬虫任务能够打散分化),因为目标站点可能校对【账户-UA-IP】等信息,有可能触发session失效被要求重新登录

其他header参数

除了User-Agent之外,可利用的header参数还有Host和Referer。这种验证请求头信息中特定header的方式既可以有效地屏蔽一些古老的爬虫程序、网络请求。

爬虫对抗方案:
若是脚本类的爬虫程序,需要对应地修改header参数
建议使用无头浏览器(selenium+webdriver)方案

封Cookie

Cookie反爬虫指的是服务器通过校验请求头中的Cookie值来区分正常用户和爬虫程序的手段,服务器对每一个访问网页的人都会给其一个Cookie,有的扫描爬虫单纯为了爬取链接,并不会对Cookie进行处理和响应。
网站端会根据访问频率,如当某个Cookie访问超过某一个阀值时,就对其进行(临时)封禁,也可能把Cookie和JavaScript结合起来(如加签、验签)实现反爬虫

爬虫对抗方案:
建议使用无头浏览器(selenium+webdriver)方案
强烈建议爬虫程序降低访问频率(模拟用户行为),建设站点账号列表(使爬虫任务能够打散分化)

javascript渲染

由 JavaScript 改变 HTML DOM 导致页面内容发生变化的现象称为动态渲染。该方案下,由于浏览器会自动渲染 script 标签中的js代码将信息展现在浏览器当中,而一般的爬虫程序是不具备执行js代码的能力,所以无法将js事件产生的信息读取出来。
这是把双刃剑,能有效打击脚本类的爬虫程序,但是会影响搜索公司的收录(百度、必应之类)。

爬虫对抗方案:
使用无头浏览器(selenium+webdriver)方案,也就是浏览器解析JavaScript的方式,能够做到动态渲染

ajax异步传输

访问网页的时候服务器将网页框架返回给客户端,在与客户端交互的过程中通过异步ajax技术传输数据包到客户端,呈现在网页上,爬虫直接抓取的话信息为空。该方案仅能打击初阶的爬虫程序。

爬虫对抗方案:
使用无头浏览器(selenium+webdriver)方案,也就是浏览器解析JavaScript的方式

csrf防护

是常见的预防“跨站请求伪造攻击”、“钓鱼网站”的方案,该方案也能打击一般的爬虫脚本、爬虫程序。

爬虫对抗方案:
使用无头浏览器(selenium+webdriver)方案,该方案能够获取到完全渲染、完全加载后的网页信息,缺点是比爬虫脚本慢

验证码

当某一用户访问次数过多后,就自动让请求跳转到一个验证码页面,只有在输入正确的验证码之后才能继续访问网站。这种通过强化人机校验的方式,能够有很好的反爬效果。
另外,如果发生误拦,对于真实用户而言,验证交互就让人厌烦。

爬虫对抗方案:
强烈建议爬虫程序降低访问频率(模拟用户行为),建设站点账号列表(使爬虫任务能够打散分化)
实现验证码校对步骤,这就涉及到体系化的爬虫平台能力,包括:步骤编排、OCR识别、会话管理

另外,关于验证码发展,可以分为以下几个阶段:
文本验证码 -》行为验证码(滑块、顺序点击、按语义提示点击、高阶语义推理验证码) -》 新型验证码(无感验证码,综合多个参数做校验)
其对应的交互体验也是往轻松简便的方式发展,追求交互友好的同时做到有效打击

进阶版-内容视觉类混淆、内容加解密

通过网站技术保证展示层是正确的,但背后的html源码可能是无序的(例如文本错位、图片覆盖等)。这样一来,爬虫程序无法直接通过xpath获取到正确数据,需要做更多的适配、解析步骤,例如是分析ajax请求过程中的js函数、控件的CSS特征、匹配网页用到的字体等等。

图片伪装

图片伪装指的是将带有文字的图片与正常文字混合在一起,以达到“鱼目混珠”的效果。
这种混淆方式并不会影响用户阅读,但是可以让爬虫程序无法获得“所见”的文字内容。

CSS偏移

这种方法是利用 CSS 样式将乱序的文字排版为人类正常阅读顺序的行为。
如果不细心观察,爬虫工程师很容易被爬取结果糊弄。这种混淆方法和图片伪装一样,并不会影响用户阅读。
例如:
HTML 文本中的文字:我的学号是 1308205,我在北京大学读书。
浏览器显示的文字:我的学号是 1380205,我在北京大学读书。
爬虫提取到的学号是 1308205,但用户在浏览器中看到的却是 1380205。

SVG映射

SVG 是用于描述二维矢量图形的一种图形格式。它基于 XML 描述图形,对图形进行放大或缩小操作都不会影响图形质量。
由于 SVG 中的图形代表的也是一个个文字,所以在使用时必须在后端或前端将真实的文字与对应的 SVG 图形进行映射和替换。
通过用矢量图形代替具体文字,不会影响用户正常阅读,但爬虫程序却无法像读取文字那样获得 SVG 图形中的内容。

爬虫对抗方案:
当已使用目标控件做文本解析时,爬虫程序无法主动发现这类新增的对抗,需要一定的发现机制、反馈机制,如人工check、补偿程序做图像识别和内容比对
过程中可能需要生成截图,解析目标控件信息,这就涉及到体系化的爬虫平台能力,包括:步骤编排、图像识别、OCR识别、会话管理

字体加密
js混淆(js函数加密),需要做js逆向解析来破解
eval加密

这三类展开讲篇幅过长,需要的小伙伴请移步: 【点击这里】

Python所有方向的学习路线图,清楚各个方向要学什么东西
100多节Python课程视频,涵盖必备基础、爬虫和数据分析
100多个Python实战案例,学习不再是只会理论
华为出品独家Python漫画教程,手机也能学习
历年互联网企业Python面试真题,复习时非常方便
请添加图片描述
请添加图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2084837.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Profinet 从站转 EtherNet/IP 从站网关

产品用途 本产品是 PN(Profinet) 和 EtherNet/IP 网关,使用数据映射方式工作。 本产品在 PN 侧作为 PN IO 从站,接 PN 主站设备,比如西门子 PLC 等;在EtherNet/IP 侧做为 EtherNet/IP 从站,接 EtherNet…

mongodb日期转换

public static void main(String[] args) throws ParseException {// 把mongodb日期转成yyyy-MM-dd HH:mm:ss日期String date "2024-08-27T15:59:40.327Z";date date.replace("Z", " UTC");//注意是空格UTCSimpleDateFormat format new Simpl…

深度学习基础--监督学习

第二章 监督学习(Supervised Learning) 监督学习模型就是将一个或多个输入转化为一个或多个输出的方式。比如,我们可以将某部二手丰田普锐斯的车龄和行驶里程作为输入,预估的车辆价格则是输出。 这个模型其实只是个数学公式&…

第12章 网络 (5)

目录 12.8 网络层 12.8.1 IPv4 12.8.2 接受分组 12.8.3 交付到本地传输层 本专栏文章将有70篇左右,欢迎关注,查看后续文章。 12.8 网络层 12.8.1 IPv4 IPv4首部: version: 值为4。 IHL: IP header leng…

AI模型:追求全能还是专精?详细阐述

AI模型:追求全能还是专精? 近日,OpenAI预计在秋季推出代号为“草莓”的新AI。从专注于数学问题到处理主观营销策略,"草莓"模型展现出惊人的多样性。而这种全能型 AI 是否代表了未来趋势?相比专攻于某一领域…

Python和MATLAB及R平均意见得分导图

🎯要点 文本转语音预测语音视频得分后验分布预测语音质量移动端语音质量测量英伟达GPU深度学习语音质量评估秩统计平均意见得分比较置信区间音频波形质量等分测评转换语音和自然语言相似性评估 JavaScript平均意见得分 平均意见得分是体验质量和电信工程领域中使用…

什么是Cursor?Cursor 是用于编码的 ChatGPT,现在任何人都能在几分钟内制作出应用程序

有时,一款人工智能工具会突然出现,并主导社交媒体上的话题。这款应用程序就是 Cursor,它是一款人工智能编码工具,使用 Claude 3.5 Sonnet 和 GPT-4o 等模型,让你比以往任何时候都更容易构建自己的应用程序。 Cursor 既…

3分钟千人被裁,IBM中国 “灭霸式“裁员背后原因?

2024年8月23日,IMB即有员工传出“无法访问系统”,“无法连接到公司网络”的消息,后续传出裁员的传闻。 图片来源网络 2024年8月26日周一,IBM召开3分钟的会议,宣布彻底关闭IBM中国研发部门,之后直接切断会议…

i.MX6裸机开发(12):eLCDIF——液晶显示

本章参考资料:《IMX6ULRM》(参考手册)Chapter 32: Enhanced LCD Interface (eLCDIF) 显示器介绍,显示器的分类和基本参数。 液晶控制原理,野火液晶屏介绍和控制原理讲解。 eLCDIF液晶显示实验,开发板预留…

安卓蓝牙技术的使用和场景

1.蓝牙协议应用领域 蓝牙协议是一种无线通信技术,广泛应用于短距离的数据和语音传输。以下是蓝牙协议的主要使用场景: 个人设备互联:蓝牙技术允许智能手机、平板电脑、笔记本电脑等设备之间进行数据传输和共享。例如,通过蓝牙将手…

“遥感+”集成技术的碳储量、碳排放、碳循环、温室气体等多领域监测与模拟

以全球变暖为主要特征的气候变化已成为全球性环境问题,对全球可持续发展带来严峻挑战。2015年多国在《巴黎协定》上明确提出缔约方应尽快实现碳达峰和碳中和目标。2019年第49届 IPCC全会明确增加了基于卫星遥感的排放清单校验方法。随着碳中和目标以及全球碳盘点的现…

DP2.0和HDMI2.1的计算

一、HDMI 8K60Hz,需要带宽64Gbps HDMI2.1支持48Gbps,不足以支持8K60Hz 增加HDMI2.1 FRL(Fixed Rate Link)模式,实现接口带宽的增加,满足8Kp60Hz需要。同时需要结合相应的YCbCr 4:2: 0编码和视频压缩技术。 1、变更内…

Redis高级----主从、哨兵、分片、脑裂原理

目前已更新系列: 当前:Redis高级----主从、哨兵、分片的原理 计算机网络--面试知识总结一 计算机网络-----面试知识总结二 计算机网络--面试总结三(Http与Https) 计算机网络--面试总结四(HTTP、RPC、WebSocket、S…

Android 11 ,Android Studio 三方APP调用系统 system/lib 目录下so库使用过程中的BUG(坑)。

背景介绍:最近在做文件管理器,需要把图库的功能集成到文件管理器中,实现在文件管理器中打开图片、切换图片的功能。在实现gif图片打开功能的时候,需要用到系统现成的gifplayer so库,导入Android studio的时候遇到了一堆…

游戏发行技术体系之SDK技术体系

在上篇文章中提现过,SDK主要分为充值、登录、合规、数据、聚合和后台管理。 下面是针对SDK技术体系进行拆分 这个地方没有写账号,是因为我会账号独立出来,这块会在后面的账号技术体系单独规划。

爆改YOLOv8|利用分层特征融合策略MSBlock改进yolov8,暴力涨点

1,本文介绍 MSBlock 是一种分层特征融合策略,用于改进卷积神经网络中的特征融合效果。它通过分层次地融合不同尺度的特征图来提高网络的表达能力和性能。MSBlock 采用多尺度特征融合的方法,确保网络能够有效地捕捉不同层次和尺度的信息&…

FPGA实现HDMI传输(二)

之前的文章简单介绍了HDMI接口、TMDS编码以及ADV611工作原理和寄存器配置,本篇博客将给出具体的代码以及板级验证结果,代码参考自米联客的教程。 一.ADV7611配置 1.i2c驱动模块 timescale 1ns / 1psmodule uii2c# (parameter WMEN_LEN …

Git使用教程(小白也能看懂)

git的使用教程(学习和工作中都能用到) 1、所需工具 git bash 1)安装git bash 官网:https://git-scm.com/download/win 2)在文件夹空白处鼠标右键 若出现 上图说明安装成功 2、使用 1)我们想要克隆一…

DHT11 实现温湿度传感器

DHT11 DHT11是一款含有已校准数字信号输出的温湿度复合传感器,它结合了电阻式感湿元件和一个NTC测温元件,并与一个高性能8位单片机相连接。通过采用专用的数字模块采集技术和温湿度传感技术,DHT11确保了产品的高可靠性和长期稳定性 DHT11时序…

android studio 新建java工程, 安卓新建项目,android studio2024 如何新建java项目

主要解决,新增安卓工程,没有java选项 1. 点击左上角FIle -> New -> 2. 选择 no activity 选项, 然后next 3. langua 就可以选择java 了。name自己定义项目名称,项目存储地址,包名。 配置完成选择finish. 4. fin…