Python爬虫基础讲解(二十五):scrapy 框架结构

请教下,Python爬虫基础讲解(二十五):scrapy 框架结构
最新回答
毒药

2026-04-19 12:06:47

scrapy 框架结构scrapy 为什么是框架而不是库?

scrapy被设计为框架而非库,主要因为它提供了一套完整的解决方案,用于构建爬虫应用。框架通常包含了一系列组件和约定,开发者需要遵循这些约定来组织代码,从而实现特定的功能。而库则是一组工具或函数的集合,开发者可以按需调用这些工具或函数。scrapy不仅提供了下载网页、解析网页、存储数据等爬虫所需的基本功能,还通过引擎、调度器、中间件等组件,实现了请求调度、数据流动、异常处理等复杂的逻辑。这些组件和约定共同构成了一个完整的爬虫开发框架,使得开发者能够更高效地构建爬虫应用。

scrapy是如何工作的?

scrapy的工作流程可以概括为以下几个步骤:

  1. 创建项目:首先,需要创建一个scrapy项目,这会生成一系列的文件和目录结构,用于组织爬虫代码和相关配置。

  2. 定义Item:在items.py文件中定义数据结构,用于存储爬取到的数据。

  3. 编写Spider:在spiders目录下编写爬虫代码,定义爬取的逻辑和网页的解析规则。爬虫会生成请求(Request)并发送给引擎。

  4. 引擎调度:引擎(Engine)接收到请求后,会将其交给调度器(Scheduler)。调度器将请求按照一定的规则(如优先级、去重等)进行整理,并放入队列中。

  5. 下载网页:当引擎需要处理新的请求时,会从调度器中取出请求,并交给下载器(Downloader)。下载器负责下载网页内容,并将响应(Response)返回给引擎。

  6. 解析响应:引擎将响应交给爬虫(Spider)进行处理。爬虫会解析响应,提取数据,并生成新的请求或Item。

  7. 处理Item:如果爬虫生成了Item,引擎会将其交给Item Pipeline进行处理。Item Pipeline负责清洗、验证和存储数据。

  8. 中间件处理:在请求和响应的处理过程中,下载器中间件(Downloader Middlewares)和爬虫中间件(Spider Middlewares)可以对请求和响应进行自定义的处理和扩展。

项目结构

scrapy项目结构通常包含以下文件和目录:

  • scrapy.cfg:项目的配置文件,用于定义项目的名称和设置。
  • 项目目录:包含项目的所有代码和配置。

    items.py:定义Item数据结构。

    middlewares.py:定义下载中间件和爬虫中间件。

    pipelines.py:定义Item Pipeline的处理逻辑。

    settings.py:项目的全局设置文件。

    spiders:放置爬虫代码的目录。

Scrapy原理图

各个组件的介绍
  1. Engine:引擎,处理整个系统的数据流处理、触发事务,是整个框架的核心。
  2. Item:项目,定义了爬取结果的数据结构,爬取的数据会被赋值成该Item对象。
  3. Scheduler:调度器,接受引擎发过来的请求并将其加入队列中,在引擎再次请求的时候将请求提供给引擎。
  4. Downloader:下载器,下载网页内容,并将网页内容返回给蜘蛛。
  5. Spiders:蜘蛛,定义了爬取的逻辑和网页的解析规则,主要负责解析响应并生成提取结果和新的请求。
  6. Item Pipeline:项目管道,负责处理由蜘蛛从网页中抽取的项目,主要任务是清洗、验证和存储数据。
  7. Downloader Middlewares:下载器中间件,位于引擎和下载器之间的钩子框架,主要处理引擎与下载器之间的请求及响应。
  8. Spider Middlewares:蜘蛛中间件,位于引擎和蜘蛛之间的钩子框架,主要处理蜘蛛输入的响应和输出的结果及新的请求。
数据的流动
  1. Scrapy Engine:负责Spider、ItemPipeline、Downloader、Scheduler之间的通讯,信号、数据传递等。
  2. Scheduler:负责接受引擎发送过来的Request请求,并按照一定的方式进行整理排列,入队,当引擎需要时,交还给引擎。
  3. Downloader:负责下载Scrapy Engine发送的所有Requests请求,并将其获取到的Responses交还给Scrapy Engine,由引擎交给Spider来处理。
  4. Spider:负责处理所有Responses,从中分析提取数据,获取Item字段需要的数据,并将需要跟进的URL提交给引擎,再次进入Scheduler。
  5. Item Pipeline:负责处理Spider中获取到的Item,并进行后期处理(详细分析、过滤、存储等)。
  6. Downloader Middlewares:可以当作是一个可以自定义扩展下载功能的组件。
  7. Spider Middlewares:可以理解为是一个可以自定义扩展和操作引擎和Spider中间通信的功能组件(比如进入Spider的Responses和从Spider出去的Requests)。

通过理解scrapy的框架结构和工作原理,开发者可以更加高效地利用scrapy进行爬虫开发。