【Python爬虫开发基础⑭】Scrapy架构(组件介绍、架构组成和工作原理)

🚀个人主页:为梦而生~ 关注我一起学习吧!
💡专栏:python网络爬虫从基础到实战 欢迎订阅!后面的内容会越来越有意思~
💡往期推荐
⭐️前面比较重要的基础内容
【Python爬虫开发基础⑨】jsonpath和BeautifulSoup库概述及其对比
【Python爬虫开发基础⑩】selenium概述
【Python爬虫开发基础⑪】requests库概述(GET和POST请求)
【Python爬虫开发基础⑫】requests库概述(文件上传、cookies处理、状态码处理、异常处理等)
【Python爬虫开发基础⑬】Scrapy库概述(简介、安装与基本使用)
⭐️爬虫的实战文章
【Python爬虫开发实战①】使用urllib以及XPath爬取可爱小猫图片
【Python爬虫开发实战②】使用urllib以及jsonpath爬取即将上映电影信息
大家可以复制代码感受一下爬虫的魅力~
💡本期内容:上一篇文章我们简单的介绍了Scrapy,这一篇文章我们接着来深入的讲一下它的架构:组织架构和工作原理


文章目录

  • 1 Scrapy的组件介绍
  • 2 Scrapy架构组成
  • 3 Scrapy工作原理


1 Scrapy的组件介绍

Scrapy 是一个用于爬取网站数据和执行抓取任务的Python框架。它提供了一系列的组件,用于构建和管理爬虫项目。下面是对 Scrapy的几个重要组件的介绍:

在这里插入图片描述

  • Spider(爬虫)

Spider 是 Scrapy 的最基本组件,用于定义如何抓取特定网站的数据。每一个 Spider 都包含了一些用于抓取站点的初始URL和如何跟进页面中的链接的规则。Spider 通过解析页面的内容来抓取所需的数据。

  • Item(数据项)

Item 用于定义要从网页中提取的结构化数据。你可以根据需要创建多个 Item,每个 Item 包含了一组字段,用于保存特定的数据。在 Spider 解析页面时,可以从页面中提取相关数据,并将其存储到 Item 中。

  • Pipeline(管道)

Pipeline 可以定义对 Item 进行的数据处理操作。在 Spider 解析页面并提取数据后,可以将数据传递给 Pipeline,在 Pipeline 中执行数据清洗、验证、存储等操作。可以有多个 Pipeline,它们按照优先级顺序依次处理 Item。

  • Project(项目)

Project 是指整个基于 Scrapy 的爬虫项目。它包含了所有的配置信息、Spider、Item、Pipeline、中间件等组件。一个项目可以包含多个 Spider,每个 Spider 负责爬取特定的网站或特定的数据。通过命令行工具或脚本,可以管理和运行项目,执行爬取任务。


2 Scrapy架构组成

Scrapy 是一个基于异步网络框架 Twisted,采用了事件驱动的设计理念,具有高度的灵活性和可扩展性。下面是 Scrapy的详细架构组成:

在这里插入图片描述

  • Spiders(爬虫)

Spider 是 Scrapy 框架中的主要组件,用于定义网站的抓取逻辑。每个 Spider 都包含了一些用于抓取站点的初始 URL 和如何跟进页面中的链接的规则。Spider 通过解析页面的内容来抓取所需的数据。

  • Scheduler(调度器)

Scheduler 用于管理爬取任务的调度和队列,它接收由 Spider 生成的请求,并根据一定的策略进行排队。Scheduler 负责将请求发送给下载器进行处理,以确保爬虫能按照预定的顺序爬取数据。

  • Downloader(下载器)

Downloader 负责下载请求的内容并将其返回给 Spider 进行解析。它可以处理使用 HTTP、HTTPS、FTP 等协议的请求,支持自动处理重定向、Cookies、代理等功能,并能够使用并发技术提高下载效率。

  • Item Pipeline(数据管道)

