Scrapy-核心架构

在之前的文章中,我们已经学习了如何使用Scrapy框架来编写爬虫项目,那么具体Scrapy框架中底层是如何架构的呢?Scrapy主要拥有哪些组件,爬虫具体的实现过程又是怎么样的呢?

为了更深入的了解Scrapy的相关只是,我们需要对Scrapy的架构以及Scrapy中常见的组件进行了解,并熟悉Scrapy爬虫项目的工作流程

架构初识

要充分的理解和使用scrapy,那么就不得不了解以下scrapy的核心架构是怎么样的,如图:

ppKuURH.png

从图中我们可以看到,Scrapy中组件主要包括:

  • Scrapy引擎
  • 调度器
  • 下载器
  • 下载中间件
  • 蜘蛛(也叫做爬虫,一个Scrapy项目下可能会有多个Spiders爬虫文件)
  • 爬虫中间件
  • 实体管道

其中Scrapy引擎为整个架构的核心。调度器、实体管道、下载器和蜘蛛等组件都通过Scrapy引擎来调控。在Scrapy引擎和下载器之间,可以通过一个叫下载中间件的组件进行信息的传递,在下载中间件中,可以插入一些自定义的代码来轻松扩展Scrapy的功能。Scrapy引擎和蜘蛛之间,也可以通过一个叫爬虫中间件的组件进行爬虫与Scrapy引擎的信息传递,也同样可以插入一些自定义的代码来轻松扩展Scrapy的功能。在一个Scrapy项目中可以存在多个爬虫文件,在运行的时候,可以指定运行某一个爬虫文件。通过Scrapy引擎可以调度下载器进行下载互联网中的网页数据,以传递给蜘蛛(爬虫)文件进行对应的处理

常用组件详解

Scrapy引擎

Scrapy引擎是整个Scrapy架构的核心,负责控制整个数据处理流程,以及出发一些事物处理。Scrapy引擎与调度器、实体管道、中间件、下载器、蜘蛛等组件都有关系,Scrapy引擎处于整个Scrapy框架的中心的位置,对各项组件进行控制及协调

调度器

调度器主要实现存储待爬取的网页,并确定这些网址的优先级,决定下一次爬取哪个网址等。我们可以把调度器的存储结构看成一个优先队列,调度器会从引擎中接收request请求并存入优先队列中,在队列中可能会有多个待爬取的网址,但是这些网址各自具有一定的优先级,同时调度器也会过滤掉一些重复的网址,避免重复爬取

下载器

下载器主要实现对网络上要爬取的网页资源进行高速下载,由于该组件需要通过网络进行大量数据的传输,所以该组件的压力负担一般会比其他的组件重。下载器下载了对应的网页资源后,会将这些数据传递给Scrapy引擎,再由Scrapy引擎传递给对应的爬虫进行处理

下载中间件

下载中间件是处于下载器与Scrapy引擎之间的一个特定的组件,主要用于对下载器和Scrapy引擎之间的通信进行处理,在下载中间件中,可以加入自定义代码,轻松地实现Scrapy功能的扩展,我们下载中间件加入的自定义代码,会在Scrapy引擎与下载器通信的时候调用

蜘蛛

蜘蛛组件,也叫做爬虫组件,该组件是Scrapy框架中爬虫实现的核心。在一个Scrapy项目中,可以有多个蜘蛛,每个蜘蛛可以负责一个或多个特定的网站。蜘蛛组件主要负责接收Scrapy引擎中的response响应,在接收了response响应之后,蜘蛛会对这些response响应进行分析处理,然后可以提取对应的关注的数据,也可以提取出接下来需要处理的新网址等信息

爬虫中间件

爬虫中间件是处于Scrapy引擎与爬虫中间件之间的一个特定的组件,主要用于对爬虫组件和Scrapy引擎之间的通信进行处理。同样,在爬虫中间件可以加入一些自定义代码,轻松的实现Scrapy功能的扩展。在爬虫中间件中加入的自定义代码,会在Scrapy引擎与爬虫组件之间通信的时候调用

实体管道

实体管道主要用于接收从蜘蛛组件中提取出来的项目(Item),接收后,会对这些Item进行对应的处理,常见的处理主要有:清洗,验证,存储到数据库中等

Scrapy工作流

我们已经知道了Scrapy框架中主要有哪些组件,以及各项组件的具体作用有哪些,那么在运行Scrapy爬虫项目的时候,各项数据处理在组件中又是怎么进行的呢?这些组件会如何配合呢?下面请看Scrapy数据处理流程图,如下:

ppKlYnA.png

首先,Scrapy引擎会将爬虫文件中设置的要爬取的起始网址(默认在start_urls属性中设置)传递到调度器中。随后,依次进行图中的1~13的过程。

