当前位置: 首页 > news >正文

Scrapy 爬虫框架全解析

一、Scrapy 框架概述

  1. 基本定义
    • Scrapy 是一个用 Python 编写的开源网络爬虫框架。它旨在快速、高效地抓取网页数据,可处理大规模的数据抓取任务。
    • 基于 Twisted 异步网络库构建,能够并发地处理多个请求,大大提高了数据抓取的速度。
    • 遵循 “请求 - 响应” 模型,用户只需定义好初始请求、解析规则等,框架就能自动完成数据的抓取和处理。
  2. 主要优势
    • 高效性
      • 采用异步非阻塞的网络请求机制,在同一时间内可以处理多个请求,减少等待时间。
      • 内置的调度器能够智能地管理请求队列,优先处理重要或优先级高的请求。
      • 对资源的利用较为合理,在多线程或多进程环境下能充分发挥硬件性能。
    • 灵活性
      • 支持多种数据提取方式,如 XPath、CSS 选择器等,可以根据网页结构灵活选择。
      • 可定制化的中间件系统,能够方便地添加代理、设置请求头、处理响应等功能。
      • 可以轻松地与数据库、数据存储系统集成,方便数据的持久化存储。
    • 扩展性
      • 拥有丰富的插件和扩展库,如用于分布式爬取的 Scrapy - Redis 等。
      • 良好的架构设计使得开发者可以方便地编写自定义的组件,如自定义的爬虫类、管道类等。
      • 基于 Python 语言,与众多其他 Python 库有良好的兼容性,便于功能的扩展和集成。

二、Scrapy 项目结构

  1. 核心目录
    • scrapy.cfg
      • 项目的配置文件,用于定义项目的基本设置,如项目名称、部署相关的配置等。
      • 可以在其中指定 Scrapy 命令的默认设置,例如日志级别、是否启用某些扩展等。
      • 是整个项目的入口配置文件,Scrapy 工具在运行项目时首先读取此文件。
    • 项目名文件夹
      • 存放项目的主要代码和资源,是项目的核心目录。
      • 包含了自定义的爬虫模块、管道模块、中间件模块等的代码文件。
      • 可以在其中创建子目录来组织不同功能的代码,如 utils 目录用于存放工具函数代码。
  2. 主要模块
    • spiders 目录
      • 用于存放所有的爬虫类代码文件。
      • 每个爬虫类通常对应一个特定的网站或数据来源,负责定义抓取的起始 URL、解析规则等。
      • 可以在该目录下按照网站或功能分类创建多个爬虫文件,便于管理和维护。
    • items.py
      • 定义了数据项的结构,类似于数据库中的表结构或数据模型。
      • 可以在其中定义各种字段,用于存储抓取到的数据,字段的数据类型可以根据需求灵活设置。
      • 方便在爬虫和管道之间传递和处理数据,保证数据的一致性和规范性。
    • pipelines.py
      • 主要负责数据的处理和存储,如数据清洗、去重、存储到数据库或文件等操作。
      • 可以定义多个管道类,每个管道类可以处理不同类型的数据或执行不同的操作,形成数据处理的流水线。
      • 能够根据数据的特点和需求,灵活地配置管道的顺序和功能,提高数据处理的效率和质量。
    • middlewares.py
      • 包含了各种中间件类,用于处理请求和响应的过程。
      • 如自定义请求头中间件可以添加特定的请求头信息,代理中间件可以设置代理服务器。
      • 异常处理中间件可以捕获和处理请求过程中的异常情况,增强爬虫的稳定性和可靠性。

