Scrapy 框架介绍 [Scrapy 框架概述][Scrapy 框架的特点][Scrapy 框架的架构概述]

您的“关注”和“点赞”,是信任,是认可,是支持,是动力。

如意见相佐,可留言。
本人必将竭尽全力试图做到准确和全面,终其一生进行修改补充更新。

本文首发在IT羊资源网。
《IT羊资源网》,网址:https://www.ityangzy.com
IT羊资源网是IT世界的羊群!
一个致力于科技、信息技术和计算机领域的综合在线平台。
我们的使命是为读者提供最新、全面的科技资讯、技术教程和资源下载,帮助大家在不断变化的IT领域中保持领先。
欢迎每一位志同道合的人士加入羊群!

1 Scrapy 框架概述

Scrapy 是一个适用于 Python 的一个快速、高层次的、开放源代码的屏幕抓取和 web 抓取的应用程序框架,用于抓取 web 站点并从页面中提取结构化的数据,可用于各种有用的应用程序。

Scrapy 常应用在包括数据挖掘、监测、信息处理、存储历史数据(历史档案)或自动化测试等一系列的程序中。通常我们可以很简单的通过 Scrapy 框架实现一个爬虫,抓取指定网站的内容或图片。

Scrapy 最初是为屏幕抓取而设计的,但它也可以用来访问 API 或用作通用 Web 搜寻器来提取数据。

Scrapy 吸引人的地方在于它是一个框架,任何人都可以根据需求便捷的进行修改。它也提供了多种类型爬虫的基类,如 BaseSpider、sitemap 爬虫等。

2 Scrapy 框架的特点

2.1 快速而强大

编写规则以提取数据,然后让 Scrapy 完成其余工作。

它管理请求,解析 HTML 网页,收集数据并将其保存为所需的格式,不需要为每个其他步骤使用单独的库。

2.2 容易扩展

通过设计可扩展,无需接触核心即可轻松插入新功能。

可以在 Scrapy 中使用中间件。中间件是一种“插件”,可为 Scrapy 添加其他功能。我们可以将很多开源中间件附加到 Scrapy 以获得额外的功能。

2.3 可移植(跨平台)

用 Python 编写,可以在 Linux,Windows,Mac 和 BSD 上运行。

3 Scrapy 框架的架构概述

概述 Scrapy 体系结构(架构图)及其组件,及其系统内部发生的数据流(由红色箭头显示),还包括对这些组件的简要说明。

Scrapy 体系结构(架构图)

如下图所示(来自官方文档):

在这里插入图片描述

对组件说明

  • Engine(引擎):Scrapy 引擎负责控制系统所有组件之间的数据流,并在发生某些操作时触发事件。
  • Scheduler(调度器):Scrapy 调度器调度程序接收来自引擎的 request(请求),并对它去重,放入到请求队列中;并在引擎请求它们时使它们排队,并根据队列的取出规则,把请求按顺序返回给引擎。
  • Downloader(下载器):下载器负责获取网页数据并将其返回给引擎,引擎又将其传给 Spiders(爬虫)。
  • Spiders(爬虫):爬虫(Spiders)用来解析 response,提取出 Items 和新的Requests。
  • Item Pipeline(项目管道):一旦爬虫将这些项目提取(或刮取),则项目管道负责处理这些项目。典型的任务包括清理,验证和持久性(例如将项目存储在数据库中)。
  • Downloader middlewares(下载器中间件):Downloader 中间件是位于引擎和Downloader 之间的特定挂钩,数据流在从引擎传递到 Downloader 时处理请求,以及从 Downloader 传递到 Engine 的响应处理。
    如果需要执行以下操作之一,请使用 Downloader 中间件:
    (1)在将请求发送到下载程序之前处理请求(即,在 Scrapy 将请求发送到网站之前);
    (2)在传递给 Spiders 之前更改收到的响应;
    (3)发送新的请求,而不是将收到的响应传递给 Spiders;
    (4)将响应传递给 Spiders,而无需获取网页;
    (5)默默地丢弃一些请求。
  • Spider middlewares(爬虫中间件):爬虫中间件是位于引擎和爬虫之间的特定挂钩,并且能够处理爬虫的输入(响应)和输出(项目和请求)。
    如果需要以下操作之一,请使用 Spider 中间件:
    (1)Spiders 回调的后处理输出-更改/添加/删除请求或项目;
    (2)后处理 start_requests;
    (3)处理爬虫异常;
    (4)根据响应内容,对某些请求调用 errback 而不是回调。

对数据流说明

首先,Scrapy 会实例化一个 Crawler 对象,在该对象中创建 Spider 对象、Engine 对象,通过 Engine 对象打开 Spider,并生成第一个 request(请求)。

  • ①Scrapy Engine(Scrapy 引擎) 从 Spiders(爬虫)获取初始请求。
  • ②Scrapy Engine(Scrapy 引擎)把请求给调度器,并询问下一次请求。
  • ③Scrapy Scheduler(Scrapy 调度器)对 url 去重,放到队列中等待,并把下一个 request 返回给 Engine。
  • ④Scrapy Engine(Scrapy 引擎)把从调度器返回的 reqest 经过下载中间件交给下载器。
  • ⑤页面下载完成后, Downloader 会生成一个 Response(响应),并通过 Downloader Middlewares(下载器中间件)将其发送到 Engine。
  • ⑥引擎接收来自下载器的响应,并通过爬虫中间件,将其发送到爬虫进行处理。
  • ⑦爬虫接收到响应,解析处理响应,解析出 Items 和 新的 Request ,再通过爬虫中间件提交给 Engine。
  • ⑧引擎把接收到的 Items 提交给 Item Pipeline,把接收到的 Request 提交给调度器。
  • ⑨重复该过程(从步骤1开始),直到不再有 Scheduler 的请求为止 。

【参考资料】

Python 官网

Python 3.8.2 documentation

Scrapy 官网

Scrapy 2.2 documentation

  • 4
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值