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

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

  • 学习目标
  • 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.rhkb.cn/news/363743.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

firewalld(2)安装、配置文件、规则查询

安装firewalld 我使用的操作系统是debian 12,并没有安装firewalld。 通过apt install firewalld安装firewalld firewalld 本身是一个服务(firewalld.service),可以通过 systemctl 进行启动、停止和重启,而iptables 本身并不是一个服务,而是一个用户空间工具,被用来配置底…

计算机人说学校-北京理工大学-计算机方向

1. 专长、特点、特色 北京理工大学(北理工)的计算机专业同样具有显著的优势和特点: 学术水平高:作为一所985高校,北理工在计算机科学与技术以及人工智能领域都有着较高的学术水平和教学资源。研究方向广泛&#xff1…

并发编程基础概念

相关概念 并行 并行是指同一个时刻,多个任务同时进行。只有在多核CPU下才会发生。 并发 并发是指单个CPU在不同任务之间来换切换工作,但是同一时刻只有一个任务在工作。由于CPU的切换速度很快,给人的感受是多个任务在一起运行。 串行 串行…

一年前 LLM AGI 碎片化思考与回顾系列⑧ · 穿越SystemⅡ未知之境

阅读提示: 本篇系列内容的是建立于自己过去一年在以LLM为代表的AIGC快速发展浪潮中结合学术界与产业界创新与进展的一些碎片化思考并记录最终沉淀完成,在内容上,与不久前刚刚完稿的那篇10万字文章 「融合RL与LLM思想,探寻世界模型…

期末C语言易错知识点整理

1.在定义多维数组时,除了最左边的维度,其余的维度必须明确指定大小 2.int m[1][4]{4}; 定义的是一个 1 行 4 列的二维数组,初始化时提供了一个元素 4,其余元素默认初始化为 0,因此是正确的。 3.二维数组 a[3][6] 中的索…

PKG打包sqlite3项目,如何添加node_sqlite3.node依赖

项目地址:https://github.com/helson-lin/pkg_sqlite 在ffandown项目内,由于项目使用了sqlite3,在跨平台打包的时候,除了本机外其他平台打包之后运行缺少node_sqlite3.node依赖。 为了解决问题,百度了很久&#xff0c…

分享一个导出数据到 Excel 的解决方案

前言 许多业务场景下需要处理和分析大量的数据,而 Excel 是广泛使用的文件格式,几乎所有人都能打开和查看 Excel 文件,因此将数据库中的原始数据处理后,导出到 Excel 是一个很常见的功能,对于数据管理、分析、备份、展…

【代码随想录】【算法训练营】【第45天】 [198]打家劫舍 [213]打家劫舍II [337]打家劫舍III

前言 思路及算法思维,指路 代码随想录。 题目来自 LeetCode。 day 45,周五,坚持不了一点~ 题目详情 [198] 打家劫舍 题目描述 198 打家劫舍 解题思路 前提:相邻两房屋不能连续盗窃 思路:动态规划, dp[i]: [0,…

【C语言】--操作符详解

🌭个人主页: 起名字真南 🍿个人专栏:【数据结构初阶】 【C语言】 目录 1 算术操作符1.1 和 -1.2 *1.3 /1.4 % 2 赋值操作符 :2.1 复合赋值符 3 单目操作符3.1 和- - 4 强制类型转换5 printf 和 scanf5.1 printf5.1.1 基本用法5.1.2 占位符5.…

Navicat连接Oracle出现Oracle library is not loaded的解决方法

目录 1. 问题所示2. 原理分析3. 解决方法1. 问题所示 使用Navicat链接Oracle的时候,出现如下提示:Oracle library is not loaded. 截图如下所示: 2. 原理分析 通常是由于缺少必需的 Oracle 客户端库或环境变量未正确配置所致 还有一种情况是 32位与64位的不匹配:Navica…

【数据可视化技术】1、如何使用Matplotlib和Seaborn库在Python中绘制热力图

热力图是一种数据可视化技术,可以显示变量之间的相关性。这个代码段是数据分析和可视化的常用方法,特别适合于展示变量之间的相关性,对于数据科学和机器学习项目非常有帮助。 1、 导入必要的库 首先,确保你已经安装了matplotlib…

javaSE知识点整理总结(上)

目录 一、面向对象 1. 类、对象、方法 2.面向对象三大特征 (1)封装 (2)继承 (3)多态 二、常用类 1.Object类 2.Array类 3.基本数据类型包装类 4.String类 5.StringBuffer类 6.Math类 7.Random…

WAIC2024 | 华院计算邀您共赴2024年世界人工智能大会,见证未来科技革新

在智能时代的浪潮汹涌澎湃之际,算法已成为推动社会进步的核心力量。作为中国认知智能技术的领军企业,华院计算在人工智能的广阔天地中,不断探索、创新,致力于将算法的潜力发挥到极致。在过去的时日里,华院计算不断探索…

Mac可以读取NTFS吗 Mac NTFS软件哪个好 mac ntfs读写工具免费

在跨操作系统环境下使用外部存储设备时,特别是当Windows系统的U盘被连接到Mac电脑时,常常会遇到文件系统兼容性的问题。由于Mac OS原生并不完全支持对NTFS格式磁盘的读写操作,导致用户无法直接在Mac上向NTFS格式的U盘或硬盘写入数据。下面我们…

SpringBoot:使用Spring Batch实现批处理任务

引言 在企业级应用中,批处理任务是不可或缺的一部分。它们通常用于处理大量数据,如数据迁移、数据清洗、生成报告等。Spring Batch是Spring框架的一部分,专为批处理任务设计,提供了简化的配置和强大的功能。本文将介绍如何使用Spr…

排序(冒泡排序、选择排序、插入排序、希尔排序)-->深度剖析(一)

欢迎来到我的Blog,点击关注哦💕 前言 排序是一种基本的数据处理操作,它涉及将一系列项目重新排列,以便按照指定的标准(通常是数值大小)进行排序。在C语言中,排序算法是用来对元素进行排序的一系…

【高性能服务器】服务器概述

🔥博客主页: 我要成为C领域大神🎥系列专栏:【C核心编程】 【计算机网络】 【Linux编程】 【操作系统】 ❤️感谢大家点赞👍收藏⭐评论✍️ 本博客致力于知识分享,与更多的人进行学习交流 ​ 服务器概述 服…

DDMA信号处理以及数据处理的流程---聚类

Hello,大家好,我是Xiaojie,好久不见,欢迎大家能够和Xiaojie一起学习毫米波雷达知识,Xiaojie准备连载一个系列的文章—DDMA信号处理以及数据处理的流程,本系列文章将从目标生成、信号仿真、测距、测速、cfar检测、测角、目标聚类、目标跟踪这几个模块逐步介绍,这个系列的…

静态链表详解(C语言版)

顺序表和链表的优缺点 顺序表和链表是两种基本的线性数据结构,它们各自有不同的优缺点,适用于不同的应用场景。 顺序表(Sequential List,通常指数组) 优点: 随机访问:可以通过索引快速访问任…

【技术追踪】UNest:一种用于非配对医学图像合成的新框架(MICCAI-2024)

前天看了一篇文章图像分割用diffusion,今天看了篇文章图像合成不用diffusion,你说说这~ 传送门:【技术追踪】SDSeg:医学图像的 Stable Diffusion 分割(MICCAI-2024) UNest:UNet结构的Transforme…