三、Scrapy 爬虫编写要点

  1. 定义起始请求
    • 起始 URL 设定
      • 明确要抓取的网站的初始 URL,可以是单个 URL 或多个 URL 的列表。
      • 考虑网站的结构和数据分布,选择合适的起始点,以便能够全面地抓取目标数据。
      • 对于动态加载数据的网站,可能需要分析其 AJAX 请求的 URL 规律,将其作为起始请求的一部分。
    • 请求方法选择
      • 常用的请求方法有 GET 和 POST,根据网站的接口要求和数据获取方式选择合适的方法。
      • GET 请求适用于获取公开的页面数据,参数通常通过 URL 传递;POST 请求则用于提交数据并获取响应,如登录、搜索等操作。
      • 可以在请求中设置超时时间,以避免长时间等待无响应的情况,提高爬虫的效率。
    • 请求头设置
      • 模拟真实浏览器的请求头,包括 User - Agent、Referer 等信息,避免被网站识别为爬虫而封禁。
      • 可以根据不同的网站或请求类型,动态地设置请求头,增加请求的真实性和多样性。
      • 合理设置 Accept、Accept - Encoding 等请求头字段,确保能够正确接收和解析网站的响应数据。
  2. 数据解析规则
    • XPath 解析
      • 学习 XPath 语法,能够准确地定位网页中的元素,如标签、属性等。
      • 利用 XPath 提取数据时,注意处理命名空间问题,确保能够正确获取目标数据。
      • 可以结合 XPath 的函数和表达式,进行数据的筛选、转换和处理,如提取文本、获取属性值等。
    • CSS 选择器解析
      • 熟悉 CSS 选择器的语法,如标签选择器、类选择器、ID 选择器等,用于定位元素。
      • CSS 选择器在处理样式相关的元素定位时较为方便,可以快速提取出特定样式的元素数据。
      • 与 XPath 相比,在某些场景下 CSS 选择器的表达式可能更简洁、易读,但功能上相对 XPath 可能稍弱一些。
    • 正则表达式辅助
      • 当数据的格式较为复杂或不规律时,使用正则表达式进行数据的提取和匹配。
      • 正则表达式可以用于提取特定模式的数据,如电话号码、邮箱地址等,但要注意正则表达式的性能和复杂性。
      • 可以将正则表达式与 XPath 或 CSS 选择器结合使用,先定位到大致的元素范围,再用正则表达式提取精确的数据。
  3. 数据存储处理
    • 存储格式选择
      • 常见的存储格式有 JSON、CSV、XML 等,根据数据的特点和后续使用需求选择合适的格式。
      • JSON 格式适合存储结构化的数据,便于在不同编程语言之间进行数据交换和处理。
      • CSV 格式则常用于数据的表格化存储,方便在电子表格软件中查看和分析数据。
    • 数据库存储
      • 可以将数据存储到关系型数据库如 MySQL、PostgreSQL 等,利用数据库的强大查询和管理功能。
      • 也可以选择非关系型数据库如 MongoDB,适用于存储灵活的数据结构和大规模的数据。
      • 在存储到数据库时,要注意数据库的连接设置、表结构设计以及数据的插入和更新操作的优化。
    • 文件存储路径与命名
      • 确定数据存储的文件路径,要考虑文件系统的权限、存储空间等因素。
      • 合理命名存储文件,使其能够反映数据的来源、抓取时间或其他关键信息,便于文件的管理和查找。
      • 可以根据数据的规模和类型,采用分目录存储的方式,提高文件存储的组织性和可维护性。