Item Pipeline 是用于处理由 Spider 提取的 Item 对象的组件。它负责对 Item 进行处理、清洗、验证、存储等操作。可以有多个 Item Pipeline,它们按照优先级顺序依次处理 Item。

  • Downloader Middleware(下载器中间件)

Downloader Middleware 是位于下载器和调度器之间的一层处理组件。它可以拦截下载请求和下载响应,对它们进行修改和处理。常见的应用场景包括设置请求的 Headers、处理代理、处理 Cookies 等。

  • Spider Middleware(爬虫中间件)

Spider Middleware 是位于 Spider 和调度器之间的一层处理组件。它可以拦截 Spider 的输入和输出,对它们进行修改和处理。常见的应用场景包括处理抓取结果、处理异常、处理重定向等。

  • Item Loader(数据加载器)

Item Loader 是用于填充 Item 对象的组件。它负责从爬取的数据中解析出字段的值,并进行预处理、格式化等操作。可以通过定义 Item Loader 来指定每个字段的处理规则。

  • Engine(引擎)

Engine 是 Scrapy 的核心调度器,负责控制整个爬取流程的运行。它通过调度器、下载器、Spider 等组件的协同工作,实现了请求的调度和处理、页面的解析和数据的提取等功能。

  • Spider Loader(爬虫加载器)

Spider Loader 负责加载和实例化 Spider,以及管理 Spider 的配置和设置。它可以根据配置文件或命令行参数自动发现和加载项目中的 Spider。


3 Scrapy工作原理

在这里插入图片描述

Scrapy的工作原理如下:

  1. 引擎(Engine)从 Spider 获取要抓取的初始 URL,并向调度器(Scheduler)提交请求。
  2. 调度器根据一定的策略将请求入队,等待下载器(Downloader)进行处理。
  3. 下载器从调度器获取请求,并将其发送到指定的网站服务器,获取响应。
  4. 下载器将响应返回给引擎,引擎将其传递给 Spider 进行解析和处理。
  5. Spider 解析网页,提取所需的数据,并生成新的请求,以及要存储的数据项(Item),并将它们返回给引擎。
  6. 引擎将新生成的请求交给调度器处理,将存储的数据项传递给 Item Pipeline 进行处理。
  7. 在 Item Pipeline 中,对数据项进行各种处理操作,如数据清洗、验证、存储等。
  8. 经过 Item Pipeline 处理后,最终的数据项被存储起来,或者根据配置将其发送到其他目标。
  9. 如果有新的请求生成,引擎将重复以上步骤,直到调度器中没有更多的请求。

Scrapy 的工作原理是基于异步的事件驱动模型实现的。整个过程中各个组件的协同工作使得爬取任务得以高效地进行。在处理请求和响应过程中,Scrapy 支持并发处理,通过使用异步网络框架 Twisted,从而提高了爬虫的速度和效率。此外,Scrapy 还提供了许多可定制和扩展的机制,如中间件、数据管道等,使得开发者能够根据自己的需求进行灵活的配置和操作。

总结来说,Scrapy 的工作原理是:引擎从 Spider 获取初始 URL,通过调度器将请求入队,下载器发送请求获取响应,Spider 解析网页提取数据并生成新的请求和数据项,引擎将其传递给相应组件进行处理,最终实现数据的提取、处理和存储。这个循环过程不断重复,直到所有的请求都被处理完毕或达到停止条件。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/42261.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【ArcGIS Pro微课1000例】0028:绘制酒店分布热力图(POI数据)

本文讲解在ArcGIS Pro中文版中,基于长沙市酒店宾馆分布矢量点数据(POI数据)绘制酒店分布热力图。 文章目录 一、加载酒店分布数据二、绘制热度图参考阅读: 【GeoDa实用技巧100例】004:绘制长沙市宾馆热度图 【ArcGIS微课1000例】0070:制作宾馆酒店分布热度热力图 一、加载…

