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

【Scrapy】Scrapy教程2——工作原理

文章目录

  • 数据流
  • 组件
    • 引擎Engine
    • 调度器Scheduler
    • 下载器Downloader
    • 爬虫Spiders
    • 项目管道Item Pipeline
    • 下载器中间件Downloader Middlewares
    • 爬虫中间件Spider Middlewares

在学习Scrapy前,我们需要先了解其架构和工作原理,这样才能很好的去使用Scrapy。
Scrapy的整体架构如下图所示,同时也标注出了其各个组件和数据流。
在这里插入图片描述

数据流

Scrapy的数据流由引擎控制,流程如下:

  1. 引擎Engine从爬虫Spiders中获得初始请求开始抓取。
  2. 引擎Engine在调度器Scheduler中调度请求,并准备对下一次的请求进行抓取。
  3. 调度器Scheduler返回下一个请求给引擎Engine。
  4. 引擎Engine通过下载器中间件Downloader Middleware发送请求到下载器Downloader
  5. 一旦下载器Downloader完成页面下载,将生成一个响应Response通过下载器中间件Downloader Middleware返回给引擎Engine。
  6. 引擎Engine收到下载器Downloader的响应,通过爬虫中间件Spiders Middleware发送给爬虫Spiders进行处理。
  7. 爬虫Spiders处理响应Response,并通过爬虫中间件Spiders Middleware返回处理后的Items,以及新的请求Request给引擎Engine。
  8. 引擎Engine发送处理后的Items给到项目管道Item Pipelines进行存储或其他处理,然后把处理后的请求Requests发送给调度器Scheduler,计划处理下一个可能抓取的请求。
  9. 流程从第3步重复,直到调度器Scheduler中没有更多的请求。

上面流程中提到了很多名词,比如引擎、调度器、下载器、爬虫、项目管道、中间件,这些是什么呢?都是Scrapy的组件。

组件

Scrapy包含了6大组件,分别是引擎(engine)、调度器(scheduler)、下载器(downloader)、爬虫(spiders)、项目管道(item pipelines)、中间件(middleware)。中间件中又分下载器中间件Downloader Middlewares和爬虫中间件Spider Middlewares

引擎Engine

引擎负责控制系统所有组件之间的数据流,并当某些操作发生时触发事件。

调度器Scheduler

调度器用来接收引擎发过来的请求,并把这些请求排入队列,当引擎需要时再返回。其作用是决定下一个要抓取的网址,并把重复的网址去除。

下载器Downloader

下载器负责取回网页内容(即响应response)返回给引擎,引擎把网页内容依次给爬虫。下载器是建立在twisted异步模型上的。

爬虫Spiders

爬虫是Scrapy的使用者自己编写的类,用来解析响应(response),并提取出项目(items)或额外的新请求。

项目管道Item Pipeline

项目管道负责处理由爬虫提取出来的项目,典型的任务包括清理、验证和持久化(比如存储到数据库)。

下载器中间件Downloader Middlewares

下载器中间件位于引擎和下载器之间,用来处理引擎到下载的请求,和下载器到引擎的响应。遇到以下情况时请使用下载器:

  • 在请求发送到下载器之前处理请求
  • 在响应发生到爬虫前修改接收到的响应
  • 不把响应发送到爬虫,而是发送一个新请求
  • 不获取网页的情况下把响应发送给爬虫
  • 静默的删除一些请求

爬虫中间件Spider Middlewares

爬虫中间件位于引擎和爬虫之间,能够处理爬虫的输入(responses)和输出(items and requests)。当需要做以下事情时请使用爬虫中间件:

  • 爬虫回调的内容处理后输出,包括修改、添加、删除请求requests或项目items
  • 处理后开始请求start_requests
  • 处理爬虫的异常
  • 调用 errback 代替基于响应内容的某些请求的回调

