常见的反爬手段和解决思路(爬虫与反爬虫)

news2024/11/25 10:44:33

常见的反爬手段和解决思路(爬虫与反爬虫)

  • 学习目标
  • 1 服务器反爬的原因
  • 2 服务器长反什么样的爬虫
    • (1)十分低级的应届毕业生
    • (2)十分低级的创业小公司
    • (3)不小心写错了没人去停止的失控小爬虫
    • (4)成型的商业对手
    • (5)抽风的搜索引擎
  • 3 反爬虫领域常见的一些概念
  • 4 反爬的三个方向
    • (1)基于身份识别进行反爬
    • (2)基于爬虫行为的反爬
    • (3)基于数据加密进行反爬
  • 5 常见基于身份识别进行反爬
    • 5.1 通过headers字段来反爬
      • (1)通过headers中的user-agent
      • (2)通过refer字段或者是其他字段来反馈
      • (3)通过cookie来反馈
    • 5.2 通过请求参数来反爬
      • (1)通过html静态文件中获取请求数据(github登录数据)
      • (2)通过发送请求获取请求数据
      • (3)通过js生成请求参数
      • (4)通过验证码来反爬
  • 6 常见基于爬虫行为进行反爬
    • 6.1 基于请求频率或总请求书
      • (1)通过请求ip账号单位时间内总请求数量进行反爬
      • (2)通过同一ip/账号请求之间的问题进行反爬
      • (3)通过同一ip/账号每天请求次数设置阈值进行反爬
    • 6.2 根据爬虫行为进行反爬,通常在爬取步骤上做分析
      • (1) 通过js实现跳转来反爬
      • (2) 通过蜜罐(陷阱)获取爬虫ip(或者代理),进行反爬
      • (4) 通过假数据反爬
      • (4) 堵塞任务队列
  • 7 常见基于数据加密进行反爬
      • (1)对响应中含有的数据进行特殊化处理
      • (2)通过自定义字体来反爬 下图来自猫眼电影电脑版
      • (3)通过css来反爬下图猫眼去哪儿电脑版
      • (4)通过js动态生成数据进行反爬
      • (5)通过数据图片化反爬
      • (6)通过编码格式进行反爬
  • 小结

学习目标

1.了解服务器反爬的原因
2.了解服务器长反什么样的爬虫
3.了解反爬虫领域常见的一些概念
4.了解反爬的三个方向
5.了解常见基于身份识别进行反爬
6.了解常见基于数据加密进行反爬

1 服务器反爬的原因

(1)爬虫占总PV较高,浪费资源
(2)资源被批量抓走,丧失竞争力
(3)法律的灰色地带

2 服务器长反什么样的爬虫

(1)十分低级的应届毕业生

  应届毕业生的爬虫通常简单粗暴,根本不管服务器压力,加上人数不可预测,很容易把站点弄垮

(2)十分低级的创业小公司

  现在的创业公司越来越多,也不知道被谁忽悠的,然后大家创了业不知道干什么好,觉得大数据比较热,就开始做大数据,分析程序全部写的差不多了,发现自己手头上没有数据。怎么办?写爬虫啊,于是就有了不计其数的小爬虫,处于公司的生死存亡,不断爬取数据。

(3)不小心写错了没人去停止的失控小爬虫

  有些网站已经做了相应的反爬,但是爬虫仍然不断爬取。什么意思?就是说,他们根本爬不到任何数据,除了httpcode是200以外,一切都是不对的,可是爬虫依然不停止这个很可能就是一些托管在某些服务器上的小爬虫,已经无人认领了,依然在辛勤的工作着。

(4)成型的商业对手

  这个是最大的对手,他们有技术,有钱,要什么,有什么,如果和你死磕,你就只能硬着头皮和他死磕。

(5)抽风的搜索引擎

  大家不要以为搜索引擎都是好人,他们也有抽风的时候,而且一抽风就会导致服务器性能下降,请求量跟网络攻击没什么区别。

3 反爬虫领域常见的一些概念

因为反爬暂时是个比较新的领域,因此有定义要自己下:

