网站常见的反爬手段及反反爬思路

news2024/10/4 12:23:28

摘要:介绍常见的反爬手段和反反爬思路,内容详细具体,明晰解释每一步,非常适合小白和初学者学习!!!

目录

一、明确几个概念

二、常见的反爬手段及反反爬思路

1、检测user-agent

2、ip 访问频率的限制 

(1)代理的基本原理

(2)代理的作用

(3)爬虫代理

(4)代理分类

(5)常见代理设置

3、必须账号登录

4、动态网页,JavaScript 压缩、 混淆和加密,加大分析难度

5、机器学习,分析爬虫行为

 


 

一、明确几个概念

  • 爬虫:采用任何技术手段,用别人开发好的程序, 批量 获取对方数据,都是爬虫。
  • 反爬:用任何技术手段,阻止别人批量获取自己的数据
  • 反反爬:使用任何技术手段、绕过对方的反爬策略

二、常见的反爬手段及反反爬思路

1、检测user-agent

        User-Agent:简称 UA,这是一个特殊的字符串头,可以使服务器识别客户端使用的操作系统及版本、浏览器及版本等信息。做爬虫时如果加上此信息,可以伪装为浏览器; 如果不加,很可能会被识别出来。

        在我们进行爬虫的过程中,经常是通过刷新网页,通过浏览器向服务器的数据传输来获取User-agent,以此将其写入Header请求头中来模仿伪装成浏览器。

  • user-agent的获取方法(示例):
  1. 使用Chrome浏览器打开百度网站
  2. 按下F12键,打开开发者界面
  3. 此时由于页面没有数据传输,属于静态页面,开发者界面也就没有任何数据传输的情况。
  4. 刷新一下,在开发者界面点击Network,选择all,点击第一个数据信息条目,在header视图中可以找到user-agent信息
  • 反爬手段

  以上方式只能使用固定的一个useragent,那么这将存在一个隐患。做了反爬的网站会检测useragent,如果一直都只用这一个固定的useragent进行访问,次数多了网站会识别出是爬虫在访问其网站,由此对其反爬限制!!!

  • 反反爬思路

        采用随机选取正常浏览器的useragent池来访问网站,Python中有一个第三方库:fake-useragent,里面拥有大量正常浏览器的useragent池。我们每次访问网站时,可以随机调用其中一个useragent进行使用!!!

from fake_useragent import UserAgent
# 实例化一个UserAgent对象
ua = UserAgent()
# 调用UserAgent对象的方法:随机获取useragent的池中的一个useragent
user_agent = ua.random
# 每次打印的结果都是不同的正常浏览器的useragent
print(user_agent)

实战使用实例代码

import requests
# 该包拥有多个正常的user-agent的池
from fake_useragent import UserAgent
# 随机获取useragent的池中的一个useragent
ua = UserAgent()
user_agent = ua.random
headers = {
    'User-Agent':user_agent
}
url = 'https://www.baidu.com'
r =requests.get(url,headers=headers)
print(r.text)

2、ip 访问频率的限制 

        在做爬虫的过程中经常会遇到一种情况,就是爬虫最初是正常运行、正常抓取数据的,一切看起来来都是那么美好,然而一杯茶的工夫就出现了错误,例如403 Forbidden,这时打开网页一看,可能会看到“您的IP访问频率太高”这样的提示。出现这种现象是因为网站采取了一些反爬虫措施。例如服务器会检测某个IP在单位时间内的请求次数,如果请求次数超过设定的阈值,就直接拒绝提供服务,并返回一些错误信息,可以称这种情况为封IP(也就是ip访问频率限制)。

        既然服务器检测的是某个IP在单位时间内的请求次数,那么借助某种方式把我们的IP伪装一下,让服务器识别不出请求是由我们本机发起的,不就可以成功防止封 IP 了吗?

        一种有效的伪装方式是使用代理,后面会详细说明代理的用法。在这之前,需要先了解代理的基本原理,它是怎样实现伪装IP的呢?