第1步:过程1中,主要将下一次要爬取的网址传递给Scrapy引擎,调度器是一个优先队列,里面可能存储着多个要爬取的网址(当然也可能只有一个网址),调度器会根据各网址的优先级分析出下一次要爬取的网址,然后再传递给Scrapy引擎

第2步:Scrapy引擎接收到过程1中传过来的网址之后,过程2Scrapy引擎主要将网址传递给下载中间件

第3步:下载中间件接收到Scrapy引擎传递过来的网址之后,过程3中下载中间件会将对应的网址传递给下载器

第4步:然后,下载器接收到对应要下载的网址,然后过程4会向互联网中对应的网址发送request请求,进行网页的下载

第5步:互联网中对应的网址接收到request请求之后,会有相应的response响应,随后在过程5中将响应返回给下载器

第6步:下载器接收到响应之后,即完成了对应网页的下载,随后过程6会将对应的响应传递给下载中间件

第7步:下载中间件接收到对应响应之后,会与Scrapy引擎进行通信,过程7会将对应的response响应传递给Scrapy引擎

第8步:Scrapy引擎接收到response响应之后,过程8Scrapy引擎会将response响应信息传递给爬虫中间件

第9步:爬虫中间件接收到对应响应之后,过程9爬虫中间件会将响应传递给对应的爬虫进行处理

第10步:爬虫进行处理之后,大致会有两方面的信息:提取出来的数据和新的请求信息。然后过程10爬虫会将处理后的信息传递给爬虫中间件。

第11步:爬虫中间件接收到对应信息后,过程11会将对应信息传递给Scrapy引擎

第12步:Scrapy引擎接收到爬虫处理后的信息之后,会同时进行过程12和过程13。在过程12中,Scrapy引擎会将提取出来的项目实体(item)传递给实体管道(item pipeline),由实体管道对提取出来的信息进行进一步处理:过程13中,Scrapy引擎会将爬虫处理后得到的新的请求信息传递给调度器,由调度器进行进一步网址的调度

随后,再重复执行第1 ~ 12步,即过程1 ~ 13,一直到调度器中没有网址调度或者异常退出为止

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

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

相关文章

Chatgpt 指令收集

在使用 ChatGPT 时,当你给的指令越精确,它的回答会越到位,举例来说,假如你要请它帮忙写文案,如果没给予指定情境与对象,它会不知道该如何回答的更加准确。 一、写报告 1、我现在正在 [报告的情境与目的]。…

低代码平台应该具备哪些能力?

什么样的低代码无代码平台才算好的平台呢,Gartner 共列出了低代码平台的11个关键能力维度: 1、易用性。易用性是标识低代码平台生产力的关键指标,是指在不写代码的情况下能够完成的功能的多少。 2、用户体验。一般来说,独立软件开…

2023Q2押题,华为OD机试用Python实现 -【机智的外卖员】

最近更新的博客 华为 od 2023 | 什么是华为 od,od 薪资待遇,od 机试题清单华为 OD 机试真题大全,用 Python 解华为机试题 | 机试宝典【华为 OD 机试】全流程解析+经验分享,题型分享,防作弊指南华为 od 机试,独家整理 已参加机试人员的实战技巧本篇题解:机智的外卖员 题目…

Java中的死锁

1.什么是死锁 死锁:多个线程同时被阻塞,它们中的一个或者全部都在等待某个资源被释放。由于线程被无限期的阻塞,线程不可能正常终止。 【举个栗子】滑稽老铁和女生去吃饺子。吃饺子需要醋和饺子。 滑稽老哥抄起了酱油瓶,女生抄起…

【技术教程】在EasyCVR平台中打开第三方桌面端应用的实现过程

EasyCVR视频融合平台基于云边端协同架构,具有强大的数据接入、处理及分发能力,平台支持海量视频汇聚管理,可支持多协议接入,包括市场主流标准协议与厂家私有协议及SDK,如:国标GB28181、RTMP、RTSP/Onvif、海…

vue 引入高德地图当前定位失败 Get ipLocation failed.Geolocation permission denied.

getCurrentPosition 返回的 message 原因解析 : Get ipLocation failed:IP 精确定位失败,精确IP定位服务目前无法完全覆盖所有用户 IP,失败率在5%左右。sdk 定位失败:检查 sdk的 key 是否设置好,以及 webv…

如何远程连接SQLServer数据库

如何远程连接SQLServer数据库 准备工作 1.打开 选中如下的连接方式 连接成功后就会出出现 2.连接成功后:右键设置属性 安全性设置:如下图所示 设置连接属性: 设置完成之后点击完成!!! 3.打开 启动sqlSe…

华为OD机试用JS实现 -【查找树中的元素 or 查找二叉树节点】(2023-Q2 押题)