Scrapy的工作原理就讲这么多了,欢迎大家在其他平台关注我,将不定期发放各种软件或软件源码供大家使用!

在这里插入图片描述

相关文章:

【Scrapy】Scrapy教程2——工作原理

文章目录 数据流组件引擎Engine调度器Scheduler下载器Downloader爬虫Spiders项目管道Item Pipeline下载器中间件Downloader Middlewares爬虫中间件Spider Middlewares 在学习Scrapy前,我们需要先了解其架构和工作原理,这样才能很好的去使用Scrapy。 Scra…...

探索 DeepSeek:AI 领域的璀璨新星

在人工智能飞速发展的当下,DeepSeek 作为行业内的重要参与者,正以独特的技术和广泛的应用备受瞩目。 DeepSeek 是一家专注于实现 AGI(通用人工智能)的中国人工智能公司。它拥有自主研发的深度学习框架,能高效处理海量…...

宏基传奇swift edge偶尔开机BIOS重置

电脑是acer swift edge, SFA16-41,出厂是Win11系统, BIOS版本出厂1.04,更新到了目前最新1.10。 问题是 会偶尔开机ACER图标变小跑到屏幕左上方,下次开机BIOS就会被重置,开机等待很长时间。 因为是偶尔现象的…...

自动驾驶---如何打造一款属于自己的自动驾驶系统

在笔者的专栏《自动驾驶Planning决策规划》中,主要讲解了行车的相关知识,从Routing,到Behavior Planning,再到Motion Planning,以及最后的Control,笔者都做了相关介绍,其中主要包括算法在量产上…...

【C语言】第一期——数据类型变量常量

目录 1 字面量 2 整数类型 2.1 整数类型的取值范围 2.1.1 sizeof 运算符 2.2 GB、MB、KB、B之间的关系 2.3 定义整数类型的变量并打印 2.4 整数类型代码演示 3 浮点类型 3.1 浮点类型的取值范围 3.2 定义浮点类型变量并打印 3.3 保留2位小数点 4 char字符型 4.1…...

04运维实用篇(D4_日志)

目录 一、简介 二、代码中使用日志工具记录日志 1. 操作步骤 步骤1:添加日志记录操作 步骤2:设置日志输出级别 步骤3:设置日志组 2. 知识小结 三、优化日志对象创建代码 1. 实例 2. 总结 四、日志输出格式控制 1. 实例 2. 总结 …...

centos部署open-webui

提示:本文将简要介绍一下在linux下open-webui的安装过程,安装中未使用虚拟环境。 文章目录 一、open-webui是什么?二、安装流程1.openssl升级2.Python3.11安装3.sqlite安装升级4.pip 下载安装open-webui 总结 一、open-webui是什么? Open W…...

UE求职Demo开发日志#32 优化#1 交互逻辑实现接口、提取Bag和Warehouse的父类

1 定义并实现交互接口 接口定义: // Fill out your copyright notice in the Description page of Project Settings.#pragma once#include "CoreMinimal.h" #include "UObject/Interface.h" #include "MyInterActInterface.generated.h…...

Visonpro 检测是否有缺齿

一、效果展示 二、上面是原展开工具CogPolarUnwrapTool; 第二种方法: 用Blob 和 CogCopyRegionTool 三、 用预处理工具 加减常数,让图片变得更亮点 四、圆展开工具 五、模板匹配 六、代码分解 1.创建集合和文子显示工具 CogGraphicCollec…...

第1章大型互联网公司的基础架构——1.6 RPC服务

你可能在1.1节的引言中注意到业务服务层包括HTTP服务和RPC服务,两者的定位不一样。一般来说,一个业务场景的核心逻辑都是在RPC服务中实现的,强调的是服务于后台系统内部,所谓的“微服务”主要指的就是RPC服务;而HTTP服…...

今日AI和商界事件(2025-02-15)

