详解爬虫策略,反爬虫策略,反反爬爬虫策略
爬虫策略
爬取策略是网络爬虫在执行网页抓取任务时所遵循的规则或策略。这些策略决定了爬虫如何从一个页面转到另一个页面,什么时间进行抓取,以及应该抓取哪些内容。以下是几种常见的爬取策略:
深度优先搜索(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图形符号包括类图、用例图、时序图、活动图、组件图、部署图等,每…...
网络编程(Modbus进阶)
思维导图 Modbus RTU(先学一点理论) 概念 Modbus RTU 是工业自动化领域 最广泛应用的串行通信协议,由 Modicon 公司(现施耐德电气)于 1979 年推出。它以 高效率、强健性、易实现的特点成为工业控制系统的通信标准。 包…...
测试微信模版消息推送
进入“开发接口管理”--“公众平台测试账号”,无需申请公众账号、可在测试账号中体验并测试微信公众平台所有高级接口。 获取access_token: 自定义模版消息: 关注测试号:扫二维码关注测试号。 发送模版消息: import requests da…...
synchronized 学习
学习源: https://www.bilibili.com/video/BV1aJ411V763?spm_id_from333.788.videopod.episodes&vd_source32e1c41a9370911ab06d12fbc36c4ebc 1.应用场景 不超卖,也要考虑性能问题(场景) 2.常见面试问题: sync出…...
R语言AI模型部署方案:精准离线运行详解
R语言AI模型部署方案:精准离线运行详解 一、项目概述 本文将构建一个完整的R语言AI部署解决方案,实现鸢尾花分类模型的训练、保存、离线部署和预测功能。核心特点: 100%离线运行能力自包含环境依赖生产级错误处理跨平台兼容性模型版本管理# 文件结构说明 Iris_AI_Deployme…...
【SpringBoot】100、SpringBoot中使用自定义注解+AOP实现参数自动解密
在实际项目中,用户注册、登录、修改密码等操作,都涉及到参数传输安全问题。所以我们需要在前端对账户、密码等敏感信息加密传输,在后端接收到数据后能自动解密。 1、引入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId...
dedecms 织梦自定义表单留言增加ajax验证码功能
增加ajax功能模块,用户不点击提交按钮,只要输入框失去焦点,就会提前提示验证码是否正确。 一,模板上增加验证码 <input name"vdcode"id"vdcode" placeholder"请输入验证码" type"text&quo…...
大语言模型如何处理长文本?常用文本分割技术详解
为什么需要文本分割? 引言:为什么需要文本分割?一、基础文本分割方法1. 按段落分割(Paragraph Splitting)2. 按句子分割(Sentence Splitting)二、高级文本分割策略3. 重叠分割(Sliding Window)4. 递归分割(Recursive Splitting)三、生产级工具推荐5. 使用LangChain的…...
是否存在路径(FIFOBB算法)
题目描述 一个具有 n 个顶点e条边的无向图,该图顶点的编号依次为0到n-1且不存在顶点与自身相连的边。请使用FIFOBB算法编写程序,确定是否存在从顶点 source到顶点 destination的路径。 输入 第一行两个整数,分别表示n 和 e 的值(1…...
docker 部署发现spring.profiles.active 问题
报错: org.springframework.boot.context.config.InvalidConfigDataPropertyException: Property spring.profiles.active imported from location class path resource [application-test.yml] is invalid in a profile specific resource [origin: class path re…...
PAN/FPN
import torch import torch.nn as nn import torch.nn.functional as F import mathclass LowResQueryHighResKVAttention(nn.Module):"""方案 1: 低分辨率特征 (Query) 查询高分辨率特征 (Key, Value).输出分辨率与低分辨率输入相同。"""def __…...