爬虫:使用任何技术手段,批量获取网站信息的一种方式,关键在于批量
反爬虫:使用任何技术手段,阻止别人批量获取自己网站信息的一种方式,关键也是批量
误伤:在反爬虫的过程中,错误的将普通用户识别为爬虫。误伤率高的爬虫策略,效果再好也不能用。
拦截:成功阻止爬虫访问。这里会有拦截率的概念。通常来说,拦截率越高的反爬虫策略,误伤的可能性就越高,因此需要做个权衡。
资源:机器成本和人力成本的总和。

  这里要切记,人力成本也是资源,而且比机器更重要,因为根据摩尔定律,机器越来越便宜。而根据it行业的发展趋势,程序员越来越贵。因此,通常服务器反爬就是让爬虫工程师加班才是王道,机器成本并不是特别值钱。

4 反爬的三个方向

(1)基于身份识别进行反爬

  看请求是否为浏览器请求,若有问题则异常

(2)基于爬虫行为的反爬

  一般是来到列表页面,从列表页面获得所有详情页面url,针对页面发起请求,爬虫对此进行检查

(3)基于数据加密进行反爬

  爬取时解析过程中是加密的数据,乱码等

每个方向都会有若干手段

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

5.1 通过headers字段来反爬

(1)通过headers中的user-agent

反爬原因:爬虫默认情况下没有user-agent,而是使用模块默认设置
解决方案:请求之前添加user-agent;更好的方式是使用user-agent池来解决(收集一堆user-agent的方式,或者随机生成user-agent)

(2)通过refer字段或者是其他字段来反馈

反爬原因:爬虫默认情况下不会带上refer字段,服务器端通过判断请求发起的源头,一次判断请求是否合法
解决方案:添加refer字段

(3)通过cookie来反馈

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

5.2 通过请求参数来反爬

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

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

反爬原因:通过增加获取请求参数的难度进行反爬
解决方案:仔细分析抓包的每个包,搞清楚请求之间的联系

(2)通过发送请求获取请求数据

反爬原因:通过增加获取请求参数的难度进行反爬
解决方案:仔细分析抓包得到的每一个包,搞清楚请求之间的联系,搞清楚请求参数的来源

(3)通过js生成请求参数

有时浏览器对账号密码等进行加密,或者通过js生成临时数据
反爬原因:js生成了请求参数
解决方案:分析js,观察加密的实现过程,通过js2py获取js的执行结果,或者使用selenium来实现

(4)通过验证码来反爬

反爬原因:对方服务器通过弹出验证码强制验证用户浏览行为
解决方案:打码平台或者机器学习的方法识别验证码,其中打码平台廉价易用,值得推荐

6 常见基于爬虫行为进行反爬

6.1 基于请求频率或总请求书

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

(1)通过请求ip账号单位时间内总请求数量进行反爬

反爬原理:正常浏览器请求网站,速度不会太快,同一个ip账号大量请求了对方服务器,有更大的可能性会被识别为爬虫
解决方法:对应的通过购买高质量的ip的方式能够解决问题/购买多个账号

(2)通过同一ip/账号请求之间的问题进行反爬

反爬原理:正常人操作浏览器浏览网站,请求之间的时间间隔是随机的,而爬虫前后两个请求之间时间间隔通常比较固定同时时间间隔较短,因此可以用来做反爬
解决方法:请求之间随机等待,模拟真实用户操作,在添加时间间隔后,为了能够告诉获取数据,尽量使用代理池,如果是账号,则将账号请求之间设置随机休眠

(3)通过同一ip/账号每天请求次数设置阈值进行反爬

反爬原理:正常的浏览行为,其一天的请求次数是有限的,通常超过某一个值,服务器就会拒绝响应
解决方法:对应的通过购买高质量的ip的方法/多账号,同时设置请求间随机休眠

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

(1) 通过js实现跳转来反爬

反爬原理:js实现页面跳转,无法在源码中获取下一页url
解决方法:多次抓包获取条状url,分析规律

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

反爬原理:在爬虫获取链接进行请求的过程中,爬虫会根据正则,xpath,css等方式进行后续链接的提取,此时服务器端可以设置一个陷阱url,会被提取规则获取,但是正常用户无法获取,这样就能有效的区分爬虫和正常用户
解决方法:完成爬虫的编写之后,使用代理批量爬取测试/仔细分析响应内容结构,找出页面中存在的陷阱

(4) 通过假数据反爬

反爬原理:向返回的响应中添加假数据污染数据库,通常假数据不会被正常用户看到
解决方法:长期运行,核对数据库中数据同实际页面中数据对应情况,如果存在问题/仔细分析响应内容

(4) 堵塞任务队列