四、Scrapy 中间件使用技巧

  1. 请求中间件
    • 代理设置
      • 可以在请求中间件中设置代理服务器,实现 IP 地址的切换,避免因单个 IP 访问频繁被封禁。
      • 动态地从代理池获取代理 IP,并在请求中应用,提高爬虫的稳定性和可靠性。
      • 对代理的可用性进行检测和筛选,及时排除无效的代理,保证请求的顺利进行。
    • 请求头处理
      • 统一管理和设置请求头信息,如随机切换 User - Agent,模拟不同的浏览器访问。
      • 根据不同的网站或请求场景,定制化请求头内容,增加请求的真实性和通过率。
      • 可以在请求头发送前进行加密或签名处理,以满足某些网站的安全要求。
    • 请求重试
      • 当请求失败时,如网络连接超时、服务器错误等,设置合理的重试次数和时间间隔。
      • 记录请求重试的次数和原因,便于后续分析和优化爬虫的稳定性。
      • 可以根据不同类型的错误,采用不同的重试策略,如对于 403 错误可能需要更换代理后重试。
  2. 响应中间件
    • 数据清洗与转换
      • 对抓取到的原始数据进行清洗,去除噪声数据、HTML 标签等无用信息。
      • 进行数据格式的转换,如将字符串类型的数据转换为合适的数值类型或日期类型。
      • 对数据进行标准化处理,如统一单位、编码格式等,提高数据的质量和可用性。
    • 异常处理
      • 捕获响应过程中的异常情况,如解析错误、数据缺失等,并进行相应的处理。
      • 可以记录异常信息,以便后续排查问题和优化爬虫代码。
      • 对于一些可恢复的异常,如网络波动导致的部分数据丢失,可以尝试重新请求或进行数据补全。
    • 响应缓存
      • 对于一些不经常更新的数据,可以设置响应缓存,减少重复请求,提高爬虫的效率。
      • 确定缓存的有效期和缓存策略,如基于时间的缓存或基于数据版本的缓存。
      • 可以对缓存数据进行压缩存储,节省存储空间,同时在读取缓存时进行解压缩处理。
  3. 自定义中间件开发
    • 继承基础类
      • 无论是请求中间件还是响应中间件,都需要继承相应的基础类,如 scrapy.http.middleware.RequestMiddleware 或 scrapy.http.middleware.ResponseMiddleware。
      • 在继承的基础上,重写特定的方法,如 process_request 方法用于请求中间件处理请求,process_response 方法用于响应中间件处理响应。
      • 遵循类的命名规范和代码结构要求,使自定义中间件能够与 Scrapy 框架无缝集成。
    • 功能实现逻辑
      • 根据需求在中间件方法中编写具体的功能实现代码,如添加自定义的请求头逻辑、数据处理逻辑等。
      • 注意代码的效率和性能,避免在中间件中进行过于复杂或耗时的操作,以免影响整个爬虫的运行速度。
      • 对中间件的功能进行充分的测试和验证,确保其能够正确地处理各种请求和响应情况。
    • 注册与配置
      • 在项目的 settings.py 文件中注册自定义的中间件,指定中间件类的路径。
      • 可以根据需要调整中间件的执行顺序,通过 settings.py 文件中的相关设置来控制。
      • 确保在注册和配置过程中没有语法错误或配置错误,否则可能导致爬虫无法正常运行。