从0到1构建证券行业组织级项目管理体系的探索与实践︱东吴证券PMO负责人娄鹏呈

东吴证券股份有限公司信息技术总部PMO负责人娄鹏呈先生受邀为由PMO评论主办的2023第十二届中国PMO大会演讲嘉宾,演讲议题:从0到1构建证券行业组织级项目管理体系的探索与实践。大会将于8月12-13日在北京举办,敬请关注! 议题简要&a…

联通 Flink 实时计算平台化运维实践

摘要:本文整理自联通数科实时计算团队负责人、Apache StreamPark Committer 穆纯进在 Flink Forward Asia 2022 平台建设专场的分享,本篇内容主要分为四个部分: 实时计算平台背景介绍 Flink 实时作业运维挑战 基于 StreamPark 一体化管理 …

力扣题目解析:生成奇数个字符的字符串的巧妙方法

本篇博客会讲解力扣“1374. 生成每种字符都是奇数个的字符串”的解题思路,这是题目链接。 这道题的解题思路很巧妙,它利用了字符串长度n的奇偶性: 如果n是奇数,那么就把字符串全部填充为’a’,这样每种字符都是奇数个…

基于linux下的高并发服务器开发(第一章)- 目录遍历函数

10 / 目录遍历函数 // 打开一个目录 #include <sys/types.h> #include <dirent.h>DIR *opendir(const char *name); 参数&#xff1a; - name: 需要打开的目录的名称 返回值&#xff1a; DIR * 类型&#xff0c;理解为目录流 错误…

网络安全/黑客技术—学习笔记

一、什么是网络安全 网络安全可以基于攻击和防御视角来分类&#xff0c;我们经常听到的 “红队”、“渗透测试” 等就是研究攻击技术&#xff0c;而“蓝队”、“安全运营”、“安全运维”则研究防御技术。 无论网络、Web、移动、桌面、云等哪个领域&#xff0c;都有攻与防两面…

韦东山Linux驱动入门实验班(4)LED驱动

前言 &#xff08;1&#xff09;我们学习完hello驱动之后&#xff0c;对驱动程序开发有了一点点认识了之后。现在可以开始对硬件进行实际操作了&#xff0c;本人使用的是i.max6ull开发板&#xff0c;STM32MP157和全志的D1H也会进行讲解。 &#xff08;2&#xff09;如果还有对于…

Simulink仿真模块 - Data Store Read

Data Store Read:从数据存储中读取数据 在仿真库中的位置为:Simulink / Signal Routing 模型为: 说明 Data Store Read 模块将指定数据存储中的数据复制到其输出中。多个 Data Store Read 模块可从同一个数据存储读取数据。 用来读取数据的源数据存储由 Data Store Memory 模…

低代码技术:提高效率降低成本的全新选择

一、前言 企业想要独立的应用程序&#xff0c;开发者在寻求更快速、更高效、更灵活的开发方法&#xff0c;以适应快速变化的市场需求。在这个背景下&#xff0c;低代码技术以提高效率降低成本的方式走进人们视野&#xff0c;成为了一种全新的应用程序开发方式。 二、相比传统的…

手写IOC

IOC原理(手写IOC) Spring框架的IOC是基于反射机制实现的。 反射回顾 Java反射机制是在运行状态中&#xff0c;对于任意一个类&#xff0c;都能够知道这个类的所有属性和方法&#xff0c;对于任意一个对象&#xff0c;都能够调用它的任意方法和属性&#xff1b;这种动态获取信息…

在Linux下做性能分析1:基本模型

介绍 本Blog开始介绍一下在Linux分析性能瓶颈的基本方法。主要围绕一个基本的分析模型&#xff0c;介绍perf和ftrace的使用技巧&#xff0c;然后东一扒子&#xff0c;西一扒子&#xff0c;逮到什么说什么&#xff0c;也不一定会严谨。主要是把这个领域的一些思路和技巧串起来。…