反爬原理:通过生成大量垃圾url,从而堵塞任务队列,降低爬虫的实际工作效率
解决方法:观察运行过程中请求响应状态/仔细分析源码获取垃圾url生成规则,对url进行过滤

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

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

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

(2)通过自定义字体来反爬 下图来自猫眼电影电脑版

在这里插入图片描述
在这里插入图片描述

对于上面字体可以所有的对应起来,到时候翻译,但有些麻烦

当手机版的时候,检查发现没有进行加密了
在这里插入图片描述

1)反爬思路:使用自有字体文件
2)解决思路:切换到手机版/解析字体文件进行翻译

(3)通过css来反爬下图猫眼去哪儿电脑版

(4)通过js动态生成数据进行反爬

  可能先拿到数据,再通过js运算得到结果,再进行渲染,在源码中并没有存在,此时若在源码中无法找到该数据,就需要查看是否js生成,后面会专门讲解js解析该如何做。

反爬原因:通过js动态生成
解决思路:解析关键js,获得数据生成流程,模拟生成数据

(5)通过数据图片化反爬

将数据转化成图片,就是使你多走好几步

58同城短租()
解决思路:通过使用图片解析引擎从图片中解析数据

(6)通过编码格式进行反爬

反爬原因:不适用默认编码格式,在获取响应之后通常爬虫使用utf-8格式进行解码,此时解码结果将会是乱码或者报错
解决思路:根据源码进行多格式解码,或者真正的解码格式

小结

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

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

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

相关文章

nuxt实现vuex持久化

前言: 此处不借助插件实现 store 本地持久化 所有状态持久化 使用 vuex 里面的 replaceState 方法还原 store 的根状态 API 参考 | Vuex 创建 store-cache.js 文件 在 plugins 目录下创建 store-cache.js 文件; store-cache.js export default (ctx) &g…

深度之眼(二十八)——神经网络基础知识(三)-卷积神经网络

文章目录 一、前言二、卷积操作2.1 填充(padding)2.2 步长2.3 输出特征图尺寸计算2.4 多通道卷积 三、池化操作四、Lenet-5及CNN结构进化史4.1 Lenet-5 一、前言 卷积神经网络–AlexNet(最牛)-2012 Lenet-5-大规模商用(1989) 二、…

如何保护磁盘数据?电脑磁盘数据怎么保护?

电脑磁盘是存储数据的基础,可以将各种重要数据保存在其中。为了避免数据泄露,我们需要保护磁盘数据。那么,电脑磁盘数据怎么保护呢?下面我们就一起来了解一下吧。 文件夹加密超级大师 文件夹加密超级大师是一款优秀的电脑数据加密…

收银系统源码-千呼新零售2.0【宠物、养生、大健康行业解决方案】

千呼新零售2.0系统是零售行业连锁店一体化收银系统,包括线下收银线上商城连锁店管理ERP管理商品管理供应商管理会员营销等功能为一体,线上线下数据全部打通。 适用于商超、便利店、水果、生鲜、母婴、服装、零食、百货、宠物、中医养生、大健康等连锁店…

ubuntu丢失网络/网卡的一种原因解决方案

现象 开机进入ubuntu后发现没有网络,无论是在桌面顶部状态栏的快捷键 还是 系统设置中,都没有”有线网“和”无线网“的选项,”代理“的选项是有的使用数据线连接电脑和手机,手机开启”通过usb共享网络“,还是没有任何…

【shell脚本实战案例】主机状态监控脚本

文章目录 案例需求脚本应用场景解决问题脚本思路实现代码 🌈你好呀!我是 山顶风景独好 🎈欢迎踏入我的博客世界,能与您在此邂逅,真是缘分使然!😊 🌸愿您在此停留的每一刻&#xff0c…

日期类(java)

文章目录 第一代日期类 Date常用构造方法SimpleDateFormat 日期格式化类日期转字符串(String -> Date)字符串转日期 (String->Date) 第二代日期类 Calendar常用字段与如何得到实例对象相关 API 第三代日期类(LocalDate\TIme)日期,时间&…

datax入门(data-web的简单使用)——02

datax入门(data-web的简单使用)——02 1. 前言1.1 关于data-web官网1.1.1 源码下载1.1.2 datax-Web部署手册1.1.2.1 Linux环境部署手册1.1.2.2 本地开发环境部署手册 1.2 关于datax入门 2. 下载之后打包、启动、登录2.1 我的本地环境2.2 修改配置2.3 初始…

