详解爬虫策略,反爬虫策略,反反爬爬虫策略
爬虫策略
爬取策略是网络爬虫在执行网页抓取任务时所遵循的规则或策略。这些策略决定了爬虫如何从一个页面转到另一个页面,什么时间进行抓取,以及应该抓取哪些内容。以下是几种常见的爬取策略:
深度优先搜索(DFS)
在这种策略下,爬虫会尽可能深入地遍历一个网站。也就是说,它会从一个页面开始,然后跟踪该页面上的第一个链接,然后继续跟踪找到页面上的第一个链接,如此往复。
广度优先搜索(BFS)
在广度优先搜索策略下,爬虫会首先访问初始页面上的所有链接,然后再转向这些链接的页面,依此类推。
PageRank
这种策略模仿了谷歌的搜索算法。它不仅考虑页面间的链接,还考虑页面的“重要性”。这通常需要预先计算或者实时更新。
反向链接策略
这种策略会查找指向特定页面的所有链接,以确定这个页面的价值或相关性。
随机遍历
这种策略不按照任何特定顺序遍历链接,而是随机选择下一个要访问的页面。
按需爬取
这是一种更为复杂的策略,通常基于用户需求或预先设定的条件来抓取数据。
遵守Robots协议
大多数网站都有一个 robots.txt
文件,该文件描述了哪些页面可以抓取,哪些不可以。遵循这些规则是良好网络公民的标志。
延迟和时间策略
避免在短时间内发送大量的请求,以免给网站服务器造成负担。
重试策略
如果某个页面暂时无法访问,应该设置一个重试策略。
数据去重
在多次爬取和更新过程中,需要有策略去除重复的数据。
用户代理和头信息
合理设置用户代理和请求头,以模拟不同的浏览器和设备,有时这也是为了遵守网站的使用政策。
失败恢复
保存爬虫的状态,以便在出现问题时可以从断点恢复。
IP轮换和代理
为了避免被封锁,一些爬虫会使用多个IP地址或代理服务器。
每种策略都有其优缺点,通常最好的做法是结合多种策略,以适应不同的爬取需求和场景。
反爬虫策略
反爬虫策略是一组用于防止或限制自动化网络爬虫(或称为网络蜘蛛、抓取器)访问网站内容的技术和方法。由于爬虫可能导致服务器压力增加、消耗带宽或滥用获取的数据,因此许多网站都会使用一定的反爬虫策略。
下面是一些常见的反爬虫策略:
Robots.txt 文件
通过在网站根目录下放置一个 robots.txt
文件,网站所有者可以指明哪些页面或路径是禁止爬取的。
用户代理(User-Agent)检测
服务器会检查请求的用户代理字段,如果判断为爬虫或非常规浏览器,可能会拒绝访问。
IP地址限制
当从同一个IP地址来的请求量异常高时,服务器可能会限制或封禁该IP地址。
速率限制
限制单个用户(通常通过IP地址或会话标识符)在特定时间内的请求次数。
验证码
在多次连续请求后,或在触发某种模式后,要求用户输入验证码。
JavaScript挑战
一些网站使用JavaScript生成页面内容或执行某种计算,然后将结果用于验证。这样做的目的是因为大多数基础爬虫不执行JavaScript。
AJAX数据加载
数据并不直接嵌入在HTML页面中,而是通过JavaScript异步加载。这增加了爬虫获取数据的复杂性。
Cookie 和 Session 检查
检查请求是否携带了有效的Cookie和Session信息,如果没有,可能会被视为非法访问。
Honey Pot
设置一些对正常用户不可见,但对爬虫可见的“陷阱”链接。如果访问了这些链接,则很可能是爬虫。
动态改变网页结构
不定期地改变网页的HTML结构和CSS选择器,这样基于旧结构编写的爬虫程序将无法正常工作。
HTTP Header 检查
除了检查用户代理外,还可以检查其它HTTP头信息,如Referer
、Origin
等,来确定请求是否合法。
时间戳检查
验证请求之间的时间间隔,如果过于快速,可能是自动化操作。
Web Application Firewalls (WAF)
使用Web应用防火墙来识别并阻止爬虫或恶意请求。
请注意,过度使用反爬虫措施可能会影响网站的用户体验。因此,在实施这些措施时应当权衡各方面的因素。同时,也应注意法律和伦理问题,确保这些措施不违反相关法律规定。
反反爬爬虫策略
反反爬策略是一种用于应对反爬虫机制的手段。这通常涉及模仿人类用户行为、使用更复杂的请求头、设置合适的延迟、使用代理等。然而,值得注意的是,在不具备明确许可的情况下对一个网站使用这些手段可能是违法的,或者至少是不道德的。因此,在应用这些策略之前,一定要仔细阅读并理解目标网站的服务条款。
以下是一些常用的反反爬策略:
修改用户代理(User-Agent)
使用不同的用户代理字符串以模仿不同的浏览器和设备。
IP代理和轮换
使用多个IP地址或代理服务以规避IP限制。
请求头定制
模仿常规浏览器行为,如设置合适的Referer
、Accept-Language
等HTTP头信息。
遵守Robots.txt
虽然这并不是一种反反爬策略,但遵守网站的 robots.txt
文件是合法和道德爬取的基础。
动态延时
设置动态的请求间隔时间,尽量模仿人类行为,避免触发速率限制。
模拟登录和保持会话
对于需要登录才能访问的网站,模拟登录过程并保持会话。
JavaScript执行
使用如Selenium、Puppeteer等工具来执行JavaScript,以获取动态加载的内容。
分布式爬虫
使用多台机器或多个云服务进行爬取,以分散单一点的请求压力。
分析和适应
有些网站会定期更改其HTML结构或JavaScript代码,以阻断爬虫。持续监控并适应这些变化是很重要的。
验证码处理
使用图像识别或其他机器学习算法来自动解决验证码。
数据指纹和哈希避免
有时服务器通过检测请求参数或页面交互行为的模式来识别爬虫。在这种情况下,可以尝试通过随机化这些信息来避免被检测。
使用第三方API或数据源
有时候,网站或服务提供了API,或者有第三方服务提供了相同或类似的数据,合法使用这些API通常比爬取网页更为可靠和高效。
Web应用防火墙(WAF)绕过
识别并绕过Web应用防火墙的特定规则,这通常涉及对请求头、参数或路径的细微调整。
请再次注意,这些策略可能触及法律问题,因此在应用之前务必进行适当的法律咨询。
相关文章:
详解爬虫策略,反爬虫策略,反反爬爬虫策略
爬虫策略 爬取策略是网络爬虫在执行网页抓取任务时所遵循的规则或策略。这些策略决定了爬虫如何从一个页面转到另一个页面,什么时间进行抓取,以及应该抓取哪些内容。以下是几种常见的爬取策略: 深度优先搜索(DFS) 在…...
ES6中的Promise对象
1. Promise是什么 Promise简单来说就是一个容器,里面保存着未来才会结束的事件的结果(这个事件就是异步操作)。Promise是一个对象(构造函数),可以获取异步操作的结果。 特点: 对象的状态不受外…...
vue 知识点———— 生命周期
1.什么是生命周期 Vue实例从创建到销毁的过程,叫生命周期。 从开始创建、初始化数据、编译模版、挂载Dom-渲染、更新-渲染、销毁等过程。 2.生命周期一共有几个阶段 创建前/后, 载入前/后,更新前/后,销毁前/销毁后 3.初始化相关属性 beforeCreate(创建前…...
焊接符号学习
欧美焊接符号举例 4.5------表示焊点直径 【3】------根据图示说明,表示此项为CC项或者SC项 6-------表示此处为第六CC项或者SC项 BETWEEN①AND②------表示①件和②件俩点之间的焊点 12X------表示俩点之间的焊点个数为12个 日本焊接符号举例 A------根据图示&…...
记录linux清理空间的步骤
sudo du -sh /* 看整体空间占用情况 [roothost ~]# sudo du -sh /* 0 /bin 143M /boot 85M /data 0 /dev 38M /etc 4.0K /home 0 /lib 0 /lib64 16K /lostfound 4.0K /media 4.0K /mnt 31M /opt 0 /proc 260K /r…...
丰田工厂停产竟然因为磁盘...
丰田因磁盘空间不足关闭14家工厂 在如今的信息时代,无论是生活还是工作,我们都离不开计算机和网络。然而,令人惊讶的是,一家全球知名的汽车制造商——丰田,却因为磁盘空间不足的问题,被迫关闭了14家工厂。…...
Python工程师Java之路(p)Maven聚合和继承
文章目录 依赖管理依赖传递可选依赖和排除依赖 继承与聚合 依赖管理 指当前项目运行所需的jar,一个项目可以设置多个依赖 <!-- 设置当前项目所依赖的所有jar --> <dependencies><!-- 设置具体的依赖 --><dependency><!-- 依赖所属群组…...
Java 复习笔记 - Lambda 表达式 he 经典算法题
文章目录 Lambda表达式 概述(一)基本作用(二)特点 一,初识Java中的Lambda 表达式二,函数式编程三,省略写法四,练习:使用Lambda 表达式 简化Comparator接口的匿名形式综合…...
算法——快乐数
202. 快乐数 - 力扣(LeetCode) 由图可知,其实这也是一个判断循环的过程,要用到快慢指针,且相遇后,若在全为1的循环里,那么就是快乐数,若相遇后不为1,说明这不是快乐数。 …...
vue使用window.location.href 跳转失败
问题: vue项目中直接使用window.lcocation.href跳转外链,但是跳转的链接会被拼接成这样 http://localhost:8080/#/www.baidu.com 原因: 我们打开的外部链接会自动拼接我们的源地址,导致网址链接不正确,无法正常访问 …...
【备忘】清理Office缓存
【背景】电脑安装了M365 Apps for enterprise的客户端,遇到不常见的奇怪问题。尝试看清理缓存是否可以解决。 【清理步骤】 1. 关闭所有Office365 应用; 2. 搜索 %AppData% ,并打开该文件夹; 3. 进到 AppData > Local > M…...
MacOS环境变量source生效但重启后又失效
https://blog.csdn.net/dxk539687357/article/details/127942044 .bash_profile 和 .zshrc 都是macos系统重环境变量配置的文件,但是两者有不同之处。 .bash_profile:在执行source ~/.bash_profile,只在当前窗口生效,但关闭当前…...
Sql语句大全--插入
今天抽空整理下项目中的Sql语句 项目中用到的Sql语句大全 Insert 语句,有简有难 Insert 语句,有简有难 insert into clayor (pco,ppolnum,ptype,psn,prela,pname,pid,paddr1,paddr2,pbakcod1,pbakcod2,paccnum,pchkflag,pagtcod,pstatus, pchksts,pauth…...
Unity 收取“运行费”引众怒,开源免费3D游戏引擎CGE(Castle Game Engine)吸引开发者关注
特征 1. 总结2. 跨平台3. 可视化编辑器4.视口与场景,相机,导航和其他组件5. 数据格式 5.1. glTF5.2. X3D5.3. 精灵表5.4. 脊柱6. 图形效果7. 图片8. 用户界面组件 8.1. 文本和字体9. 网络10. 优化和分析11. 声音12. 物理13. 平铺集成14. 粒子15. 使用现代…...
Apache DolphinScheduler - 快速扩展 TaskPlugin 从入门到放弃
目前在大数据生态中,调度系统是不可或缺的一个重要组件。Apache DolphinScheduler 作为一个顶级的 Apache 项目,其稳定性和易用性也可以说是名列前茅的。而对于一个调度系统来说,能够支持的可调度的任务类型同样是一个非常重要的因素…...
线性代数的本质(四)——行列式
文章目录 行列式二阶行列式 n n n 阶行列式行列式的性质克拉默法则行列式的几何理解 行列式 二阶行列式 行列式引自对线性方程组的求解。考虑两个方程的二元线性方程组 { a 11 x 1 a 12 x 2 b 1 a 21 x 1 a 22 x 2 b 2 \begin{cases} a_{11}x_1a_{12}x_2b_1 \\ a_{21}x_…...
适合初学者快速入门的Numpy实战全集
适合初学者快速入门的Numpy实战全集 Numpy是一个用python实现的科学计算的扩展程序库,包括: 1、一个强大的N维数组对象Array;2、比较成熟的(广播)函数库;3、用于整合C/C和Fortran代码的工具包;…...
rabbitmq 面试题
1.交换机类型 RabbitMQ是一个开源的消息队列系统,它支持多种交换机类型,用于在消息的生产者和消费者之间路由和分发消息 Direct Exchange(直接交换机):Direct交换机是最简单的交换机类型之一。它将消息按照消息的Rout…...
比较Visual Studio Code中的文件
目录 一、比较两个文件 1.1VS code中的文件大致分为两类: 1.2如何比较VS code中的两个文件? 二、并排差异模式:VS code中的一种差异模式 三、内联差异模式:VS code中的另一种差异模式 四、VS code忽略在行首或者行尾添加或删除…...
誉天在线项目-UML状态图+泳道图
什么是UML UML(Unified Modeling Language)是一种用于软件系统建模的标准化语言。它提供了一组图形符号和规范,用于描述和设计软件系统的结构、行为和交互。 UML图形符号包括类图、用例图、时序图、活动图、组件图、部署图等,每…...
【linux基础(六)】Linux中的开发工具(中)--gcc/g++
💓博主CSDN主页:杭电码农-NEO💓 ⏩专栏分类:Linux从入门到开通⏪ 🚚代码仓库:NEO的学习日记🚚 🌹关注我🫵带你学更多操作系统知识 🔝🔝 Linux中的开发工具 1. 前言2.…...
u盘上面 安装 ubuntu 系统
u盘上面 安装 ubuntu 系统 下载 一个 Ubuntu 22.04.3 LTS 桌面版 https://ubuntu.com/download/desktop 找到一个U盘 参考文章: 把 Ubuntu 装到U盘里随身携带,并同时支持 BIOS 和 UEFI 启动 https://www.luogu.com.cn/blog/GGAutomaton/portable-ubu…...
【推荐】SpringMVC与JSON数据返回及异常处理机制的使用
🎬 艳艳耶✌️:个人主页 🔥 个人专栏 :《【推荐】Spring与Mybatis集成整合》 ⛺️ 生活的理想,为了不断更新自己 ! 1.JSON 在SpringMVC中,JSON数据返回通常是通过使用ResponseBody注解将Java对象转换为JSO…...
SpringBoot新增拦截器详解
目录 一、拦截器使用 二、SpringMvc拦截器接口 三、SpringBoot集成拦截器 拦截器(Interceptor)通常是指在软件开发中用于处理请求和响应的中间件组件。拦截器的主要目的是在请求进入某个处理流程或在响应返回给客户端之前执行一些额外的操作或逻辑。 …...
Golang开发--select
在Go语言中,select语句用于在多个通道操作中进行选择。select语句使得程序可以同时等待多个通道的操作,并在其中任意一个通道就绪时执行相应的操作。以下是select语句的详细描述: select { case <-ch1:// 当ch1通道可读时执行的操作 case…...
贝塞尔曲线的一些资料收集
一本免费的在线书籍,供你在非常需要了解如何处理贝塞尔相关的事情。 https://pomax.github.io/bezierinfo/zh-CN/index.html An algorithm to find bounding box of closed bezier curves? - Stack Overflow https://stackoverflow.com/questions/2587751/an-algo…...
计算机网络原理 运输层
一,运输层协议概述 1,进程之间的通信 从通信和信息处理的角度看,运输层向它上面的应用层提供通信服务,它属于面向通信部分的最高层,同时也是用户功能中的最底层。当网络边缘部分的两台主机使用网络核心部分的功能进行…...
【JavaEE】多线程案例-阻塞队列
1. 前言 阻塞队列(BlockingQueue)是一个支持两个附加操作的队列。这两个附加的操作是: 在队列为空时,获取元素的线程会等待队列变为非空当队列满时,存储元素的线程会等待队列可用 阻塞队列常用于生产者和消费者的场…...
【物联网】简要介绍最小二乘法—C语言实现
最小二乘法是一种常用的数学方法,用于拟合数据和寻找最佳拟合曲线。它的目标是找到一个函数,使其在数据点上的误差平方和最小化。 文章目录 基本原理最小二乘法的求解应用举例使用C语言实现最小二乘法总结 基本原理 假设我们有一组数据点 ( x 1 , y 1 …...
慢查询SQL如何优化
一.什么是慢SQL? 慢SQL指的是Mysql中执行比较慢的SQL,排查慢SQL最常用的方法是通过慢查询日志来查找慢SQL。Mysql的慢查询日志是Mysql提供的一种日志记录,它用来记录Mysql中响应时间超过long_query_time值的sql,long_query_time的默认时间为10s. 二.查看慢SQL是否…...
做外贸怎样利用免费b2b网站/今日头条国际军事新闻
英文原文:https://developer.microsoft.com/en-us/identity/blogs/how-to-build-a-blazor-web-app-with-azure-active-directory-authentication-and-microsoft-graph/如果您是一个 .NET 开发者,你很可能听过过 Blazor 是一个最近的热门开发技术。Blazor…...
深圳医疗网站建设/搜索引擎优化的步骤
1. Node特性Node的功能强大,它将JavaScript扩展到了更多领域,特别是后端网站服务器开发。它是对高性能V8引擎的封装,通过提供一系列优化的API类库,使V8在浏览器之外依然能高效运行。Node的一大特性是对高性能的追求。首先…...
对网站建设课程的心得体会/中国新冠疫情最新消息
说明:该篇博客是博主一字一码编写的,实属不易,请尊重原创,谢谢大家! 接着上一篇博客继续往下写 :https://blog.csdn.net/qq_41782425/article/details/101377166 目录 六丶第五阶段PO模式 4.页面元素操作封装(二) 5.PO模式项目管理...
wordpress server error/短视频新媒体推广
Swagger(Api管理)主要应用于前后端分离的项目,实时更新最新API,降低集成风险。RestFul Api文档在线自动生成工具》Api文档与Api定义同步更新直接运行,可以在线测试API接口支持多种语言#在项目中使用Swagger需要Springfox依赖;& swagger2&…...
自带浏览器建设银行网站打不开/网站服务器信息查询
onAttach– onCreate– onCreateView– onActivityCreated– onstart– onresume– onpause– onstop– onDestroyView– onDestroy– onDetach– Fragment的是依附于Activity存在的,所以Activity的生命周期会影响Fragment的生命周期。下面是官网的一张图…...
安徽奶茶加盟网站建设/谷歌竞价排名推广公司
一、写文件 #include <fstream> ofstream ofs;//创建流对象 ofs.open(path,打开方式);//指定路径和打开方式 //打开方式: // ios::in 读文件打开 // ios::out 写文件打开 // ios::ate 从文件尾打开 // ios::app 追加方式打开 // ios::trunc 如已有…...