最近更新的博客 华为od 2023 | 什么是华为od,od 薪资待遇,od机试题清单华为OD机试真题大全,用 Python 解华为机试题 | 机试宝典【华为OD机试】全流程解析+经验分享,题型分享,防作弊指南华为od机试,独家整理 已参加机试人员的实战技巧本篇题解:查找树中的元素 or 查找二叉树…

2023年南京晓庄学院五年一贯制专转本食品科学与工程专业考试大纲

2023年南京晓庄学院五年一贯制专转本食品科学与工程专业考试大纲 专业科目一 :微生物学基础 【参考书目】《食品微生物学》,杨玉红主编, 中国质检 出版社/中国标准出版社,2017(十三五高职高专院校规划教材) 【考试大纲】 ( 一) 考…

jsp054ssm高校学生成绩管理系统hsg421010A5程序

系统主要包含了学生信息管理、成绩信息管理等多个功能模块。下面分别简单阐述一下这几个功能模块需求。不同的权限对应相应的功能模块的需求,管理员权限的级别是最高的,所以所对应的需求是最多的,下面根据不同的权限分别简单阐述一下各个权限…

神奇智能搜索引擎:perplexity智能搜索引擎(ChatGPT与Edge合体——联网版chatGPT)

目录前言一、Perplexity AI网站介绍二、优点介绍2-0、界面介绍2-1、纯净、时效性、来源说明2-2、基于AI对话形式的搜索引擎三、使用方法介绍总结前言 ChatGPT背后的语言大模型OpenAI GPT 3.5,和微软的必应检索系统整合在一起;同时吸取这二者的长处&#…

Python爬虫|西安地铁客流人次获取与分析(一)

一、目标 通过Python编写爬虫程序,爬取西安地铁发布的客流数据,并保存到CSV文件中,并进行数据可视化与分析。 本次使用的库包括:requests、BeautifulSoup、xpath、csv、json、Pycharts等。 二、爬取思路分析 1、WB网页版 打开XLWB主页网址。 图1.新浪微博手机端网址 …

智慧水利整体解决方案2022(ppt可编辑)

业务场景与痛点分析 聚焦场景: 水工监控、水利监管、城市治水、基层防汛业务场景。 痛点分析: 水工监控中,全国水库共有9.8万座,其中超过50%处于病险状态; 水利监管中,运行管理薄弱、设备老化、预报预警不…

弱监督语义分割的token对比笔记

Token Contrast for Weakly-Supervised Semantic Segmentation 摘要 目的: 使用图像级标签的弱监督语义分割(WSSS)通常利用类激活映射(CAM)生成伪标签。受CNN局部结构感知的限制,CAM通常不能识别整体目标区域。虽然最近的视觉转换器(ViT)可以弥补这一…

汇编实验4(99乘法表,整数分解,素数环,迷宫问题)【栈传参,递归,寻址方式】

目录 一、99乘法表 汇编代码 效果 二、整数拆分 问题描述 c代码 汇编代码 效果 三、素数环 问题描述 c代码 效果 四、迷宫问题 问题描述 c代码 汇编代码 效果 一、99乘法表 汇编代码 INCLUDE Irvine32.inc .data a db *,0 .code main PROC mov ebx,1;ebxi m…

给对象新增两个数组,并分别给对象名称、名字

给对象新增两个数组,并分别给对象名称 代码如下: let a {}a.shuzu [1, 2, 3]a.zhangzu [5, 6, 7]console.log(测试添加, a)console.log(打印后台传递的值, this.res)

ToBeWritten之物联网MQTT、Z-Wave等协议

也许每个人出生的时候都以为这世界都是为他一个人而存在的,当他发现自己错的时候,他便开始长大 少走了弯路,也就错过了风景,无论如何,感谢经历 转移发布平台通知:将不再在CSDN博客发布新文章,敬…

gpt训练数据-网页版chat软件

gpt-3 中文 api 目前,OpenAI官方并没有针对GPT-3的中文API,但是有一些第三方机构或者开发者提供了自己的中文API接口,可以使用GPT-3模型进行中文文本生成,利用这些API可以简单地进行中文文本生成等任务,尤其是对于不擅…

详解电容加速电路-加速电容

基本的晶体管开关电路 饱和开关的问题点:关断延时时间 如图1所示,使场效应晶体管开关动作时,加给晶体管的基极电流IB: IBIC/hFE。 晶体管饱和动作时,如图2所示,基极电流IB,即使为0&#xff…

【基础】索引

索引目的: 快速的查找我们的数据 索引的优势和劣势 优势 类似于书籍的目录索引,提高数据检索的效率,降低数据库的io成本 通过索引列对数据进行排序,降低数据排序的成本,降低CPU的消耗 劣势 实际上索引也是一张表&…
最新文章