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

Scrapy框架之CrawlSpider爬虫 实战 详解

CrawlSpiderScrapy 框架中一个非常实用的爬虫基类,它继承自 Spider
类,主要用于实现基于规则的网页爬取。相较于普通的 Spider 类,CrawlSpider
可以根据预定义的规则自动跟进页面中的链接,从而实现更高效、更灵活的爬取。

Scrapy 创建CrawlSpider爬虫

目标网址:http://quotes.toscrape.com/
在这里插入图片描述
目标:匹配top10标签里面的所有quote

在这里插入图片描述
观察其他的URL链接,这些都是干扰,我们只需要匹配top10里面的链接,所有需要编写正则表达式来匹配

1.创建 Scrapy 项目:在命令行输入scrapy startproject myproject,这里的myproject是项目名。

2.进入项目目录:输入cd myproject
3.创建 CrawlSpider:输入scrapy genspider -t crawl myspider example.commyspider是爬虫名,example.com是初始爬取的域名。

scrapy genspider -t crawl quotes quotes.toscrape.com
import scrapy
from scrapy.linkextractors import LinkExtractor
from scrapy.spiders import CrawlSpider, Ruleclass QuotesSpider(CrawlSpider):name = "quotes"allowed_domains = ["quotes.toscrape.com"]start_urls = ["http://quotes.toscrape.com/"]rules = (Rule(LinkExtractor(allow=r'/tag/[a-z]+/$'), callback='parse_tag', follow=False),)def parse_tag(self, response):tag_url = response.urlprint(f"Extracted tag URL: {tag_url}")
  • rules:是一个元组,包含一个或多个 Rule 对象,每个 Rule 对象定义了一个爬取规则。
  • LinkExtractor(allow=r'/tag/[a-z]+/$'):创建一个 LinkExtractor 对象,使用正则表达式 r'/tag/[a-z]+/$' 来提取符合规则的链接。该正则表达式的含义是:匹配含/tag/的链接,后面跟着一个或多个小写字母,最后以 / 结尾的链接。
  • callback='parse_tag':当 LinkExtractor 提取到符合规则的链接并访问该链接对应的页面后,会调用 parse_tag 方法来处理该页面。
  • follow=False:表示不跟进从当前页面提取的符合规则的链接。也就是说,爬虫只会处理当前页面中符合规则的链接,不会继续深入这些链接对应的页面去提取更多链接。(会自动访问符合规则的链接)
    在这里插入图片描述
    可以看到爬取的就是top10的

相对 URL 和绝对 URL 的差异: Scrapy 的 LinkExtractor 在处理链接时,处理的是绝对 URL 而非 HTML 中的相对 URL。要是你的正则表达式是基于相对 URL 来写的,就可能会匹配失败。比如,HTML 里的相对 URL 是/tag/inspirational/,但 Scrapy 处理时会把它变成绝对 URL http://quotes.toscrape.com/tag/inspirational/
因此 r'^/tag/[a-z]+/$' 就无法匹配,因为绝对 URL 是以 http:// 开头的,并非 /tag/
或者改为这样也是可以的 r'^http://quotes.toscrape.com/tag/[a-z]+/$'

接下来我们继续跟进,将follow=True。进入这些标签页面进一步爬取详情内容

import scrapy
from scrapy.linkextractors import LinkExtractor
from scrapy.spiders import CrawlSpider, Ruleclass QuotesSpider(CrawlSpider):name = "quotes"allowed_domains = ["quotes.toscrape.com"]start_urls = ["http://quotes.toscrape.com/"]rules = (Rule(LinkExtractor(allow=r'/tag/[a-z]+/$'), callback='parse_tag', follow=True),)def parse_tag(self, response):# 打印当前页面的URLtag_url = response.urlprint(f"Extracted tag URL: {tag_url}")# 提取名言和作者quotes = response.css('div.quote')for quote in quotes:text = quote.css('span.text::text').get()author = quote.css('small.author::text').get()print(f"Quote: {text}, Author: {author}")

在这里插入图片描述

翻页逻辑

有的标签类别不止一页数据,例如

http://quotes.toscrape.com/tag/love/page/2/