解码 LangChain|用 LangChain 和 Milvus 从零搭建 LLM 应用

如何从零搭建一个 LLM 应用&#xff1f;不妨试试 LangChain Milvus 的组合拳。 作为开发 LLM 应用的框架&#xff0c;LangChain 内部不仅包含诸多模块&#xff0c;而且支持外部集成&#xff1b;Milvus 同样可以支持诸多 LLM 集成&#xff0c;二者结合除了可以轻松搭建一个 LLM…

计算机科学与技术专业课程内容汇总

大学课程结束了&#xff0c;真的好快。昨天把专业课程涉及到的内容汇总了下&#xff0c;还是挺多的&#xff0c;存到网盘里也不会丢&#xff0c;电脑存储空间还能扩大。 把网盘链接放在这里&#xff0c;希望大家共勉。图片中所涉内容仅为部分课程。 链接&#xff1a;https://…

7.kafka+ELK连接

文章目录 kafkaELK连接部署Kafkakafka操作命令kafka架构深入FilebeatKafkaELK连接 kafkaELK连接 部署Kafka ###关闭防火墙systemctl stop firewalld systemctl disable firewalldsetenforce 0vim /etc/selinux/configSELINUXdisabled###下载安装包官方下载地址&#xff1a;ht…

js小写金额转大写 自动转换

// 小写转为大写convertCurrency(money) {var cnNums [零, 壹, 贰, 叁, 肆, 伍, 陆, 柒, 捌, 玖]var cnIntRadice [, 拾, 佰, 仟]var cnIntUnits [, 万, 亿, 兆]var cnDecUnits [角, 分, 毫, 厘]// var cnInteger 整var cnIntLast 元var maxNum 999999999999999.9999var…

船舶中压配电板应用弧光保护,可解决母排故障短路问题,对于提高船舶电站的安全性、稳定性,降低经济损失具有重要意义。-安科瑞黄安南

摘要&#xff1a;船舶中压配电板弧光故障导致的设备损坏和停电事故&#xff0c;不仅会造成较大的经济损失&#xff0c;而且严重影响船舶电站的安全稳定运行&#xff0c;威胁船舶电站操作人员的安全。弧光保护是基于电力系统开关柜发生弧光故障时而设计的一套母线保护系统&#…

使用testify包辅助Go测试指南

我虽然算不上Go标准库的“清教徒”&#xff0c;但在测试方面还多是基于标准库testing包以及go test框架的&#xff0c;除了需要mock的时候&#xff0c;基本上没有用过第三方的Go测试框架。我在《Go语言精进之路》[2]一书中对Go测试组织的讲解也是基于Go testing包和go test框架…

如何使用MATLAB软件完成生态碳汇涡度相关监测与通量数据分析

MATLAB MATLAB是美国MathWorks公司出品的商业数学软件&#xff0c;用于数据分析、无线通信、深度学习、图像处理与计算机视觉、信号处理、量化金融与风险管理、机器人&#xff0c;控制系统等领域。 [1] MATLAB是matrix&laboratory两个词的组合&#xff0c;意为矩阵工厂&a…

力扣206. 反转链表

给你单链表的头节点 head &#xff0c;请你反转链表&#xff0c;并返回反转后的链表。 示例 1&#xff1a; 输入&#xff1a;head [1,2,3,4,5] 输出&#xff1a;[5,4,3,2,1]示例 2&#xff1a; 输入&#xff1a;head [1,2] 输出&#xff1a;[2,1]示例 3&#xff1a; 输入&am…

stm32(SPI读写W25Q18)

SPI 是什么&#xff1f; SPI是串行外设接口&#xff08;Serial Peripheral Interface&#xff09;的缩写&#xff0c;是一种高速的&#xff0c;全双工&#xff0c;同步的通信总 线&#xff0c;并且在芯片的管脚上只占用四根线&#xff0c;节约了芯片的管脚&#xff0c;同时为PC…
最新文章