(1)代理的基本原理

        代理实际上就是指代理服务器,英文叫作 Proxy Server,功能是代网络用户取得网络信息。形象点说,代理是网络信息的中转站。当客户端正常请求一个网站时,是把请求发送给了 Web 服务器,Web服务器再把响应传回给客户端。设置代理服务器,就是在客户端和服务器之间搭建一座桥,此时客户端并非直接向 Web服务器发起请求,而是把请求发送给代理服务器,然后由代理服务器把请求发送给Web服务器,Web服务器返回的响应也是由代理服务器转发给客户端的。这样客户端同样可以正常访问网页,而且这个过程中Web服务器识别出的真实IP就不再是客户端的 IP了,成功实现了 IP伪装,这就是代理的基本原理。

(2)代理的作用

1、突破自身IP的访问限制,访问一些平时不能访问的站点。

2、访问一些单位或团体的内部资源。比如,使用教育网内地址段的免费代理服务器,就可以下载和上传对教育网开放的各类 FTP,也可以查询、共享各类资料等。

3、 提高访问速度。通常,代理服务器会设置一个较大的硬盘缓冲区,当有外界的信息通过时,会同时将其保存到自己的缓冲区中,当其他用户访问相同的信息时,直接从缓冲区中取出信息,提高了访问速度。

4、隐藏真实 IP。上网者可以通过代理隐藏自己的 IP,免受攻击。对于爬虫来说,使用代理就是为了隐藏自身IP,防止自身的 IP 被封锁。

(3)爬虫代理

        对于爬虫来说,由于爬取速度过快,因此在爬取过程中可能会遇到同一个 IP 访问过于频繁的问题,此时网站会让我们输入验证码登录或者直接封锁IP,这样会给爬取造成极大的不便。使用代理隐藏真实的IP,让服务器误以为是代理服务器在请求自己。这样在爬取过程中不断更换代理,就可以避免IP被封锁,达到很好的爬取效果。

(4)代理分类

        对代理进行分类时,既可以根据协议,也可以根据代理的匿名程度,这两种分类方式分别总结如下。

根据协议区分

        根据代理的协议,代理可以分为如下几类。

FTP代理服务器:主要用于访问FTP服务器,一般有上传、下载以及缓存功能,端口一般为21、2121等。

HTTP代理服务器:主要用于访问网页,一般有内容过滤和缓存功能,端口一般为80、8080、3128等。

SSL/TLS代理:主要用于访问加密网站,一般有SSL或TLS加密功能(最高支持128位加密强度), 端口一般为 443。

RTSP代理: 主要用于 Realplayer 访问Real 流媒体服务器,一般有缓存功能,端口一般为554。

Telnet代理:主要用于 Telnet 远程控制(黑客入侵计算机时常用于隐藏身份),端口一般为23。

POP3/SMTP 代理: 主要用于以 POP3/SMTP 方式收发邮件,一般有缓存功能,端口一般为110/25。

SOCKS代理:只是单纯传递数据包,不关心具体协议和用法,所以速度快很多,一般有缓存功能,端口一般为1080。SOCKS代理协议又分为SOCKS4和SOCKS5, SOCKS4协议只支持TCP,SOCKS5 协议则支持 TCP和UDP,还支持各种身份验证机制、服务器端域名解析等。简单来说, SOCKS4 能做到的 SOCKS5 都能做到, 但 SOCKS5 能做到的 SOCKS4不一定做得到。

根据匿名程度区分

根据代理的匿名程度,代理可以分为如下几类。

高度匿名代理:高度匿名代理会将数据包原封不动地转发,在服务端看来似乎真的是一个普通客户端在访问,记录的 IP 则是代理服务器的 IP。

普通匿名代理:普通匿名代理会对数据包做一些改动,服务端可能会发现正在访问自己的是个代理服务器,并且有一定概率去追查客户端的真实IP。这里代理服务器通常会加入的 HTTP头有 HTTP VIA 和HTTP X FORWARDED FOR。

透明代理:透明代理不但改动了数据包,还会告诉服务器客户端的真实 IP。这种代理除了能用缓存技术提高浏览速度,用内容过滤提高安全性之外,并无其他显著作用,最常见的例子是内网中的硬件防火墙。

间谍代理:间谍代理是由组织或个人创建的代理服务器,用于记录用户传输的数据,然后对记录的数据进行研究、监控等。

