Python 爬虫入门(九):Scrapy安装及使用「详细介绍」
Python 爬虫入门(九):Scrapy安装及使用「详细介绍」
- 前言
- 1. Scrapy 简介
- 2. Scrapy 的安装
- 2.1 环境准备
- 2.2 安装 Scrapy
- 3. 创建 Scrapy 项目
- 3.1 创建项目
- 3.2 项目结构简介
- 4. 编写爬虫
- 4.1 创建爬虫
- 4.2 解析数据
- 4.3 运行爬虫
- 5. 存储数据
- 5.1 存储为 JSON 文件
- 5.2 存储到数据库
- 5.2.1 MongoDB
- 6. 处理请求和响应
- 6.1 请求头设置
- 6.2 处理响应
- 7. 高级功能
- 7.1 使用中间件
- 7.2 使用代理
- 7.3 使用管道处理数据
- 8. 常见问题及解决方法
- 8.1 爬虫被封禁
- 8.2 数据解析错误
- 8.3 数据存储失败
- 总结
前言
- 欢迎来到“Python 爬虫入门”系列的第九篇文章。本篇文章将深入介绍 Scrapy 的安装及使用。Scrapy 是一个广泛使用的爬虫框架,其强大的功能和灵活的扩展性使得它在数据抓取领域占有重要地位。
- 本文将从 Scrapy 的安装步骤开始,详细介绍其基本使用方法,包括创建项目、编写爬虫、解析数据、存储数据等内容。通过本篇文章的学习,你将能够掌握使用 Scrapy 进行高效数据抓取的技能。
1. Scrapy 简介
Scrapy 是一个用于抓取 Web 数据的应用框架。与其他 Python 爬虫库(如 BeautifulSoup 和 requests)相比,Scrapy 提供了更高的抓取速度、更强的扩展性和更便捷的项目管理方式。Scrapy 框架包含了数据抓取、处理和存储的一整套工具,使得用户能够更高效地完成爬虫任务。
2. Scrapy 的安装
2.1 环境准备
在安装 Scrapy 之前,请确保你的计算机已经安装了以下环境:
- Python 3.6 及以上版本
- pip 包管理工具
2.2 安装 Scrapy
使用 pip 命令可以方便地安装 Scrapy:
pip install scrapy
安装完成后,可以通过以下命令验证 Scrapy 是否安装成功:
scrapy
如果安装成功,你将看到 Scrapy 的版本信息。
3. 创建 Scrapy 项目
3.1 创建项目
在命令行中,导航到你希望存放项目的目录,并运行以下命令来创建一个新的 Scrapy 项目:
scrapy startproject myproject
此命令将在当前目录下创建一个名为 myproject
的文件夹,文件夹结构如下:
myproject/scrapy.cfgmyproject/__init__.pyitems.pymiddlewares.pypipelines.pysettings.pyspiders/__init__.py
3.2 项目结构简介
scrapy.cfg
: Scrapy 项目的配置文件。myproject/
: 项目的 Python 模块,之后会在此加入代码。items.py
: 定义爬取的数据结构。middlewares.py
: 定义 Scrapy 中间件。pipelines.py
: 定义数据处理管道。settings.py
: 定义项目的配置。spiders/
: 存放爬虫代码的目录。
4. 编写爬虫
4.1 创建爬虫
在 spiders/
目录下创建一个新的爬虫文件,例如 example_spider.py
,并编写以下内容:
import scrapyclass ExampleSpider(scrapy.Spider):name = 'example'start_urls = ['https://jsonplaceholder.typicode.com/posts']def parse(self, response):for post in response.json():yield {'userId': post['userId'],'id': post['id'],'title': post['title'],'body': post['body']}
4.2 解析数据
在 parse
方法中,我们解析响应内容并提取所需的数据。response.json()
方法将响应内容解析为 JSON 格式,便于我们提取数据。
4.3 运行爬虫
在项目的根目录下,运行以下命令来启动爬虫:
scrapy crawl example
如果一切正常,你将看到爬虫开始抓取数据,并在控制台输出抓取到的内容。
5. 存储数据
5.1 存储为 JSON 文件
Scrapy 提供了多种存储抓取数据的方法,这里介绍将数据存储为 JSON 文件的方法。在命令行中运行以下命令:
scrapy crawl example -o output.json
此命令将抓取的数据保存到 output.json
文件中。
5.2 存储到数据库
我们也可以将抓取的数据存储到数据库中,例如 MongoDB 或 MySQL。在 pipelines.py
文件中编写数据存储的逻辑。
5.2.1 MongoDB
首先,安装 pymongo 库:
pip install pymongo
然后在 pipelines.py
中添加以下代码:
import pymongoclass MongoPipeline:def __init__(self):self.client = pymongo.MongoClient('localhost', 27017)self.db = self.client['scrapy_db']self.collection = self.db['scrapy_collection']def process_item(self, item, spider):self.collection.insert_one(dict(item))return item
在 settings.py
中启用该管道:
ITEM_PIPELINES = {'myproject.pipelines.MongoPipeline': 300,
}
6. 处理请求和响应
6.1 请求头设置
为了模拟真实用户的浏览行为,我们可以在爬虫中设置请求头。在爬虫文件中添加 headers
属性:
class ExampleSpider(scrapy.Spider):name = 'example'start_urls = ['https://jsonplaceholder.typicode.com/posts']headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36'}def start_requests(self):for url in self.start_urls:yield scrapy.Request(url, headers=self.headers, callback=self.parse)
6.2 处理响应
在 parse
方法中,我们可以根据需要处理响应数据。这里的示例中,我们将 JSON 数据解析并提取需要的字段。
7. 高级功能
7.1 使用中间件
Scrapy 中间件可以在请求和响应之间执行一些自定义的处理逻辑。例如,我们可以使用中间件来处理请求的重试逻辑、设置代理等。
在 middlewares.py
中添加以下示例代码:
from scrapy import signalsclass CustomMiddleware:@classmethoddef from_crawler(cls, crawler):s = cls()crawler.signals.connect(s.spider_opened, signal=signals.spider_opened)return sdef process_request(self, request, spider):request.headers['User-Agent'] = 'Custom User-Agent'def process_response(self, request, response, spider):return responsedef process_exception(self, request, exception, spider):passdef spider_opened(self, spider):spider.logger.info('Spider opened: %s' % spider.name)
在 settings.py
中启用中间件:
DOWNLOADER_MIDDLEWARES = {'myproject.middlewares.CustomMiddleware': 543,
}
7.2 使用代理
有时我们需要通过代理来抓取数据。Scrapy 支持通过中间件设置代理。在 middlewares.py
中添加以下代码:
class ProxyMiddleware:def process_request(self, request, spider):request.meta['proxy'] = 'http://your_proxy_address'
在 settings.py
中启用该代理中间件:
DOWNLOADER_MIDDLEWARES = {'myproject.middlewares.ProxyMiddleware': 543,
}
7.3 使用管道处理数据
数据管道用于处理和存储抓取的数据。在 pipelines.py
中定义数据管道,并在 settings.py
中启用它。
8. 常见问题及解决方法
8.1 爬虫被封禁
当我们抓取某些网站时,可能会遇到 IP 被封禁的情况。为了解决这个问题,我们可以使用代理轮换、设置合理的抓取间隔时间等方法。
8.2 数据解析错误
在解析数据时,可能会遇到数据结构变化或数据格式不匹配的情况。为了应对这些问题,我们可以在解析过程中加入异常处理机制,确保程序在遇到错误时不会崩溃。
8.3 数据存储失败
在将数据存储到数据库或文件时,可能会遇到存储失败的情况。常见的原因包括数据库连接问题、数据格式不匹配等。通过日志记录和异常处理,可以更好地定位和解决这些问题。
总结
通过本文的学习,我们深入了解了 Scrapy 的安装和使用方法。Scrapy 作为一个功能强大的爬虫框架,能够帮助我们高效地抓取和处理网页数据。从项目创建、编写爬虫、解析数据到数据存储,我们一步步学习了 Scrapy 的基本使用方法,并介绍了一些高级功能和常见问题的解决方法。
相关文章:
Python 爬虫入门(九):Scrapy安装及使用「详细介绍」
Python 爬虫入门(九):Scrapy安装及使用「详细介绍」 前言1. Scrapy 简介2. Scrapy 的安装2.1 环境准备2.2 安装 Scrapy 3. 创建 Scrapy 项目3.1 创建项目3.2 项目结构简介 4. 编写爬虫4.1 创建爬虫4.2 解析数据4.3 运行爬虫 5. 存储数据5.1 存…...
SpringBoot3 配置Logback日志滚动文件
简介 本文介绍了在SpringBoot3中配置Logback日志滚动文件的方法,因为SpringBoot3内置的logback版本是1.4.14,之前使用SpringBoot2.1.5的logback配置发现有些东西不能生效了 环境 SpringBoot v3.3.2 内置的logback-core为1.4.14 正文 <configuration …...
微信小程序开发:从小程序申请到小程序上线所需要了解的内容
简简单单 Online zuozuo: 简简单单 Online zuozuo 简简单单 Online zuozuo 简简单单 Online zuozuo 简简单单 Online zuozuo :本心、输入输出、结果 简简单单 Online zuozuo :联系我们:VX :tja6288 / EMAIL: 347969164@qq.com 文章目录 微信小程序开发:从小程序申请到小…...
计算机网络中拥塞控制的门限值怎么设置
拥塞避免的门限值设置主要涉及到加权随机早期检测(WRED)技术,这是一种拥塞避免机制,通过为每个队列设定一对低门限和高门限值来实现。具体来说,当队列长度小于低门限时,不丢弃报文࿰…...
Go语言本机多版本管理
go1.19.6 && go1.22.4 背景 当前安装的版本是1.22.4,但是对于某些项目有低版本的要求,所以说需要安装低版本 最终使用别名调用的方法 方法 安装go1.19.6压缩包 https://go.dev/dl/ 我下载该go1.19.6.darwin-arm64.tar.gz包 解压缩到指定…...
使用 Manim 创建一个二维坐标平面【NumberPlane】
NumberPlane 是 Manim 中用于创建一个二维坐标平面的类。它可以帮助用户在场景中可视化坐标轴、网格线以及其他数学概念。具体来说,它的功能包括: 坐标轴:NumberPlane 提供了 x 轴和 y 轴,通常是中心对称的,允许用户清…...
git系统学习
git系统学习 git命令行获取git 版本号 创建初始版本库创建git库初始化用户名和密码查看用户名和邮箱修改用户名和密码 将文件添加到版本库中删除暂存文件提交代码查看提交信息查看更加详细的信息查看提交差异版本库内文件的删除和重命名删除库里的文件重命名库里的文件 打标签查…...
win11启动IIS服务配置成web服务器·
为什么要将本地配置为 Web 服务器? 在 Web 开发过程中,将本地配置为 Web 服务器有诸多好处: 实时预览: 修改代码后,无需每次都上传到远程服务器,即可在本地浏览器中实时查看效果。 离线开发: 无需依赖网络连接&#x…...
JavaEE: 死锁问题详解(5000字)
文章目录 死锁的出现场景1. 一个线程一把锁,这个线程针对这把锁,连续加锁了两次2. 两个线程,两把锁3. N个线程 , M个锁4. 内存可见性为什么会出现内存可见性问题呢?解决方法 volatile关键字 总结synchronized:死锁的四个必要条件(缺一不可)[重点]:内存可见性问题: 死锁的出现场…...
Java程序员接单分享
作为一名Java程序员,这阵子通过承接些小型项目,我顺利跨过了月薪破万的门槛。这些项目虽小,却如同磨刀石般,让我在实战中发现了自身技术栈的棱角与不足,尤其是意识到了在Java这一浩瀚技术海洋中的诸多未知领域。我深知…...
人工智能深度学习系列—深度学习中的相似性追求:Triplet Loss 全解析
人工智能深度学习系列—深度解析:交叉熵损失(Cross-Entropy Loss)在分类问题中的应用 人工智能深度学习系列—深入解析:均方误差损失(MSE Loss)在深度学习中的应用与实践 人工智能深度学习系列—深入探索KL…...
二十八、【人工智能】【机器学习】- 隐马尔可夫模型 (Hidden Markov Models, HMMs)
系列文章目录 第一章 【机器学习】初识机器学习 第二章 【机器学习】【监督学习】- 逻辑回归算法 (Logistic Regression) 第三章 【机器学习】【监督学习】- 支持向量机 (SVM) 第四章【机器学习】【监督学习】- K-近邻算法 (K-NN) 第五章【机器学习】【监督学习】- 决策树…...
调用azure的npm实现outlook_api模拟查看邮件、发送邮件(实现web版接受outlook邮件第一步)
文章目录 ⭐前言⭐注册azure应用💖添加权限 ⭐调用npm 实现收发邮件💖安装依赖💖创建appSettings.js 放置密钥💖创建graphHelper.js封装功能💖主文件index.js 对外暴露💖效果 ⭐结束 ⭐前言 大家好&#x…...
关于使用Next遇到的一些新特性
用next之后发现,这是作为全栈比较好用的框架 API 1、app Router 这是目前next官方以及未来推荐的新技术方向 若使用api路由用来管理后端api接口 (1)此时在app文件夹下创建 api名称目录(如 getApiKey) (…...
【Linux 驱动】IMX6ULL input驱动
1. input子系统介绍 input 子系统分为 input 驱动层、input 核心层、input 事件处理层,最终给用户空间提供可访问的设备节点。 驱动层:输入设备的具体驱动程序,比如按键驱动程序,向内核层报告输入内容核心层:承上启下…...
Docker常用的一些命令
Docker 提供了一系列命令来管理和操作容器、镜像、网络和卷。以下是一些常用的 Docker 命令及其简单示例: 基本命令 启动 Docker sudo systemctl start docker停止 Docker sudo systemctl stop docker重启 Docker sudo systemctl restart docker查看 Docker 状态…...
不同环境下RabbitMQ的安装-3 操作RabbitMQ
前面两篇从不同环境下RabbitMQ的安装-1 为什么要使用消息服务 到同环境下RabbitMQ的安装-2 ARM架构、X86架构、Window系统环境下安装RabbitMQ介绍了关于如何在ARM架构、X86架构和Window系统下如何安装,各位小伙伴可以根据自己的实际开发场景参考安装。 到本篇是一些…...
十二、享元模式
文章目录 1 基本介绍2 案例2.1 Digit 接口2.2 Color 枚举2.3 BigDigit 类2.4 DigitFactory 类2.5 Client 类2.6 Client 类的测试结果2.7 总结 3 各角色之间的关系3.1 角色3.1.1 Flyweight ( 抽象享元 )3.1.2 ConcreteFlyweight ( 具体享元 )3.1.3 UnsharedFlyweight ( 非享元 )…...
Istio 金丝雀发布
转载:备考ICA-Istio 金丝雀实验4 环境清理 kubectl delete gw/helloworld-gateway vs/helloworld dr/helloworld-destination #测试 kubectl get svc,pods for i in {1..10};do curl $(kubectl get svc helloworld|grep helloworld|awk {print $3":"$5}|a…...
批发行业进销存-登录适配 android 横竖屏幕 源码CyberWinApp-SAAS 本地化及未来之窗行业应用跨平台架构
一、横竖屏切换的意义 以下是移动端横屏竖屏可切换在进销存中的一些重要应用: a、数据录入与查看 在录入商品信息、库存数量等大量数据时,横屏模式可以提供更宽阔的输入区域,减少输入错误。例如,在输入长串的商品编码或详细的商…...
Python进阶 JSON数据,pyecharts制图
目录 json数据格式的转换 什么是json json本质 注意 pyecharts快速入门 画一个最简单的折线图 使用全局配置选项优化折线图 总结 json数据格式的转换 什么是json 一种轻量级的数据交换格式,可以按json指定的格式去组织和封装数据 json本质 带有特定格式的…...
富士乐施5070-V打印机驱动安装
富士乐施5070-V打印机驱动安装 特指打印A3纸张需求,即驱动中能够选择纸张类型(安装选择305df驱动只能打印A4类型) 富士乐施打印机驱动下载网址: https://m3support-fb.fujifilm-fb.com.cn/driver_downloads/www/ 安装流程&…...
目标检测 | yolov4 原理和介绍
1. 简介 YOLOv4是一种高效且准确的目标检测模型,它在YOLOv3的基础上引入了多项改进,这些改进主要集中在网络结构的优化和训练技巧的更新上。以下是YOLOv4中的一些关键技术或模块,它们对提高目标检测性能起到了重要作用: CSPDarkne…...
扩散模型系列笔记(一)——DDPM
直观理解 扩散模型分为前向过程(扩散过程,Data → \to →Noise)和后向过程(生成过程或逆扩散过程,Noise → \to →Data)。在前向过程中,对于每一个观测样本,不断向样本中添加少量噪…...
【Nuxt】自定义插件和生命周期
自定义插件 方式一: app.vue // 创建插件(在app.vue中创建全局可以使用 而在某个页面中创建只有该页面可以使用) // 方式一: const nuxtApp useNuxtApp(); nuxtApp.provide("formDate", () > {return "2023-12-12"; }) nuxtAp…...
【算法】贪心算法
应用场景——集合覆盖问题 假设存在下面需要付费的广播台,以及广播台信号可以覆盖的地区。如何选择最少的广播台,让所有的地区都可以接收到信号 贪心算法介绍 1.贪心算法是指在对问题进行求解时,在每一步选择中都采取最好或者最优的选择 2…...
面试笔记 8.5
面试常见: Jvm,高并发,多线程,数据库,redis,框架 1.N I/O有什么核心组件 Java NIO 基本原理以及三大核心组件_java nio核心组件有哪些-CSDN博客 Buffer 缓冲 Channel 一对一 Channel 读取数据 Selector对应线程…...
redis面试(七)初识lua加锁脚本
redisson redisson如何来进行redis分布式锁实现的源码,基于redis实现各种各样的分布式锁的原理 https://redisson.org/ 这是官网 https://github.com/redisson/redisson/wiki/Table-of-Content 这是官方文档 开始 demo 建一个普通的工程在pom.xml里引入依赖 <…...
【mars3d】加载超图s3m模型说明
建议替换Cesium库,换成 超图版本Cesium mars3d mars3d-supermap ,需要引入的资源为: "mars3d": ["Cesium-supermap/Widgets/widgets.css", //超图版本Cesium "Cesium-supermap/Cesium.js","mars3d/plu…...
android音频录音,(三)MediaRecorder音频录音示例
1. apk触发录音启动或录音停止按键: public void onClick(View v) {switch (v.getId()) {case R.id.btn_Record: //启动录音startRecording();break;case R.id.btn_stop: //停止录音stopRecording();break;default:break;} }2. 创建MediaRecorder对象并初始化&…...
未授权访问漏洞(重点版─=≡Σ(((つ•̀ω•́)つ)
1.* Redis 搭建靶场环境: 进入目录:cd/vulhub-master/redis/4-unacc 启动:docker-compose up-d 检查:docker-compose ps vi docker-compose.yml //查看端口和版本号 安装redis工具 在kali上安装redis进行服务链接 #安装redis apt-get install redis #redi…...
数据中台之数据开发,数据开发概述与数据计算能力的类型
目录 一、数据开发概述 二、数据计算能力的类型 2.1 概述 2.2 批计算 2.2.1 概述 2.2.2 批计算模型 2.2.2.1 传统数据处理方案的问题 2.2.2.2 MapReduce模型 2.2.2.3 Spark框架 2.3 流计算 2.4 批流一体 2.5 在线查询 2.6 即席分析 一、数据开发概述 数据开发是数…...
免费的SD-WAN服务
SD-WAN,SASE,零信任是近年来比较火的概念,SD-WAN发展已经很久了,但是真正能够自主研发做SD-WAN的企业其实并不算太多。 比扬云的SD-WAN产品是自主研发的,可控性强,最重要的是具有免费版本,可以免…...
【C++】:错误处理机制 -- 异常
目录 前言一,C语言传统的处理错误的方式二,C异常的概念三,异常的使用3.1 异常的抛出和匹配原则3.2 在函数调用链中异常栈展开匹配原则3.3 异常的重新抛出3.4 异常规范 四,自定义异常体系五,异常的优缺点 点击跳转至文章…...
Cocos Creator2D游戏开发(10)-飞机大战(8)-计分和结束
现在游戏基本能完了, 飞机能发射子弹,打了敌机,敌机也能炸; 接下来要做计分了; 步骤: 搞出一个lable让lable显示炸了多少飞机 开搞: ①创建一个Lable标签 ② root.ts文件 添加 property(Label) player_score: Label; // 标签属性 标签绑定 ③ 代码添加 注册 然后回调 contac…...
image.convert()函数转换格式及显示图像的RGB三通道图像
引 言 视觉任务处理的图片按照图像通道深度分为单通道图像和多通道图像。单通道图像有grayscale灰度图、binary二值图、PNG图,多通道图像有三通道24位真彩色RGB图,8位伪彩色图像,YCbCr图像等。本文先介绍各种格式图像的特点,随后讲…...
进程学习
今天开始了进程的学习,主要讲了进程的一些命令以及进程的创建、进程的调度、进程相关的函数接口和进程消亡。在函数接口中要注意子进程和父进程的关系以及回收顺序,避免出现僵尸进程。...
【Rabbitmq的消息模型】
消息队列的特性 durable:队列持久化。如果设置持久化,那么无论RabbitMQ在关闭时,就会将队列存储到本地磁盘,无论宕机还是重启,队列也不会删除;如果设置不持久化,那么在RabbitMQ关闭时ÿ…...
The Ether: EvilScience (v1.0.1)打靶渗透【附代码】(权限提升)
靶机下载地址: https://www.vulnhub.com/entry/the-ether-evilscience-v101,212/ 1. 主机发现端口扫描目录扫描敏感信息获取 1.1. 主机发现 nmap -sn 192.168.7.0/24|grep -B 2 00:0C:29:7F:50:FB 1.2. 端口扫描 nmap -p- 192.168.7.172 1.3. 目录扫描 dirb http://192.16…...
java学习day18MyBatis2
MyBatis2 缺点 编写SQL语句工作量较大,对开发人员编写SQL语句的功底有一定的要求。 SQL语句依赖于数据库,导致数据库移植性差,不能随意更换数据库 优点 MyBatis是免费且开源的。 与JDBC相比,减少了50%以上的代码量。 MyBat…...
算法巩固——旅行商问题
旅行商问题(Traveling Salesman Problem, TSP)简介 问题描述 旅行商问题是一个经典的组合优化问题,具体描述如下: 输入:一组城市及其两两之间的距离(或成本)。目标:找到一条从一个…...
ArcMap如何将shp数据导入oracle数据库
1. 连接数据库 2.在数据库中新建要素类 3.设置要素类名称和别名以及要素类型 4. 选择该要素类的坐标系 5.导入字段,点击导入,选择shp文件,点击添加,字段就导入进来了,点击完成 6. 点击刚才创建的要素类,点击…...
AppBoot:像 Django 一样使用 FastAPI
App Boot 开发 AppBoot 的背景是我一直没能寻找到满意的 FastAPI 项目模板。相比之下,Django 的项目结构和开发方式一直深得我心,因此我决定创建一个类似 Django 的 FastAPI 项目模板。 AppBoot 完全采用异步模式,内置 SQLAlchemy 2.0&…...
2024实验班选拔考试(热身赛)
比赛传送门 邀请码:2024wksyb A. 简单的数列问题 签到,记得开long long。 #include<bits/stdc.h> #define rep(i,a,b) for (int ia;i<b;i) #define per(i,a,b) for (int ia;i>b;--i) #define se second #define fi first #define endl …...
go语言的actor框架和air工具有什么区别?
Go语言的Actor框架和Air工具在多个方面存在显著的区别,主要体现在它们的设计目的、功能特性以及应用场景上。 ### Go语言的Actor框架 **设计目的与功能特性**: * **设计目的**:Actor框架是专为高并发和分布式系统设计的编程模型。它通过将系统…...
文件上传漏洞-HackBar使用
介绍 HackBar 是一个用于浏览器的扩展插件,主要用于进行网络渗透测试和安全评估。它提供了一系列方便的工具和功能,可以帮助用户执行各种网络攻击和测试,包括 XSS、SQL 注入、CSRF、路径穿越等 下载地址 可以到github上面去下载࿰…...
多层次算力网络;雾计算和边缘计算区别
目录 多层次算力网络 云计算 雾计算 边缘计算 海计算 相互协作 雾计算和边缘计算 一、概念与定义 二、目标与实现方式 三、应用场景 四、总结 多层次算力网络 涉及云计算、雾计算、边缘计算和海计算等技术之间的相互协作,这些技术各自具有不同的特点和覆盖范围,能…...
JavaDS —— 红黑树
前言 还是一样,这里的红黑树重点讲述插入代码的实现,如果对红黑树的删除感兴趣,可以去翻阅其他资料。 在数据结构专栏中已经对 AVL 树的旋转调整做了分析和讲解,这里红黑树也会使用到旋转调整的代码,就不讲述旋转代码…...
Python爬虫技术 第27节 API和RESTful服务
Python 爬虫技术是一种自动化获取网页内容的方法,通常用于数据收集、信息抽取或自动化测试。在讲解 Python 爬虫技术时,我们通常会涉及到以下几个关键概念: HTTP 请求:爬虫通过发送 HTTP 请求来获取网页内容,这是爬虫与…...
进程创建,进程消亡
虚拟地址:通过虚拟技术,将外部存储设备的一部分空间,划分给系统,作为在内存不足时临时用作数据缓存。当内存耗尽时,电脑就会自动调用硬盘来充当内存,以缓解内存的紧张。 练习: 编写一个代码实现,一个父…...