在这里插入图片描述
可以看到我们只需要匹配next里面链接,其他的为干扰。我们可以使用更精确的 CSS 选择器来配合 LinkExtractor

import scrapy
from scrapy.linkextractors import LinkExtractor
from scrapy.spiders import CrawlSpider, Ruleclass QuotesSpider(CrawlSpider):name = "quotes"allowed_domains = ["quotes.toscrape.com"]start_urls = ["http://quotes.toscrape.com/"]rules = (# 规则1:提取所有标签链接Rule(LinkExtractor(allow=r'/tag/[a-z]+/$'), callback='parse_tag', follow=True),# 规则2:使用CSS选择器提取<li>标签下的分页链接Rule(LinkExtractor(restrict_css='li.next a'), callback='parse_tag', follow=True),)def parse_tag(self, response):# 打印当前页面的URLtag_url = response.urlprint(f"Extracted tag URL: {tag_url}")# 提取名言和作者quotes = response.css('div.quote')for quote in quotes:text = quote.css('span.text::text').get()author = quote.css('small.author::text').get()print(f"Quote: {text}, Author: {author}")

如果 Rule(LinkExtractor(restrict_css=‘li.next a’), callback=‘parse_tag’, follow=False)
那么爬虫只会处理当前页面中提取到的分页链接对应的页面,而不会进一步去跟进这些页面中的其他分页链接,所以只能获取到第二页的数据,无法获取到第二页之后的页面数据。

还可以使用 XPath 提取

    rules = (# 规则1:提取所有标签链接Rule(LinkExtractor(allow=r'/tag/[a-z]+/$'), callback='parse_tag', follow=True),# 规则2:使用CSS选择器提取<li>标签下的分页链接Rule(LinkExtractor(restrict_css='li.next a'), callback='parse_tag', follow=True),# 规则3:使用XPath提取<li>标签下的分页链接Rule(LinkExtractor(restrict_xpaths='//li[@class="next"]/a'), callback='parse_tag', follow=True),)

Scrapy 内部有一个链接去重机制,默认使用 scrapy.dupefilters.RFPDupeFilter 来过滤重复的请求。当 LinkExtractor 提取到链接后,Scrapy 会先检查这个链接是否已经在请求队列中或者已经被处理过,如果是,就不会再次发起请求。

规则 2 和规则 3 提取的是相同的,由于 Scrapy 的去重机制,相同的链接只会被请求和处理一次,所以不会因为规则 2 和规则 3 提取到相同的链接而导致 parse_tag 方法被重复调用并打印两次数据。

虽然 Scrapy 会对链接进行去重,但如果你的 parse_tag 方法内部存在一些逻辑,可能会导致数据重复处理。例如,如果你在 parse_tag 方法中对数据进行了一些存储操作,并且没有进行去重处理,那么可能会出现数据重复存储的情况

LinkExtractor allow参数

  • 字符串列表allow=['/tag/love/', '/tag/humor/']LinkExtractor 会提取包含 /tag/love/ 或者 /tag/humor/ 的链接

  • 编译好的正则表达式对象

    tag_pattern = re.compile(r'/tag/[a-z]+/$')
    rules = (Rule(LinkExtractor(allow=tag_pattern), callback='parse_item', follow=True),
    )
    
  • 空列表或空字符串:如果你传入一个空列表 [] 或者空字符串 ''LinkExtractor 会提取页面中的所有链接。

相关文章:

Scrapy框架之CrawlSpider爬虫 实战 详解

CrawlSpider 是 Scrapy 框架中一个非常实用的爬虫基类&#xff0c;它继承自 Spider 类&#xff0c;主要用于实现基于规则的网页爬取。相较于普通的 Spider 类&#xff0c;CrawlSpider 可以根据预定义的规则自动跟进页面中的链接&#xff0c;从而实现更高效、更灵活的爬取。 Scr…...

DeepSeek主动学习系统:低质量数据炼金术的工程化实践

文章目录 一、技术体系架构升级1.1 四层协同系统架构1.2 关键技术组件解析(1) 跨模态特征对齐引擎(2) 动态采样策略库 二、低质量数据治理全流程2.1 数据清洗与增强流水线2.2 主动学习迭代流程 三、工业级部署方案3.1 分布式计算架构3.2 动态环境应对策略(1) 概念漂移检测(2) 持…...

学习记录:DAY20

技术探索之旅&#xff1a;YAML配置&#xff0c;依赖注入、控制反转与Java注解 前言 最近有点懒了&#xff0c;太松懈可不行。为了让自己保持学习的动力&#xff0c;我决定将最近的学习内容整理成博客&#xff0c;目标是让未来的自己也能轻松理解。我会尽量以整体记录的方式呈…...

[AI]browser-use + web-ui 大模型实现自动操作浏览器

[AI]browser-use web-ui 大模型实现自动操作浏览器 介绍 官方地址&#xff1a;https://github.com/browser-use/web-ui browser-use主要作用是将 AI Agent 与浏览器链接起来从而实现由 AI 驱动的浏览器自动化。今天会给大家介绍如何通过browser-use web-ui来搭建并操作browse…...

使用LangChain连接远程Oracle数据库尝试LLM 提供的SQL智能助理

使用LangChain连接远程Oracle数据库尝试LLM 提供的SQL智能助理 为完成此次数据库连接实验&#xff0c;笔者用自己的笔记本电脑搭建了一台linux虚机&#xff0c;安装了oracle 23C&#xff0c;并借助deepseek创建了若干与电商业务有关的表并插入了一些记录。 接着在windows实体…...

训练神经网络的批量标准化(使用 PyTorch)

构建神经网络是一门艺术&#xff0c;而非一个结果固定的过程。你无法预知最终能否得到有效的模型&#xff0c;而且有很多因素可能导致你的机器学习项目失败。 然而&#xff0c;随着时间的推移&#xff0c;您还将学会一套特定的笔触&#xff0c;这将大大提高您成功的几率。 在…...

阿里Qwen3 8款模型全面开源,免费商用,成本仅为 DeepSeek-R1 的三分之一

想要掌握如何将大模型的力量发挥到极致吗&#xff1f;叶梓老师带您深入了解 Llama Factory —— 一款革命性的大模型微调工具&#xff08;限时免费&#xff09;。 1小时实战课程&#xff0c;您将学习到如何轻松上手并有效利用 Llama Factory 来微调您的模型&#xff0c;以发挥其…...

Vue常用的修饰符有哪些有什么应用场景(含deep seek讲解)

Vue.js 事件修饰符的功能与具体应用场景 一、事件修饰符 .stop .stop 的主要作用是 阻止事件冒泡&#xff0c;防止事件从子元素传播到父元素。这在处理嵌套组件或多层 DOM 结构时非常有用。 <div click"parentClick">Parent<button click.stop"chi…...

案例分享|20倍提效!水力设备电磁仿真的云端实战

在现代水力设备制造领域&#xff0c;电磁仿真是贯穿设计、研发到故障诊断的核心技术之一。而随着"双碳"目标驱动下清洁能源设备的迭代加速&#xff0c;水轮机、水泵等设备研发的多物理场耦合特性对仿真精度提出前所未有的挑战。传统仿真工具在处理复杂多物理场耦合等…...

ShenNiusModularity项目源码学习(25:ShenNius.Admin.Mvc项目分析-10)

本文学习并分析ShenNiusModularity项目中的留言管理页面、回收站页面。 1、留言管理页面 留言管理页面用于检索、删除系统中的留言数据&#xff0c;该页面对应的文件Index.cshtml位于ShenNius.Admin.Mvc项目的Areas\Cms\Views\Message内。页面使用的控制器类MessageController…...

github使用记录

1. 首次上传本地项目到 GitHub 1.1 准备 GitHub 仓库 登录 GitHub&#xff0c;点击右上角 → New repository输入仓库名称&#xff08;建议与本地目录同名&#xff09;选择公开&#xff08;Public&#xff09;或私有&#xff08;Private&#xff09;不要勾选 "Initiali…...

NFS-网络文件系统

NFS介绍 NFS &#xff08; Network File System &#xff09; 即网络文件系统 &#xff0c;它允许网络中的计算机之间通过TCP/IP网络共享资源。在NFS的应用中&#xff0c;本地NFS的客户端应用可以透明地读写位于远端NFS服务器上的文件&#xff0c;就像访问本地文件一样NFS的好…...

Andorid车机UI适配,AndroidUI图px的单位,如何适配1920x720,PPI100的屏幕设备

在 Android 开发中&#xff0c;针对 1920720 分辨率、PPI 100 的屏幕设备进行 UI 适配&#xff0c;需要综合考虑 像素密度&#xff08;PPI&#xff09;、屏幕尺寸 和 Android 的密度无关像素&#xff08;dp&#xff09; 体系。以下是完整的适配方案&#xff1a; &#x1f4cc; …...

4.2.4 MYSQL的缓存策略

文章目录 4.2.4 MYSQL的缓存策略1. MYSQL缓存方案用来干什么 2. 缓存相关知识1. mysql主从复制2. 为什么需要缓冲层3. 还有哪些类型数据库 3. 那些方式会提升MYSQL读写性能1. mysql读写分离2. 连接池3. 异步连接 4. 缓存方案是怎么解决的1. redis和MYSQL一致性状态分析1. 流程&…...

省科学技术奖申报答辩PPT设计制作美化

自然科学奖、技术发明奖和科技进步奖是科学技术奖励体系中的三大核心奖项 省科学技术奖的含金量极高&#xff0c;主要体现在经济激励、社会认可、创新驱动及资源整合等方面。其价值不仅在于奖金和荣誉&#xff0c;更在于对科研生态的长远影响&#xff0c;国家科学技术奖的敲门…...

基于 ARM 的自动跟拍云台设计

标题:基于 ARM 的自动跟拍云台设计 内容:1.摘要 摘要&#xff1a;随着摄影和监控需求的不断增长&#xff0c;自动跟拍云台的应用越来越广泛。本设计的目的是开发一款基于 ARM 的自动跟拍云台&#xff0c;以实现对目标的精准跟拍。采用 ARM 微控制器作为核心控制单元&#xff0…...

Linux电源管理(3)_关机和重启的过程

原文&#xff1a;Linux电源管理&#xff08;3&#xff09;_Generic PM之重新启动过程 1.前言 在使用计算机的过程中&#xff0c;关机和重启是最先学会的两个操作。同样&#xff0c;这两个操作在Linux中也存在&#xff0c;可以关机和重启。这就是这里要描述的对象。在Linux Ke…...

SQLMesh增量模型实战指南:时间范围分区

引言 在数据工程领域&#xff0c;处理大规模数据集和高频率数据更新是一项挑战。SQLMesh作为一款强大的数据编排工具&#xff0c;提供了增量模型功能&#xff0c;帮助数据工程师高效地管理和更新数据。本文将详细介绍如何使用SQLMesh创建和管理基于时间范围的增量模型&#xf…...

LeetCode -160.相交链表

题目 160. 相交链表 - 力扣&#xff08;LeetCode&#xff09; 解法一 哈希表 哈希表解决方案的思路 这个使用哈希表&#xff08;unordered_set&#xff09;的解决方案基于一个简单的观察&#xff1a;如果两个链表相交&#xff0c;那么相交点及之后的所有节点都是两个链表共…...

针对Linux挂载NAS供Minio使用及数据恢复的需求

针对Linux挂载NAS供Minio使用及数据恢复的需求&#xff0c;设计以下分阶段解决方案&#xff1a; 一、存储架构设计 存储拓扑 [Minio Server] --> [NAS挂载点 (/mnt/nas/minio-data)] --> [企业级NAS设备]│└─[备份服务器/存储] (可选异地备份)组件版本要求 Minio版本&a…...

【大厂实战】API网关进化史:从统一入口到智能AB分流,如何构建灰度无感知系统?

【大厂实战】API网关进化史&#xff1a;从统一入口到智能AB分流&#xff0c;如何构建灰度无感知系统&#xff1f; 1. 为什么API网关是AB面架构的天然起点&#xff1f; 在分布式微服务架构中&#xff0c;API网关&#xff08;API Gateway&#xff09;承担着重要职责&#xff1a…...

开放平台架构方案- GraphQL 详细解释

GraphQL 详细解释 GraphQL 是一种用于 API 的查询语言&#xff0c;由 Facebook 开发并开源&#xff0c;旨在提供一种更高效、灵活且强大的数据获取和操作方式。它与传统的 REST API 有显著不同&#xff0c;通过类型系统和灵活的查询能力&#xff0c;解决了 REST 中常见的过度获…...

使用 TypeScript 开发并发布一个 npm 包(完整指南)

本教程将一步步教你从零开发、打包并发布一个 TypeScript 工具库到 npm。以日期时间格式化工具为例&#xff0c;涵盖项目初始化、Vite 打包、类型声明输出、npm 配置、实际发布等完整流程&#xff0c;适合开发者直接套用。 文章目录 &#x1f4c1; 项目结构预览&#x1f9f1; 初…...

在Anolis OS 8上部署Elasticsearch 7.16.1与JDK 11的完整指南

目录 1. 环境与版本选择 1.1 操作系统选择:Anolis OS 8 1.2 版本匹配说明 1.3 前置条件检查 2. JDK 11安装与配置 2.1 安装流程 2.2 配置详解 3. Elasticsearch 7.16.1安装与优化 3.1 基础安装 3.2 目录规划与权限 3.3 核心配置文件详解 3.4 JVM调优 4. 用户权限管…...

SELinux 从理论到实践:深入解析与实战指南

文章目录 引言&#xff1a;为什么需要 SELinux&#xff1f;第一部分&#xff1a;SELinux 核心理论1.1 SELinux 的三大核心模型1.2 安全上下文&#xff08;Security Context&#xff09;1.3 策略语言与模块化 第二部分&#xff1a;实战操作指南2.1 SELinux 状态管理2.2 文件上下…...

巧用 `unittest.mock` 模块实现依赖服务隔离测试

巧用 unittest.mock 模块实现依赖服务隔离测试 引言 在软件开发过程中,单元测试是保障代码质量的核心手段。然而,许多代码依赖于外部服务,如数据库、API 或文件系统,直接进行测试可能会导致: 环境不可控:测试数据可能变化,影响测试结果的稳定性。执行时间长:依赖外部…...

水利三维可视化平台怎么做?快速上手的3步指南

分享大纲&#xff1a; 1、了解水利三维可视化平台 2、选择合适的开发平台 3、快速搭建水利三维可视化平台 第一步&#xff1a;了解水利三维可视化平台 水利三维可视化平台是利用大数据、物联网、数字孪生等技术&#xff0c;将物理实体数字化建模&#xff0c;并通过三维可视化技…...

【DB2】逻辑导出导入注意事项

DB2异构操作系统之间迁移需选择逻辑备份恢复 导出环节 1、设置字符集&#xff0c;源端创建导出目录&#xff0c;并导出数据库DDL db2set db2codepage1208 db2stop force db2start db2look -d YS-e -l -o -createdb db2look_YS.sql导出文件:db2look_YS.sql –详细参数请参考…...

Fiddler抓取APP端,HTTPS报错全解析及解决方案(一篇解决常见问题)

环境&#xff1a;雷电模拟器Android9系统 ​ 你所遇到的fiddler中抓取HTTPS的问题可以分为三类&#xff1a;一类是你自己证书安装上逻辑错误&#xff0c;另一种是APP中使用了“证书固定”的手段。三类fiddler中生成证书时的参数过程。 1.Fiddler证书安装上的逻辑错误 更新Opt…...

C语言教程(二十三):C 语言强制类型转换详解

一、强制类型转换的概念 强制类型转换是指在程序中手动将一个数据类型的值转换为另一种数据类型。在某些情况下&#xff0c;编译器可能不会自动进行类型转换&#xff0c;或者自动转换的结果不符合我们的预期&#xff0c;这时就需要使用强制类型转换来明确指定要进行的类型转换。…...

阿里云服务器 篇十二:加入 Project Honey Pot 和使用 http:BL

文章目录 系列文章背景前提条件注册和准备注册安装蜜罐捐赠MX记录(可选)添加 QuickLinks(快速链接)使用 http:BL(HTTP黑名单)获取Access Key(访问秘钥)Apache自动拦截黑名单IP模块Http:BL API文档更多实现案例监控IP空间系列文章 阿里云服务器 篇一:申请和初始化 阿里…...

Android 手动删除 AAR jar 包 中的文件

Duplicate class com.xxxa.naviauto.sdk.listener.OnChangeListener found in modules jetified-xxxa-sdk-v1.1.2-release-runtime (:xxx-sdk-v1.1.2-release:) and jetified-xxxb-sdk-1.1.3-runtime (:xxxb-sdk-1.1.3:) A.aar B.aar 有类冲突; 使用 exclude 排除本地aar无效…...

Tomcat 部署配置指南

## 1. 环境要求 - JDK 8 或更高版本 - Tomcat 8.5/9.x/10.x - Windows 操作系统 ## 2. 安装步骤 ### 2.1 安装JDK 1. 下载并安装JDK 2. 配置环境变量&#xff1a; - JAVA_HOME: JDK安装目录 - Path: 添加 %JAVA_HOME%\bin 3. 验证安装&#xff1a;打开命令提示符&#…...

阿里千问Qwen3技术解析与部署指南 :混合推理架构突破性优势与对DeepSeek R1的全面超越

阿里千问Qwen3技术解析&#xff1a;突破性优势与对DeepSeek R1的全面超越 在2025年4月29日&#xff0c;阿里巴巴发布了新一代开源大模型Qwen3&#xff08;通义千问3&#xff09;&#xff0c;凭借其创新架构与显著性能提升&#xff0c;迅速成为全球开源AI领域的焦点。本文将从技…...

宾馆一次性拖鞋很重要,扬州卓韵酒店用品详细介绍其材质与卫生标准

宾馆一次性拖鞋在旅途中很重要。它的卫生情况受大家关注。它的舒适度也受大家关注。扬州卓韵酒店用品在这方面经验丰富。其产品质量优良。下面为你详细介绍宾馆一次性拖鞋。 材质选择目前宾馆一次性拖鞋材质多样。常见的有布质、纸质和塑料的。布质拖鞋相对环保舒适。能给脚部…...

推荐系统中 Label 回收机制之【时间窗口设计】

目录 引言一、业务需求&#xff1a;目标导向的窗口设计1.1 用户行为周期决定窗口基础1.2 业务目标驱动窗口粒度1.3 动态场景下的弹性调整 二、数据特性&#xff1a;窗口设计的底层约束2.1 数据分布与稀疏性适配2.2 数据延迟与完整性保障2.3 特征时效性分层 三、算法模型&#x…...

DevExpressWinForms-XtraMessageBox-使用教程

XtraMessageBox-使用教程 一、基础使用&#xff1a;快速弹出标准消息框 XtraMessageBox 的基础使用非常简单&#xff0c;只需调用XtraMessageBox.Show方法即可弹出一个标准的消息框。根据不同的使用需求&#xff0c;Show方法有多种重载形式。 1.1 仅显示提示信息 当我们仅仅…...

ETL数据集成与数据资产的紧密关联,解锁数据价值新密码

数据已然成为企业最为珍贵的资产之一。无论是传统行业巨头&#xff0c;还是新兴的互联网企业&#xff0c;都在积极挖掘数据背后所蕴含的巨大商业价值。而在这个过程中&#xff0c;ETL&#xff08;Extract&#xff0c;Transform&#xff0c;Load&#xff09;作为数据处理的关键环…...

【无报错,亲测有效】如何在Windows和Linux系统中查看MySQL版本

如何在Windows和Linux系统中查看MySQL版本 MySQL作为最流行的开源关系型数据库管理系统之一&#xff0c;了解如何查看其版本信息对于开发者和数据库管理员来说是常用的一个基本操作。本文将详细介绍在Windows和Linux系统中查看MySQL版本的方法。 文章目录 如何在Windows和Linu…...

【Leetcode 每日一题】2962. 统计最大元素出现至少 K 次的子数组

问题背景 给你一个整数数组 n u m s nums nums 和一个 正整数 k k k。 请你统计有多少满足 「 n u m s nums nums 中的 最大 元素」至少出现 k k k 次的子数组&#xff0c;并返回满足这一条件的子数组的数目。 子数组是数组中的一个连续元素序列。 数据约束 1 ≤ n u m s …...

网络爬取需谨慎:警惕迷宫陷阱

一、技术背景:网络爬虫与数据保护的博弈升级 1. 问题根源:AI训练数据爬取的无序性 数据需求爆炸:GPT-4、Gemini等大模型依赖数万亿网页数据训练,但大量爬虫无视网站的robots.txt协议(非法律强制),未经许可抓取内容(如新闻、学术论文、代码),引发版权争议(如OpenAI被…...

‘WebDriver‘ object has no attribute ‘find_element_by_class‘

在使用Selenium进行Web自动化测试时&#xff0c;如果你遇到了错误信息&#xff1a;“‘WebDriver’ object has no attribute ‘find_element_by_class’”&#xff0c;这通常是因为在Selenium 4及以上版本中&#xff0c;find_element_by_* 和 find_elements_by_* 这类方法已经…...

ComfyUI 学习笔记,案例1:2_pass_txt2img

背景 ComfyUI 官方案例学习笔记&#xff0c;本文是跑出的第三个案例&#xff0c;但确是官网案例的第一个&#xff0c;所以运行起来总体比较顺利。整理几点页面使用技巧&#xff1a; 是网页版本&#xff0c;没有 IDEA&#xff0c;而且画布上没有滚动条&#xff0c;想看清楚内容…...

代码颜色模式python

1. CMYK&#xff08;印刷场景&#xff09; 例子&#xff1a;某出版社设计书籍封面时&#xff0c;使用 Adobe Illustrator 绘制图案。 红色封面的 CMYK 值可能为&#xff1a;C0, M100, Y100, K0&#xff08;通过洋红和黄色油墨混合呈现红色&#xff09;。印刷前需将设计文件转…...

Android第五次面试总结之网络篇(修)

一、域名解析到服务器的过程&#xff08;DNS 解析流程&#xff09; 当应用发起网络请求&#xff08;如https://www.example.com&#xff09;时&#xff0c;操作系统需先将域名转换为服务器 IP 地址&#xff0c;这一过程通过 DNS&#xff08;域名系统&#xff09; 完成&#xf…...

JavaScript 作用域全面总结

JavaScript 作用域全面总结 作用域(Scope)是JavaScript中一个核心概念&#xff0c;决定了变量、函数和对象的可访问性。以下是JavaScript作用域的全面总结&#xff0c;结合表格和箭头图进行讲解。 一、作用域类型 JavaScript 作用域类型详解 JavaScript 中有四种主要的作用…...

Redis核心与底层实现场景题深度解析

Redis核心与底层实现场景题深度解析 在互联网大厂Java求职者的面试中&#xff0c;经常会被问到关于Redis的核心与底层实现相关的场景题。本文通过一个故事场景来展示这些问题的实际解决方案。 第一轮提问 面试官&#xff1a;马架构&#xff0c;欢迎来到我们公司的面试现场。…...

代发考试战报:4月份 思科认证,华为认证,考试战报分享

CCNP 300-410考试通过战报&#xff0c;350-401 考试通过战报&#xff0c;CCNA 200-301 考试通过战报&#xff0c;HCIP数通 H12-821考试通过&#xff0c;H12-831考试通过&#xff0c;HCSP 行业金融 H19-611考试通过&#xff0c;HCSE 行业金融 H21-293 考试通过 报名考试一定要找…...

Linux 内核中 TCP 协议的支撑解析

在 Linux 网络协议栈中,TCP(传输控制协议)作为面向连接的可靠传输协议,其实现依赖于一系列复杂的内核机制。本文通过分析四个关键函数(cookie_v4_init_sequence、tcp_fastopen_ctx_destroy、sk_forced_mem_schedule 和 sk_stream_alloc_skb),探讨它们如何共同保障 TCP 的…...

std::string的底层实现 (详解)

目录 std::string的底层实现* 写时复制原理探究 CowString代码初步实现 短字符串优化&#xff08;SSO&#xff09; 最佳策略 std::string的底层实现* 我们都知道&#xff0c; std::string的一些基本功能和用法了&#xff0c;但它底层到底是如何实现的呢? 其实在std::stri…...