(5)常见代理设置

  • 对于网上的免费代理,最好使用高度匿名代理,可以在使用前把所有代理都抓取下来筛选一下可用代理,也可以进一步维护一个代理池。
  • 使用付费代理服务。互联网上存在许多可以付费使用的代理商,质量要比免费代理好很多。(例:快代理(快代理 - 企业级HTTP代理IP云服务))
  • ADSL拨号,拨一次号换一次IP,稳定性高,也是一种比较有效的封锁解决方案。
  • 蜂窝代理,即用4G或5G网卡等制作的代理。由于用蜂窝网络作为代理的情形较少,因此整体被封锁的概率会较低,但搭建蜂窝代理的成本是较高的。

3、必须账号登录

        在浏览网站的过程中,我们经常会遇到需要登录的情况,有些页面只有登录之后才可以访问。在登录之后可以连续访问很多次网站,但是有时候过一段时间就需要重新登录。还有一些网站,在打开浏览器时就自动登录了,而且在很长时间内都不会失效,这又是什么情况? 其实这里面涉及 Session 和Cookie 的相关知识。

        很多页面是需要登录之后才可以查看的。按照一般的逻辑,输入用户名和密码登录网站,肯定是拿到了一种类似凭证的东西,有了这个凭证,才能保持登录状态,访问那些登录之后才能看得到的页面。这种凭证就是Session 和Cookie 共同作用产生的结果。

  •  无状态HTTP

        在了解Session 和Cookie 之前,我们还需要了解 HTTP的一个特点, 叫作无状态。HTTP的无状态是指 HTTP协议对事务处理是没有记忆能力的,或者说服务器并不知道客户端处于什么状态。客户端向服务器发送请求后,服务器解析此请求,然后返回对应的响应,服务器负责完成这个过程,而且这个过程是完全独立的,服务器不会记录前后状态的变化,也就是缺少状态记录。这意味着之后如果需要处理前面的信息,客户端就必须重传,导致需要额外传递一些重复请求,才能获取后续响应,这种效果显然不是我们想要的。为了保持前后状态,肯定不能让客户端将前面的请求全部重传一次,这太浪费资源了,对于需要用户登录的页面来说,更是棘手。

        这时,两种用于保持HTTP连接状态的技术出现了,分别是Session 和Cookie。Session在服务端,也就是网站的服务器,用来保存用户的 Session 信息; Cookie 在客户端,也可以理解为在浏览器端,有了 Cookie,浏览器在下次访问相同网页时就会自动附带上它,并发送给服务器,服务器通过识别Cookie 鉴定出是哪个用户在访问,然后判断此用户是否处于登录状态,并返回对应的响应。

        可以这样理解,Cookie 里保存着登录的凭证,客户端在下次请求时只需要将其携带上,就不必重新输入用户名、密码等信息重新登录了。

  • 反反爬思路

        因此在爬虫中,处理需要先登录才能访问的页面时,我们一般会直接将登录成功后获取的Cookie 放在请求头里面直接请求,而不重新模拟登录。

4、动态网页,JavaScript 压缩、 混淆和加密,加大分析难度

        对于动态网页来说, 其逻辑是依赖于 JavaScript来实现的。JavaScript有如下特点。

  •  JavaScript代码运行于客户端,也就是它必须在用户浏览器端加载并运行。
  • JavaScript代码是公开透明的,也就是说浏览器可以直接获取到正在运行的 JavaScript 的源码。

        基于这两个原因,JavaScript 代码是不安全的,任何人都可以读、分析、复制、盗用甚至篡改代码。所以说,对于上述情形,客户端 JavaScript 对于某些加密的实现是很容易被找到或模拟的,了解了加密逻辑后,模拟参数的构造和请求也就轻而易举了,所以如果 JavaScript 没有做任何层面的保护的话,接口加密技术基本上对数据起不到什么防护作用。

        如果你不想让自己的数据被轻易获取,不想他人了解 JavaScript 逻辑的实现,或者想降低被不怀好意的人甚至是黑客攻击的风险,那么就需要用到JavaScript 压缩、混淆和加密技术了。

  • 代码压缩:去除JavaScript代码中不必要的空格、换行等内容,使源码都压缩为几行内容,降低代码的可读性,当然同时也能提高网站的加载速度。
  • 代码混淆:使用变量替换、字符串阵列化、控制流平坦化、多态变异、僵尸函数、调试保护等手段,使代码变得难以阅读和分析,达到最终保护的目的。但这不影响代码的原有功能,是理想、实用的 JavaScript保护方案。
  • 代码加密:可以通过某种手段将JavaScript代码进行加密,转成人无法阅读或者解析的代码,如借用WebAssembly技术, 可以直接将 JavaScript代码用C/C++ 实现, JavaScript调用其编译后形成的文件来执行相应的功能。