根据2025年2月15日的科技动态,以下是今日AI领域的重要事件及相关进展总结: 1. DeepSeek日活突破3000万,开源生态加速AI普惠 里程碑意义:开源大模型DeepSeek宣布日活跃用户数突破3000万,其R1模型凭借开源策略和低成本优…...

算法题(69):搜索插入位置

审题: 需要我们在有序数组中找到等于target值的元素的下标若没有则返回target按顺序会插入的位置的索引 思路 : 我们可以使用二分查找的方法 方法一:二分查找 和普通的二分查找不同,本题若没有找到就需要返回它按顺序插入的位置的…...

在 Linux 系统中,tc(Traffic Control) QoS 常用命令简介

在 Linux 系统中,tc(Traffic Control)命令是一个强大的工具,用于配置和管理网络流量控制。以下是 tc 命令的常用功能和基本用法: 1. 查看当前队列规则 使用以下命令查看指定网络接口上的队列规则: tc qd…...

如何画产品功能图、结构图

功能图的类型 常见的功能图包括数据流图、用例图、活动图、状态图、类图、组件图、部署图等等,不同的应用场景和目标下,需要确定不同的功能图类型。 数据流图 用例图 状态图 类图 组件图 组件图是由软件系统、组件和组件之间的关系组成的图形&#xf…...

4090单卡挑战DeepSeek r1 671b:尝试量化后的心得的分享

引言: 最近,DeepSeek-R1在完全开源的背景下,与OpenAI的O1推理模型展开了激烈竞争,引发了广泛关注。为了让更多本地用户能够运行DeepSeek,我们成功将R1 671B参数模型从720GB压缩至131GB,减少了80%&#xff…...

SpringBoot速成(12)文章分类P15-P19

1.新增文章分类 1.Postman登录不上,可以从头registe->login一个新的成员:注意,跳转多个url时,post/get/patch记得修改成controller类中对应方法上写的 2.postman运行成功: 但表中不更新:细节有问题: c是…...

C++17中的clamp函数

一、std::clamp() 其实在前面简单介绍过这个函数&#xff0c;但当时只是一个集中的说明&#xff0c;为了更好的理解std::clamp的应用&#xff0c;本篇再详细进行阐述一次。std::clamp在C17中其定义的方式为&#xff1a; template< class T > constexpr const T& cl…...

配置Open-R1,评测第三方蒸馏模型的性能1

年前DeepSeek不温不火&#xff0c;问题的响应极。一回车&#xff0c;就看模型如口吐莲花般&#xff0c;先是输出思维过程&#xff0c;虽然中间绕来绕去&#xff0c;但是输出回答时还是准确而简洁的。比如&#xff0c;用它来读当时出来的几篇文章&#xff0c;确实大大提升了效率…...

Chrome插件开发流程

Chrome插件开发流程可以分为以下几个主要步骤&#xff1a; ### 1. 确定插件功能和目标 在开始开发之前&#xff0c;首先需要明确插件的功能和目标。这包括&#xff1a; - **功能定义**&#xff1a;确定插件要解决的问题或提供的功能。 - **市场分析**&#xff1a;了解目标用户群…...

物联网行业通识:从入门到深度解析

物联网行业通识&#xff1a;从入门到深度解析 &#xff08;图1&#xff1a;物联网生态示意图&#xff09; 一、引言&#xff1a;万物互联时代的到来 根据IDC最新预测&#xff0c;到2025年全球物联网设备连接数将突破410亿&#xff0c;市场规模达1.1万亿美元。物联网&#xff…...

别再只会用插件了!手把手教你用Vue3+TypeScript从零撸一个九宫格抽奖组件

从零构建高定制化九宫格抽奖组件&#xff1a;Vue3与TypeScript深度实践 每次营销活动季来临&#xff0c;那些千篇一律的抽奖插件总让人感到审美疲劳。当设计师拿出充满品牌特色的交互稿&#xff0c;而现有插件无法实现时&#xff0c;你是否也经历过在CSS hack和API限制之间挣扎…...

