反爬虫策略收录集

devtools/2024/9/23 9:33:09/

前言

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

入门版

封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_52">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.ppmy.cn/devtools/102727.html

相关文章

StarRocks 巧用 Storage Volume,强大又便捷

前言 StarRocks 存算分离支持使用各种外部独立存储系统来存储业务数据。在早期 3.0 版本中,用户需要在 fe.conf 中配置存储相关信息(如 endpoint 等),这种静态配置模式也给用户使用带来了很多的不便性。 为此,StarRo…

74HC595的用法与原理

DS/LDSI(SER),串行数据输入引脚 OE/LEDN,输出使能控制脚,它是低电才使能输出,所以接GND RCK/LDSTR(STCP),存储寄存器时钟输入引脚。上升沿时,数据从移位寄存器…

SpringBoot集成kafka接收消息

SpringBoot集成kafka接收消息 1、SpringBoot集成kafka接收消息2、Payload注解接收消息体内容3、Header注解接收消息头内容4、接收消息所有内容 1、SpringBoot集成kafka接收消息 生产者 package com.power.producer;import org.springframework.kafka.core.KafkaTemplate; imp…

TCP并发服务端的实现

思想:创建多个套接字,由"我"来管理这些套接字 方法: 1.多进程 2.多线程 3.IO多路复用 tcp服务器端创建流程: socket() bind() listen() connfd accept IO多路复用: 多个文件I复用同一个进程 IO…

MaxKB(四):模型向量化

后台代码都正常运行了,在使用使用“知识库”->“模型向量化”时,遇到了一些问题,分享一下。 1.问题 在运行源码过程后,使用“知识库”->“模型向量化”时,后台会报错,提示信息大致如下: …

Pytorch中高维度张量理解

Pytorch中高维度张量理解 创建一个tensor获取第一个维度的第0个元素:获取第二个维度的第0个元素:获取第三个维度的第0个元素:获取第四个维度的第0个元素:其他情况 创建一个tensor tensor torch.rand(3,5,3,2)结果如下&#xff1…

graalvm jenkins maven 配置

1. maven 使用指定jdk编译 设置 JAVA_HOME环境变量: linux: linux: export JAVA_HOME/data/java/graalvm-jdk-22.0.29.1window: set JAVA_HOMED:\develop\Java\graalvm-jdk-22.0.29.1 2.mvn编译报错 问题 : Unable to make field private final java.util.Comparator java.…

软件测试——自动化测试selenium常用函数

目录 元素的定位cssSelectorxpath函数 操作测试对象窗口切换窗口窗口设置大小窗口切换屏幕截图关闭窗口 等待强制等待隐式等待显示等待 浏览器导航弹窗警告弹窗确认弹窗提示弹窗 文件上传浏览器参数设置 元素的定位 web⾃动化测试的操作核⼼是能够找到⻚⾯对应的元素&#xff0…