反反爬思路: 

        遇到这种情况,我们就得硬着头皮去想方设法找出其中隐含的关键逻辑了。这个过程可以成为JavaScript逆向, 这是一个较为复杂庞大的技术,后续我将另做介绍。

5、机器学习,分析爬虫行为

        这种反爬技术非常的高端,但成本也高,很少网站会进行使用此种反爬手段。网站具备机器学习能力,可以自主分析出一种行为是否是爬虫行为。

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

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

相关文章

Web服务器基础

Web服务器基础 【一】前端概述 【1】HTML HTML(超文本标记语言)是用于创建网页结构的标记语言。它定义了网页的骨架,包括标题、段落、列表、链接等元素,但没有样式。可以将HTML视为网页的结构和内容的描述。 【2】CSS css&…

NAS系统折腾记 | TinyMediaManager刮削电影海报

搭建好了NAS系统和Emby Media Server,接下来就是怎样对下载好的电影/电视剧集等内容进行刮削来展示电影海报墙获得更好的效果了。实际上,Emby Server本身就内置了强大的元数据抓取功能,能够自动从互联网上抓取电影、电视剧的元数据和海报等信…

mysql在服务器中的主从复制Linux下

mysql在服务器中的主从复制Linux下 为什么要进行主从复制主从复制的原理主从复制执行流程操作步骤主库创建从库创建 测试 为什么要进行主从复制 在业务中通常会有情况,在sql执行时,将表锁住,导致不能进行查询,这样就会影响业务的…

【教程】MySQL数据库学习笔记(一)——认识与环境搭建(持续更新)

写在前面: 如果文章对你有帮助,记得点赞关注加收藏一波,利于以后需要的时候复习,多谢支持! 【MySQL数据库学习】系列文章 第一章 《认识与环境搭建》 第二章 《数据类型》 文章目录 【MySQL数据库学习】系列文章一、认…

C++ 位运算常用操作 二进制中1的个数

给定一个长度为 n 的数列,请你求出数列中每个数的二进制表示中 1 的个数。 输入格式 第一行包含整数 n 。 第二行包含 n 个整数,表示整个数列。 输出格式 共一行,包含 n 个整数,其中的第 i 个数表示数列中的第 i 个数的二进制表…

深度解析 Transformer 模型:原理、应用与实践指南【收藏版】

深度解析 Transformer 模型:原理、应用与实践指南 1. Transformer 模型的背景与引言2. Transformer 模型的原理解析2.1 自注意力机制(Self-Attention)自注意力机制原理 2.2 多头注意力机制(Multi-Head Attention)多头注…

vue的生命周期图解

