scrapy源码分析(一)架构(译)

本文深入分析Scrapy的架构,包括爬取引擎、调度器、下载器、解析器、数据管道和中间件等关键组件。数据流在引擎的控制下,从Spider获取请求,经过调度器、下载器、中间件,最后到Pipeline进行数据处理。Scrapy基于事件驱动网络框架Twisted,实现高效并发的网络请求。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

来源:https://docs.scrapy.org/en/latest/topics/architecture.html#topics-architecture

架构概览

综述

下图展示了scrapy 架构的概要,包含其组件和系统中数据流的展示(红色箭头)。

数据流(data flow)

在这里插入图片描述

scrapy中的数据流被其执行引擎execution engine)控制,运行原理如下:

  1. engineSpider处获取最初的请求(requests)给爬虫;
  2. engineScheduler调度器)中 安排请求,并向调度器询问下一个请求;
  3. Scheduler 返回下一个请求到 engine
  4. engine 发送请求到 Downloader下载器),中间会经过 Downloader Middlewares下载中间件),在这里可以对请求进行预处理;
  5. 一旦页面完成了下载,Downloader会生成该页面的一个响应(Response),同时会将Response传给engine,中途会经过Downloader Middlewares ,在这里我们可以对Response进行自定义的处理;
  6. engine接收到Response后,将它传给Spider进行处理,中途会经过Spider Middlewares ,同样,在这里我们可以加入自定义处理;
  7. Spider 处理了Response,并返回Items(放置从Response中获取的数据)和新的Requestsengine,中途会经过Spider Middlewares
  8. engine 发送处理过的ItemsItem Pipelines ,同时发送处理过的Requests 到 **Scheduler ** ,并向调度器询问下一个请求
  9. 整个过程循环,直到调度器中没有请求为止

组件(Components)

Scrapy Engine (爬取引擎)

引擎负责控制在所有组件中流动的数据流(data flow),而且当某些操作发生后会触发相应的事件,具体可以看上面的数据流图。

Scheduler (调度器)

调度器从引擎中接受请求,并将它们入队以供后面的输送(也输送到引擎)。

Downloader (下载器)

下载器负责获取网页,并将它们输送到引擎,引擎再交给spider。

Spiders (解析器)

解析部分由用户自定义,解析返回的响应(Response)以及从响应中抽取/组合Items,或者追加额外的请求链接用以继续采集。

Item Pipeline (数据管道)

一旦Item被spiders抽取了,就交由数据管道处理。在数据管道中,典型的任务包括:清洗,校验,数据持久化(例如存储在数据库)。

Downloader middlewares (下载器中间件)

下载器中间件是引擎和下载器之间特殊的钩子,当请求(requests)通过引擎到下载器之间时,处理请求;当响应(response)通过下载器到引擎之间时,处理响应。

若你希望做以下的事情,则应当使用下载器:

  1. 请求被送到下载器之前处理它;
  2. 响应被送往解析器前,处理它;
  3. 发送一个新的请求给解析器,而不是发送一个响应;
  4. 直接发送一个响应给解析器,而不用去获取页面
  5. 静默删除请求

Spider middlewares (解析器中间件)

解析器中间件是引擎和下载器之间特殊的钩子,可以处理解析器的输入(response)和输出(items/requests)

下列情况适宜使用:

  1. 后处理解析器回调的输出:改变/添加/删除 请求或者items;
  2. 后处理起始请求(start_requests);
  3. 处理解析器异常;
  4. 为一些基于响应内容的请求调用错误回调函数(errback)而不是回调函数

Event-driven networking(事件驱动网络)

scrapy基于Twisted,它是一个python的事件驱动网络框架,为并发使用了非阻塞(异步)的代码。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值