[C语言]指针

一、指针简介 1、指针(Pointer)是C语言的一个重要知识点,其使用灵活、功能强大,是C语言的灵魂 2、指针与底层硬件联系紧密,使用指针可操作数据的地址,实现数据的间接访问 3、计算机存储机制 4、定义指针 (1&#x…

C++ 史上首次超越 C,仅次于Python!【送源码】

TIOBE 公布了 2024 年 6 月的编程语言排行榜——C 史上首次超越 C,跃至榜二,仅次于 Python。 C 是一种广泛应用于嵌入式系统、游戏开发和金融交易软件等领域的语言,在本月成功超越了 C, 成为了 TIOBE 指数中新的第二名。 这是 C …

一个 API 客户端和一份 TS 学习手册

第75期: Insomnia:超好看的 API 客户端 项目介绍: 一款适用于 GraphQL、REST、WebSockets 和 gRPC 的开源 API 客户端,颜值超高。 跨平台,支持 Mac、Windows 和 Linux。但不支持网页版,需要下载客户端。…

[XYCTF新生赛2024]-PWN:EZ2.0?(arm架构,arm架构下的系统调用)

查看保护 查看ida 完整exp: from pwn import*pprocess(./arm) premote(gz.imxbt.cn,20082) svc0x0001c58c mov_r2_r4_blx_r30x00043224 pop_r70x00027d78 pop_r40x000104e0 pop_r30x00010160 pop_r10x0005f824 pop_r00x0005f73c sh0x0008A090payloadba*0x44 payloa…

重生奇迹MU新手攻略:入坑之后怎样快速升级

今天为大家带来重生奇迹MU新手升级攻略,如果你希望在游戏中快速提升等级并达到满级,以下是一些快速升级的方法: 确保经验章及时更新。经验章是升级过程中必不可少的道具,根据个人偏好选择是否使用黄金线。对于有较多时间的玩家&a…

Maven - 在没有网络的情况下强制使用本地jar包

文章目录 问题解决思路解决办法删除 _remote.repositories 文件代码手动操作步骤验证 问题 非互联网环境,无法从中央仓库or镜像里拉取jar包。 服务器上搭建了一套Nexus私服。 Nexus私服故障,无法连接。 工程里新增了一个Jar的依赖, 本地仓…

Go-知识测试-工作机制

Go-知识测试-工作机制 生成test的maintest的main如何启动case单元测试 runTeststRunnertesting.T.Run 示例测试 runExamplesrunExampleprocessRunResult 性能测试 runBenchmarksrunNtesting.B.Run 在 Go 语言的源码中,go test 命令的实现主要在 src/cmd/go/internal…

南昌高校大学智能制造实验室数字孪生可视化系统平台建设项目验收

南昌高校大学智能制造实验室,作为该地区乃至全国智能制造领域的重要研究和教学基地,一直致力于探索和创新智能制造技术。近日,该实验室的数字孪生可视化系统平台建设项目成功通过了验收,标志着其在数字孪生技术领域取得了重大突破…

【期末速成】计算机操作系统 EP04 | 学习笔记

文章目录 一、前言🚀🚀🚀二、正文:☀️☀️☀️2.1 考点七:进程通信2.2 考点八:线程的概念2.3 考点九:处理机调度的概念及原则2.4 考点十:调度方式与调度算法 一、前言🚀…

【eMTC】eMTC 的SIB1-BR是如何发送

1 概述 eMTC的系统消息发送和接收与LTE的有很大不同,主要原因是在某一个时刻终端只接收1.4M的带宽,无法接收LTE的大带宽,比如20M带宽的LTE小区,eMTC终端,在某一个子帧,只能够接收其中的1.4M 带宽。PBCH本身…

npm常用命令详解与实践

npm(Node Package Manager)是一个JavaScript编程语言的包管理器,它是Node.js的默认包管理工具。npm用于管理项目中的依赖关系,安装、更新和发布包。 以下是一些常用的npm命令及其详解和实践示例: 1. npm init 初始化…

51单片机STC89C52RC——12.1 数据存储芯片AT24C02

目的/效果 利用存储芯片AT24C02存储数据,LCD1602显示存储的数据。 一,STC单片机模块 二,AT24C02存储芯片 2.1 介绍 AT24C02是一个2K位串行CMOS E2PROM,内部含有256个8位字节,采用先进CMOS技术实质上减少了器件的功…