vue的生命周期图解 添加链接描述 vue的生命周期函数及过程的简述: vue的生命周期函数,其实就是vm的生命周期; 创建:beforeCreate、created 挂载:beforeMount、mounted 更新:beforeUpdate、updated [ˌʌpˈ…

(AtCoder Beginner Contest 341)(A - D)

比赛地址 : Tasks - Toyota Programming Contest 2024#2&#xff08;AtCoder Beginner Contest 341&#xff09; A . Print 341 模拟就好了 &#xff0c; 先放一个 1 , 然后放 n 个 01 ; #include<bits/stdc.h> #define IOS ios::sync_with_stdio(0);cin.tie(0);cout…

初始HTTP协议

一、http协议 1、http相关概念 互联网&#xff1a;是网络的网络&#xff0c;是所有类型网络的母集因特网&#xff1a;世界上最大的互联网网络。即因特网概念从属于互联网概念。习惯上&#xff0c;大家把连接在因特网上的计算机都成为主机。万维网&#xff1a;WWW&#xff08;…

vue3项目配置按需自动引入自定义组件unplugin-vue-components

我们通常在项目中&#xff0c;需要手动引入自定义的各种组件&#xff0c;如果涉及的页面功能比较多的话&#xff0c;光是import的长度都能赶上春联了。 如果&#xff0c;能有一个插件帮我们实现自动引入&#xff0c;是不是要谢天谢地了呢&#xff1f; 接下来就进入我们的主角u…

Vue2尚品汇前台项目笔记——(1)项目初始化

Vue2尚品汇前台项目笔记 一、项目初始化 使用[脚手架创建项目&#xff0c;具体参考之前的脚手架配置笔记&#xff0c;我起名叫vue_shop_test 1.脚手架目录分析 node_modules文件夹&#xff1a;项目依赖文件夹 public文件夹&#xff1a;一般放置一些静态资源&#xff08;图…

蓝桥杯:C++二叉树

二叉树 几乎每次蓝桥杯软件类大赛都会考核二叉树&#xff0c;它或者作为数据结构题出现&#xff0c;或者应用在其他算法中。大部分高级数据结构是基于二叉树的&#xff0c;例如常用的高级数据结构线段树就是基于二叉树的。二叉树应用广泛和它的形态有关。 二叉树的定义&#x…

Junit测试套件(Test Suite)

0. 什么是测试套件 对多个测试类的统一执行 只有一个测试类 点击一下执行就好有 5个测试类 分别打开 挨个点执行有100个测试类 &#xff1f;&#xff1f;分别点开执行 为100个测试类创建一个测试套件&#xff0c;然后再执行一次测试套件 √ 一个测试套件“囊括“三个测试类…

【Funny Game】 人生重开模拟器

目录 【Funny Game】 人生重开模拟器&#xff01; 人生重开模拟器&#xff01; 文章所属专区 Funny Game 人生重开模拟器&#xff01; 人生重开模拟器&#xff0c;让你体验从零开始的奇妙人生。在这个充满惊喜和挑战的游戏中&#xff0c;你可以自由选择性别、出生地、家庭背景…

Bpmn-js 属性控制

我们可以通过bpmn-js来访问对应的BPMN图例的属性信息。对应的流程图中的每个图例元素&#xff08;如开始、结束、中间/边界事件等都通过businessObject属性存储对基础BPMN元素的引用。业务对象是从BPMN 2.0 XML导入并在导出过程中序列化的实际元素。使用业务对象来读取和写入BP…

云渲染是什么?一文带你了解渲染100云渲染!

云渲染&#xff0c;做为设计行业必不可少的存在&#xff0c;新年伊始&#xff0c;带新朋友有更深入的了解。 云渲染的概念 云渲染是一种基于云计算的渲染服务&#xff0c;它利用云计算平台的强大计算能力来提供高效的渲染服务。 云渲染将3D程序放在远程的服务器中渲染&#x…

阿基米德签证小程序管理系统功能清单

阿基米德签证小程序管理系统&#xff0c;底层架构采用当前国内最流行的php框架thinkphp8.0、采用广泛使用的MYSQL数据库&#xff0c;管理后台前后台分离&#xff0c;同时使用了当今最流行的基于VUE3和elementPlus前端框架&#xff0c;小程序采用了支持多端合一的UNI-APP开发&am…

离线数仓(二)【用户行为日志采集平台搭建】

用户行为日志采集平台搭建 1、用户行为日志概述 用户行为日志的内容&#xff0c;主要包括用户的各项行为信息以及行为所处的环境信息。收集这些信息的主要目的是优化产品和为各项分析统计指标提供数据支撑。收集这些信息的手段通常为埋点。 目前主流的埋点方式&#xff0c;有代…

力扣题目训练(15)

2024年2月8日力扣题目训练 2024年2月8日力扣题目训练507. 完美数520. 检测大写字母521. 最长特殊序列 Ⅰ221. 最大正方形237. 删除链表中的节点115. 不同的子序列 2024年2月8日力扣题目训练 2024年2月8日第十五天编程训练&#xff0c;今天主要是进行一些题训练&#xff0c;包括…

柚见(伙伴匹配系统)第六期

开发主页 开发主页&#xff08;默认推荐和自己兴趣相当的用户&#xff09;优化主页的性能&#xff08;缓存 定时任务 分布式锁&#xff09; 前端recommend 最简单&#xff1a;直接 list 列表 cv searchResult页面的代码 修改 后端接口 数据内容下边距修改 提取用户信息卡…