五、Scrapy 框架的优化与维护

  1. 性能优化策略
    • 并发设置调整
      • 合理设置并发请求的数量,根据目标网站的服务器性能和网络带宽进行优化。
      • 可以通过修改 settings.py 文件中的 CONCURRENT_REQUESTS 参数来调整并发量。
      • 同时要注意并发量过高可能导致目标网站压力过大或自身被封禁,需要进行适当的平衡。
    • 资源利用优化
      • 优化内存使用,及时释放不再使用的对象和数据,避免内存泄漏。
      • 合理利用 CPU 资源,避免在爬虫运行过程中出现 CPU 占用过高的情况,影响其他程序运行。
      • 可以采用多进程或多线程与异步相结合的方式,充分发挥硬件的性能优势。
    • 数据传输优化
      • 压缩请求和响应的数据量,如在请求头中设置 Accept - Encoding 为 gzip 等压缩格式,在响应处理时进行解压缩。
      • 减少不必要的数据传输,如只抓取需要的数据,避免抓取大量无用的图片、脚本等资源。
      • 优化数据存储的写入操作,采用批量写入、异步写入等方式提高数据存储的效率。
  2. 爬虫稳定性维护
    • 错误处理机制完善
      • 建立全面的错误处理机制,对网络错误、数据解析错误、存储错误等各类错误进行捕获和处理。
      • 对于一些常见的错误,如连接超时、服务器 500 错误等,制定相应的应对策略,如重试、记录错误信息等。
      • 定期检查错误日志,分析错误产生的原因和频率,及时对爬虫代码进行优化和调整。
    • 网站规则适配更新
      • 目标网站的结构和规则可能会发生变化,需要定期检查并更新爬虫的解析规则和请求逻辑。
      • 关注网站的更新公告、API 变化等信息,及时调整爬虫代码以适应新的情况。
      • 采用灵活的解析策略,如使用相对路径的 XPath 或 CSS 选择器,减少因网站结构变化带来的影响。
    • 爬虫监控与预警
      • 建立爬虫监控系统,实时监测爬虫的运行状态,如运行速度、数据抓取量、错误率等指标。
      • 设定预警阈值,当爬虫出现异常情况,如速度过慢、错误率过高时,及时发出预警通知。
      • 可以采用日志分析工具、性能监控工具等辅助进行爬虫的监控和预警工作。
  3. 代码管理与协作
    • 版本控制
      • 使用版本控制系统如 Git 对 Scrapy 项目代码进行管理,方便代码的回溯、分支管理和多人协作。
      • 定期提交代码更改,编写清晰的提交注释,说明代码修改的目的和内容,便于团队成员了解代码的变化历史。
      • 可以创建不同的分支用于开发新功能、修复错误等,在合适的时候进行分支合并。
    • 代码规范遵循
      • 遵循 Python 代码规范和 Scrapy 框架的编码风格建议,提高代码的可读性和可维护性。
      • 采用合理的代码结构和命名规范,如函数名、变量名要具有描述性,代码模块要功能单一、职责明确。
      • 对代码进行适当的注释,尤其是复杂的逻辑部分,方便其他开发人员理解和修改代码。
    • 团队协作流程
      • 建立明确的团队协作流程,如代码审查机制,在代码合并前进行审查,确保代码质量。
      • 划分不同成员的职责和任务范围,如有的成员负责爬虫开发,有的成员负责数据处理和存储等。
      • 定期进行团队沟通和交流,分享开发过程中的经验和问题,促进团队整体的技术提升和项目推进。

相关文章:

Scrapy 爬虫框架全解析

一、Scrapy 框架概述 基本定义 Scrapy 是一个用 Python 编写的开源网络爬虫框架。它旨在快速、高效地抓取网页数据,可处理大规模的数据抓取任务。基于 Twisted 异步网络库构建,能够并发地处理多个请求,大大提高了数据抓取的速度。遵循 “请求…...

Hive3.X——异常处理Could not create ServerSocket on address 0.0.0.0/0.0.0.0:10000