Windows Terminal命令行黑科技:5个隐藏技巧让你的终端效率飙升300%

Windows Terminal命令行黑科技&#xff1a;5个隐藏技巧让你的终端效率飙升300% 【免费下载链接】terminal The new Windows Terminal and the original Windows console host, all in the same place! 项目地址: https://gitcode.com/GitHub_Trending/term/terminal 你是…...

MAA明日方舟助手:5分钟彻底告别重复刷图,全自动智能基建管理

MAA明日方舟助手&#xff1a;5分钟彻底告别重复刷图&#xff0c;全自动智能基建管理 【免费下载链接】MaaAssistantArknights 《明日方舟》小助手&#xff0c;全日常一键长草&#xff01;| A one-click tool for the daily tasks of Arknights, supporting all clients. 项目…...

3分钟搞定HS2-HF Patch:终极游戏增强与汉化解决方案

3分钟搞定HS2-HF Patch&#xff1a;终极游戏增强与汉化解决方案 【免费下载链接】HS2-HF_Patch Automatically translate, uncensor and update HoneySelect2! 项目地址: https://gitcode.com/gh_mirrors/hs/HS2-HF_Patch 还在为Honey Select 2的日文界面和有限功能而烦…...

开源社区治理框架:从宪法元协议到可执行代码的实践指南

1. 项目概述&#xff1a;从“宪法”到“代码”的治理实验最近在开源社区里&#xff0c;一个名为“noopolis/constitution”的项目引起了我的注意。乍一看这个标题&#xff0c;你可能会联想到政治学或法学&#xff0c;但它的实际内涵却深深扎根于软件工程、开源协作与分布式治理…...

MelonLoader:Unity游戏模组加载器的5个关键问题与解决方案

MelonLoader&#xff1a;Unity游戏模组加载器的5个关键问题与解决方案 【免费下载链接】MelonLoader The Worlds First Universal Mod Loader for Unity Games compatible with both Il2Cpp and Mono 项目地址: https://gitcode.com/gh_mirrors/me/MelonLoader MelonLoa…...

告别枯燥重复:MAA明日方舟助手如何用智能自动化帮你每天节省2小时游戏时间

告别枯燥重复&#xff1a;MAA明日方舟助手如何用智能自动化帮你每天节省2小时游戏时间 【免费下载链接】MaaAssistantArknights 《明日方舟》小助手&#xff0c;全日常一键长草&#xff01;| A one-click tool for the daily tasks of Arknights, supporting all clients. 项…...

从图像压缩到推荐系统:特征值分解到底在哪些实际项目里悄悄干活?

从图像压缩到推荐系统&#xff1a;特征值分解到底在哪些实际项目里悄悄干活&#xff1f; 当你用手机拍下一张照片&#xff0c;系统瞬间完成高清压缩&#xff1b;当你在电商平台浏览商品&#xff0c;首页突然出现"猜你喜欢"的精准推荐&#xff1b;当你在搜索引擎输入关…...

VisualCppRedist AIO终极指南:一站式解决Windows VC++运行库难题

VisualCppRedist AIO终极指南&#xff1a;一站式解决Windows VC运行库难题 【免费下载链接】vcredist AIO Repack for latest Microsoft Visual C Redistributable Runtimes 项目地址: https://gitcode.com/gh_mirrors/vc/vcredist 你是否曾经遇到过Windows应用程序无法…...

基于Docker与Claude SDK构建AI代理:Nagi项目架构解析与实战

1. 项目概述&#xff1a;构建你的个人AI副驾 如果你和我一样&#xff0c;每天的工作流被Slack、Discord、Asana等工具切割得支离破碎&#xff0c;总是在不同应用间切换&#xff0c;重复着“复制-粘贴-提问-等待”的循环&#xff0c;那么你大概也幻想过能有一个“数字副驾”。它…...