Scrapy框架介绍

架构介绍

Scrapy框架介绍

五个组件

  • Scrapy Engine(Scrapy引擎)
  • Scheduler(调度器)
  • Downloader(下载器)
  • Spiders(蜘蛛)
  • Item Pipeline(项目管道)

五大组件及其中间件的功能如下:

  1. Scrapy引擎:控制整个系统的数据处理流程,触发事务处理流程,负责串联各个模块

  2. Scheduler(调度器):维护待爬取的URL队列,当接受引擎发送的请求时,会从待爬取的URL队列中取出下一个URL返回给调度器(Scheduler)。

  3. Downloader(下载器):向该网络服务器发送下载页面的请求,用于下载网页内容,并将网页内容交与蜘蛛(Spiders)去处理。

  4. Spiders(蜘蛛):制定要爬取的网站地址,选择所需数据内容,定义域名过滤规则和网页的解析规则等。

  5. Item Pipeline(项目管道):处理由蜘蛛(Spiders)从网页中抽取的数据,主要任务是清洗、验证、过滤、去重和存储数据等。

  6. Middlewares(中间件):中间件是处于Scrapy引擎和Scheduler,Downloader,Spiders之间的构件,主要是处理它们之间的请求及响应。
    Downloader Middlewares,下载器中间件,位于引擎和下载器之间的钩子框架,主要是处理引擎与下载器之间的请求及响应。
    Spider Middlewares, 蜘蛛中间件,位于引擎和蜘蛛之间的钩子框架,主要工作是处理蜘蛛输入的响应和输出的结果及新的请求。

  1. 项目(Item):它定义了爬取结果的数据结构,爬取的数据会被赋值成该对象。

爬取过程

Scrapy引擎发送请求,之后调度器(Scheduler)把初始URL交给下载器(Downloader),然后下载器(Downloader)向服务器发送服务请求,得到响应后将下载的网页内容交与蜘蛛(Spiders)来处理,然后蜘蛛会对网页进行详细的解析。蜘蛛分析的结果有两种:一种是得到新的URL,之后再次请求调度器,开始进行新一轮的爬取,不断的重复上述过程;另一种是得到所需的数据,之后会转交给项目管道继续处理。项目管道负责数据的清洗、验证、过滤、去重和存储等后期处理,最后由Pipeline输出到文件中,或者存入数据库等。
补:
Scrapy 中的数据流由引擎控制,其过程如下:

  • Engine 首先打开一个网站,找到处理该网站的 Spider 并向该 Spider 请求第一个要爬取的 URL。
  • Engine 从 Spider 中获取到第一个要爬取的 URL 并通过 Scheduler 以 Request 的形式调度。
  • Engine 向 Scheduler (调度器)请求下一个要爬取的 URL。
  • Scheduler(调度器) 返回下一个要爬取的 URL 给 Engine,Engine 将 URL 通过 Downloader Middlewares (下载器中间件)转发给 Downloader (下载器)下载。
  • 一旦页面下载完毕, Downloader(下载器) 生成一个该页面的 Response,并将其通过 Downloader Middlewares (下载器中间件)发送给 Engine。
  • Engine 从下载器中接收到 Response(响应) 并通过 Spider Middlewares 发送给 Spider 处理。
  • Spider(蜘蛛) 处理 Response (响应)并返回爬取到的 Item(项目) 及新的 Request (请求)给 Engine。
  • 重复第二步到最后一步,直到 Scheduler(调度器) 中没有更多的 Request(请求),Engine 关闭该网站,爬取结束。

通过多个组件的相互协作、不同组件完成工作的不同、组件对异步处理的支持,Scrapy 最大限度地利用了网络带宽,大大提高了数据爬取和处理的效率。

项目结构

Scrapy 框架和 pyspider 不同,它是通过命令行来创建项目的,代码的编写还是需要 IDE。项目创建之后,项目文件结构如下所示:
Scrapy框架介绍
在此要将各个文件的功能描述如下:

  • scrapy.cfg:它是 Scrapy 项目的配置文件,其内定义了项目的配置文件路径、部署相关信息等内容。
  • items.py:它定义 Item 数据结构,所有的 Item 的定义都可以放这里。
  • pipelines.py:它定义 Item Pipeline 的实现,所有的 Item Pipeline 的实现都可以放这里。
  • settings.py:它定义项目的全局配置。
  • middlewares.py:它定义 Spider Middlewares 和 Downloader Middlewares 的实现。
  • spiders:其内包含一个个 Spider 的实现,每个 Spider 都有一个文件。

参考文章:
一篇文章教会你理解Scrapy网络爬虫框架的工作原理和数据采集过程《Python 3 网络爬虫开发实战》13.1-Scrapy框架介绍