反爬虫策略收录集

前言

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

入门版

封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面试真题 ,复习时非常方便

相关推荐
蒙娜丽宁2 分钟前
深入解析Go语言的类型方法、接口与反射
java·开发语言·golang·go
会敲代码的小张2 分钟前
设计模式-外观模式
java·开发语言·后端·设计模式·外观模式
计算机学姐5 分钟前
基于python+django+vue的视频点播管理系统
vue.js·python·mysql·django·pip·web3.py·ipython
AI让世界更懂你8 分钟前
漫谈设计模式 [9]:外观模式
python·设计模式·外观模式
爱里承欢。44 分钟前
【python - 函数】
开发语言·python
Python极客之家1 小时前
基于Python的B站热门视频可视化分析与挖掘系统
大数据·python·数据分析·毕业设计·网络爬虫·线性回归·课程设计
一只邪恶大泡1 小时前
为什么HTTPS会引入SSL/TLS协议
开发语言·数据结构·数据库·sql·mysql
Ting-yu1 小时前
零基础学习Redis(10) -- zset类型命令使用
数据库·redis·学习