Hive3.X——异常处理Could not create ServerSocket on address 0.0.0.0/0.0.0.0:10000 01 前言 大数据系列,学到了Hive,搭建环境的时候,因为使用的是本机WSL2(别问为啥不用VMware,问就是条件有限,而且WS…...

【跨库查询、多库查询】.NET开源 ORM 框架 SqlSugar 系列

文章目录 一、跨库方式1:跨库导航二、手动跨库查询三、同服务器:自动查询跨库查询3.1 Mysql和SqlServer自动3.2 自动: PgSql跨Scheme查询3.3 其他库同服务器 四、跨服务器:自动跨库查询4.1 配置SqlServer dblink4.2 配置 Oracle dblink4.3 配…...

【JAVA】Java项目实战—Java 数据库应用项目:学生信息管理系统

本项目将实现一个简单的学生信息管理系统,功能包括学生信息的录入、查询、修改和删除。通过本项目,读者将深入理解Java与数据库交互的基本原理,掌握JDBC(Java Database Connectivity)技术,以及如何构建一个…...

中电金信携手中远海科,共启贸易金融数智新篇章

在数智化转型成为驱动经济社会高质量发展的新引擎背景下,“数智方案”栏目聚焦金融等国计民生重点行业场景,依托中电金信“源启筑基咨询引领应用重构”的产品及服务体系,输出市场洞察和行业解决方案、应用案例,旨在全面推动行业IT…...

有没有办法让爬虫更加高效,比如多线程处理?

要让Python爬虫更加高效,确实可以采用多线程处理。多线程可以显著提高爬虫的效率,因为它允许程序同时执行多个任务,从而减少等待时间。以下是一些提高爬虫效率的方法,特别是通过多线程技术: 1. 多线程爬虫 多线程爬虫…...

Android历史版本主要更新说明

Android 15 Android 15 继续致力于构建注重隐私和安全保护的平台,助您提高效率,同时还引入了多项新功能,帮您打造精美应用、卓越的媒体和相机体验,并提供直观的用户体验。在平板电脑和可折叠设备上更能凸显出这些优势。 Android…...

测试岗位应该学什么

以下是测试岗位需要学习的一些关键内容: 1. 测试理论和方法 - 了解不同类型的测试,如功能测试、性能测试、压力测试、安全测试、兼容性测试等。 - 掌握测试策略和测试计划的制定。 2. 编程语言 - 至少熟悉一种编程语言,如 Python、Java…...

华为HarmonyOS NEXT 原生应用开发: 数据持久化存储(用户首选项)的使用 token令牌存储鉴权!

Preferences 数据持久化存储 用户首选项(Preferences) 1. 封装 仓库工具类 ● 这里可以选择将 数据字段 key 抽取为一个静态方法,这里选择让用户传参,看起来较容易理解! /*** 首选项 preferences - 实现数据持久化…...

【AIStarter】告别复杂转换 - MinerU整合包实现PDF到Markdown的无缝转变

在数字化时代,信息的传递与共享变得愈发重要。文档格式之间的转换成为了日常工作中不可或缺的一部分。为了满足用户对高效工作流程的需求,新版MinerU整合包应运而生,它不仅简化了从PDF到Markdown的转换过程,还为用户带来了前所未有…...

Jenkins参数化构建详解(This project is parameterized)

本文详细介绍了Jenkins中不同类型的参数化构建方法,包括字符串、选项、多行文本、布尔值和git分支参数的配置,以及如何使用ActiveChoiceParameter实现动态获取参数选项。通过示例展示了传统方法和声明式pipeline的语法 文章目录 1. Jenkins的参数化构建1…...

服务器批量清理redis keys,无法适用客户端必须直连的情况

在 Redis 中,批量清理指定模式的键(例如 memberCardData:*)可以通过多种方法来实现。需要注意的是,Redis 的命令执行是单线程的,因此对大量键进行操作时可能会阻塞服务器。以下是几种常见的方法: shell K…...

单元测试SpringBoot

添加测试专用属性 加载测试专用bean Web环境模拟测试 数据层测试回滚 测试用例数据设定...

牛客网刷题 | BC126 小乐乐查找数字

😁博客主页😁:🚀从0至1-CSDN博客🚀 🤑博客内容🤑:🍭C语言、C、数据结构、嵌入式、Linux🍭 😎本文内容🤣:🍭BC1…...

Node一、fs 模块、path 模块、端口号、 http 模块、

一、Node.js了解 Node.js是一个跨平台JavaScript运行环境,使开发者可以搭建服务器端的JavaScript应用程序。 概念:使用 Node.js 编写后端程序 / 支持前端工程化 ✓ 后端程序:提供接口和数据,网页资源等 ✓ 前端工程化 &#x…...

k8s service 配置AWS nlb load_balancing.cross_zone.enabled

在Kubernetes中配置NLB(Network Load Balancer)的跨区域负载均衡(cross-zone load balancing),需要使用服务注解(service annotations)来实现。根据AWS官方文档,以下是配置NLB跨区域…...

[分布式即时通讯系统] 注册类完善

我们在qss里添加err_tip样式,根据不同的状态做字体显示 #err_tip[statenormal]{color: green; } #err_tip[stateerr]{color: red; } 接下来项目中添加global.h和global.cpp文件,global.h声明repolish函数,global.cpp用来定义这个函数。 .h…...

C#使用HttpWebRequest下载文件

public static bool HttpDownloadFile(string downloadUrl, string localPath, log4net.ILog log) { bool bFlagDownloadFile false; //log.Debug(“HttpDownloadFile–准备以HTTP的方式下载文件,url:[” downloadUrl “]本地文件:【” localPath “…...

CentOS7环境安装php

直接安装 yum -y install php CentOS7默认安装是php5,现在php已有8.3版本 先查看php -v 版本 如果是低版本,可以删除 yum remove php yum remove php-fpm yum remove php-common 一、添加REMI存储库 yum install epel-release yum install -y …...

【Excel学习记录】04-排序和筛选

1.排序 (1)简单排序 不建议选中某列后进行排序 可以选中一个单元格或者整个表格→开始→编辑→排序和筛选→升序/降序 (2)多条件排序 可以选中一个单元格或者整个表格→开始→编辑→排序和筛选→自定义排序→指定关键字、比较内…...

Python轻松获取抖音视频播放量

现在在gpt的加持下写一些简单的代码还是很容易的,效率高,但是要有一点基础,不然有时候发现不了问题,这些都需要经验积累和实战,最好能和工作结合起来,不然很快一段时间就忘的干干净净了,下面就是…...

恢复删除的文件:6个免费Windows电脑数据恢复软件

数据恢复软件可帮助您从众多存储设备中恢复损坏或删除的数据。您可以使用这些文件恢复软件来检索文件、文档、视频、图片等。这些应用程序支持多种标准文件格式,如 PNG、RTF、PDF、HTML、JPG、MP3 等。 经过超过 75 小时的研究,我分析了 25 最佳免费数据…...

Go的Gin比java的Springboot更加的开箱即用?

前言 隔壁组的云计算零零后女同事,后文简称 云女士 ,非说 Go 的 Gin 框架比 Springboot 更加的开箱即用,我心想在 Java 里面 Springboot 已经打遍天下无敌手,这份底蕴岂是 Gin 能比。 但是云女士突出一个执拗,非我要…...

Java 中枚举的 toString 方法及其字段信息展示

在 Java 编程中,枚举(enum)是一种特殊的数据类型,用于定义一组固定的常量。枚举类型不仅限于简单的常量定义,还可以包含字段、方法以及构造函数,从而使其具备更强的表达能力。toString 方法是 Java 中所有对…...

Python数据分析(OpenCV视频处理)

处理视频我们引入的还是numpy 和 OpenCV 的包 引入方式如下: import numpy as np import cv2 我们使用OpenCV来加载本地视频,参数就是你视频的路径就可以 #加载视频 cap cv2.VideoCapture(./1.mp4) 下面我们进行读取视频 #读取视频 flag,frame cap.re…...

DocFlow票据AI自动化处理工具:出色的文档解析+抽取能力,提升企业文档数字化管理效能

目录 财务应付 金融信贷业务 近期,DocFlow票据自动化产品正式上线。DocFlow是一款票据AI自动化处理工具,支持不同版式单据智能分类扩展,可选功能插件配置流程,满足多样业务场景。 随着全球化与信息化进程,企业的文件…...

python编程Day15-UnitTest框架的介绍

框架 framework为了解决一类事情的功能集合 Unittest 框架 是 Python 自带的单元测试框架 自带的, 可以直接使用, 不需要单外安装 测试人员 用来做自动化测试, 作为自动化测试的执行框架, 即 管理和执行用例的 使用原因 能够组织多个用例去执行提供丰富的断言方法能够生成测试报…...

Linux——进程控制模拟shell

1.进程创建 我们在之前的文章中介绍过进程创建的方法,可以通过系统调用接口fork来创建新的进程。 fork在创建完新的子进程之后,返回值是一个pid,对于父进程返回子进程的pid,对于子进程返回0。fork函数后父子进程共享代码&#xff…...

OpenCV的图像矫正

一、原理 图像矫正的原理是透视变换,下面来介绍一下透视变换的概念。 透视变换(Perspective Transform)基于一个4对点的映射关系(4个源点到4个目标点),通过这些点之间的映射,可以计算一个变换…...

基于php求职招聘系统设计

摘要 随着社会信息化时代的到来,如今人们社会的生活节奏普遍加快,人们对于工作效率的要求也越来越高,企业 举办招聘会耗时耗财,个人参加招聘会漫无目的寻找不到“方向”,网络搜索工作量目的性不强,信息量繁…...

并行口的基本概念

单片机的并行口结构包括多个并行I/O端口,用于与外部设备进行并行数据传输。这些端口能够直接读写外部存储器、显示设备、打印机等外设的数据,是单片机与外界交互的重要通道。在深入探讨之前,我们先简要了解下单片机的基本概念。 单片机&…...

(六)机器学习 - 正态数据分布

正态数据分布,也称为高斯分布(Gaussian distribution),是一种在统计学中非常重要的概率分布。它描述了自然和社会科学中许多现象的分布情况,如人的身高、体重、智商等。正态分布的图形特征是中间高、两边低&#xff0c…...

电脑系统报错找不到d3dcompiler_47.dll怎么修复?怎么预防“d3dcompiler_47.dll”文件缺失?

“d3dcompiler_47.dll”文件缺失的修复与预防策略 在日常使用电脑软件,尤其是运行大型游戏或图形密集型应用时,我们可能会遇到一些令人困惑的系统报错。其中之一便是“找不到d3dcompiler_47.dll”的错误提示。这个错误不仅影响软件的正常运行&#xff0…...

Github 2024-12-12 Go开源项目日报Top10

根据Github Trendings的统计,今日(2024-12-12统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Go项目10Go Ethereum: 以太坊Go语言官方实现 创建周期:3717 天开发语言:Go协议类型:GNU Lesser General Public License v3.0Star数量:4504…...

RIP协议

介绍 路由信息协议RIP(Routing Information Protocol)是基于距离矢量(Distance-Vector)算法的路由协议,它是一种较为简单的内部网关协议IGP(Interior Gateway Protocol)。它的主要功能是帮助路…...

vue-router查漏补缺

一、动态路由匹配 1.带参数的动态路由匹配 import User from ./User.vue// 这些都会传递给 createRouter const routes [// 动态字段以冒号开始{ path: /users/:efg, component: User }, ]这种方式的路由会匹配到/users/abc或者/users/123,路径参数用冒号:表示,并…...

使用Flink CDC实现 Oracle数据库数据同步的oracle配置操作

使用Flink CDC实现 Oracle数据库数据同步的oracle配置操作,包括开启日志归档和用户授权。 flink官方参考资料: https://nightlies.apache.org/flink/flink-cdc-docs-master/zh/docs/connectors/flink-sources/oracle-cdc/ 操作步骤: 1.启用…...

mqtt.js 客户端封装

mqtt.js 客户端封装 没封装前使用 const client mqtt.connect(ws://10.10.20.9:9001) onMounted(() > {const topicList []const channelCount 12for(let i 0; i < channelCount; i) {topicList.push(/test/sendImage${i 1})}client.on(connect, () > {console…...

www.aws.training网站的账户密码如何修改

www.aws.training网站的账户密码如何修改 参加aws考试后, 账号密码如何修改呢? 是不是找了好久都找不到. 右上角, 我的账户, 点击注销. 然后会跳到页面: 点击那个网址链接, 进入新的页面,点安全: 右上角: 更改密码. 按提示来就好....

使用Python实现高性能数据存储

在数据驱动的时代&#xff0c;处理和存储海量数据已成为关键需求。高性能数据存储不仅能够确保数据的快速读写&#xff0c;还能提升系统的整体性能。Python作为一种灵活且功能强大的编程语言&#xff0c;提供了多种高效的数据存储解决方案。本文将详细介绍如何使用Python实现高…...

[已解决]nvm安装node.js 报错 拒绝访问此应用无法在你电脑上运行

报错如下&#xff1a; 出错背景&#xff1a; 心血来潮把node删掉重新安装&#xff0c;想用nvm来进行管理node 出错原因&#xff1a; npm下载失败、下载不完整 不完整的npm展示&#xff1a; 出错根本原因&#xff1a; 可能因为镜像源或者网络波动&#xff0c;导致node下载…...

图文检索(36):Decomposing Semantic Shifts for Composed Image Retrieval

Decomposing Semantic Shifts for Composed Image Retrieval 摘要方法3.1 前期准备3.2 视觉语言表示3.3 降级过程3.4 升级过程3.5 训练和推理 结论 发布时间&#xff08;2024 AAAI&#xff09; 标题&#xff1a;分解语义转换以实现组合图像检索 摘要 语义转换网络 (SSN)&…...

批量计算(Batch Processing)

批量计算&#xff08;Batch Processing&#xff09;是一种数据处理方式&#xff0c;指的是将大量任务或数据分批次进行处理&#xff0c;而不是实时处理每一个任务。这种处理方式通常在任务之间没有依赖关系时使用&#xff0c;可以大大提高计算效率和资源利用率。批量计算广泛应…...

Linux yum-config-manager命令异常

错误信息 使用 yum-config-manager命令时错误信息如下 sudo yum-config-manager \ > --add-repo \ > https://download.docker.com/linux/centos/docker-ce.repo sudo: yum-config-manager: command not found 解决办法 第一步&#xff1a; sudo yum -y install yum-u…...

【C++】关联存储结构容器-set(集合)详解

目录 一、基本概念 二、内部实现 三、常用操作 3.1 构造函数 3.2 插入操作 3.3 删除操作 3.4 查找操作 3.5 访问元素 3.6 容量操作 3.7 交换操作 四、特性 五、应用场景 结语 一、基本概念 set是C标准模板库&#xff08;STL&#xff09;中的一种关联容器&#xf…...

如何利用SPSS软件进行多组间显著性检验以abcd显示

1.SPSS软件中进行多组间的显著性检验 要在SPSS软件中进行多组间的显著性检验&#xff0c;并以abcd显示结果&#xff0c;你可以按照以下步骤操作&#xff1a; 数据准备&#xff1a; 确保你的数据已经正确输入SPSS&#xff0c;其中每行代表一个观测值&#xff0c;包含至少两列&a…...

C++ 之计时函数总结

C 之计时函数总结 总结Windows下C开发时的计时实现 1. clock() #include <time.h>   //引入头文件void main() {clock_t start, end;start clock();fun(); //需计时的函数end clock(); float t_cfloat(end-start)/CLOCKS_PER_SEC;cout << "func cos…...

仿dota2渲染--shader常见贴图含义(直观展示)

Properties {[Header(Texture)]_MainTex ("RGB:颜色 A:透贴", 2D) "white"{}_NormTex ("RGB:法线贴图", 2D) "bump" {}_MaskTex ("R:高光强度 G:边缘光强度 B:高光染色 A:高光次幂…...

NoSQL大数据存储技术测试(5)MongoDB的原理和使用

单项选择题 第1题 关于 MongoDB 集群部署下面说法不正确的是&#xff08;&#xff09; 已经不使用主从复制的模式 在实际应用场景中&#xff0c; Mongodb 集群结合复制集和分片机制 MongoDB 支持自动分片&#xff0c; 不支持手动切分 &#xff08;我的答案&#xff09; 每…...

视图、转发与重定向、静态资源处理

目录 视图 默认视图 视图机制原理 自定义视图 请求转发与重定向 静态资源处理 视图 每个视图解析器都实现了 Ordered 接口并开放出一个 order 属性 可以通过 order 属性指定解析器的优先顺序&#xff0c;order 越小优先级越高 默认是最低优先级&#xff0c;Integer.MAX_…...