Scrapy入门教程:工作架构和数据处理流程简介
Scrapy的架构图帮助我们了解其背后的整个工作流程,是我们深度掌握以及Scrapy定制开发的重要基础。 -ins。另外,我们也会从总体的角度来回顾一下Scrapy框架源码。接下来的章节会涉及到Scrapy源码进行讲解,所以首先需要查看Scrapy源码目录。 ?主要组件包括:
- 核心部分称为 Scrapy 引擎 。就像军队里的总司令,负责掌控全局、领导其他部门、协调行动;
- 图中最上面是调度器Scheduler:它接收来自引擎的请求并按顺序推送。队列和重复请求同时被过滤;图下的爬虫(蜘蛛)组件主要负责构造查询请求并发送给引擎,然后引擎将查询请求结果传递给这个Process组件,分析出想要的item结果并转发将它们传送至项目管道进行进一步处理;
- 图中右侧的Downloader(下载器)很可能负责从互联网上下载网站数据,以进一步处理创建的产品数据。例如数据清洗、数据库存储等;
- 中间件(Downloaders Middleware),包括爬虫中间件、下载器中间件等,都是用于中间数据处理的。在这里我们可以选择清理和复制项目数据,我们还可以选择如何在这里存储结果项目(MySQL、MongoDB、Redis甚至文件等);
2。 Scrapy数据处理流程
下图是一个非常经典的Scrapy框架数据处理流程图。这个数据流图非常重要。它详细介绍了Scrapy框架背后的工作流程。根据图中序号,我给大家描述一下Scrapy框架中的数据处理流程:
Scrapy框架数据流图
- Spider构造一个Request请求,提交给Scrapy引擎;此阶段有中间件操作,可以设置请求代理的IP地址,然后发送给引擎;
- 引擎向调度器发送请求,调度器根据请求中指定的优先级确定请求的执行顺序;
- 引擎从调度器中获取需要满足的请求Fulfilled request;
- 经过待下载的中间件后,引擎向下载器发出下载网页的请求;
- 获取HTTP响应结果,封装在响应类中,处理可下载中间件后传回引擎;
- 引擎收到查询响应结果后,通过爬虫中间件发送给爬虫(Spider)处理,对应我们之前案例中的parse()方法或者自定义回调方法book_list_parse();
- 索引器将网页数据提取为一个数据单元(item)和一个新的请求(如下一页的URL),然后再次发送给引擎进行处理;
- 引擎将爬虫收到的item发送到Item Pipelines),在项目pipeline中我们可以实现数据的持久化,比如存储在MySQL数据库或者MongoDB中。同时,如果有新的请求,则将其发送到引擎,并从步骤2开始重复执行,直到调度表中不再有请求为止。
如果你分析一下这八个步骤以及你之前实现的交互式发布网络中的数据爬取代码,你是不是能更好地理解呢?上面的架构图和数据流图对于我们学习和理解Scrapy框架非常重要,大家一定要掌握!
3。 Scrapy源码初探
看完了Scrapy的架构和数据处理流程,我们来简单了解一下Scrapy框架源码的结构。了解并理解Scrapy框架源码对于我们日常开发的好处是不言而喻的。我总结了以下三个原因:
- 学习和掌握Scrapy框架的最好方法是阅读源码;
- 提高编程能力的最好方法就是阅读源代码;另外,Scrapy框架中广泛使用了Twisted模块,而国内该框架的资源非常匮乏。我们可以通过Scrapy框架来充分学习如何使用Twisted模块,体验这样的异步通信机制给我们带来了什么。表演经验;
- 方便调试以及后续基于Scrapy的深度定制开发。只有熟悉了Scrapy源码,我们才能对Scrapy框架进行深度定制开发,实现与我们业务相关的爬虫框架;另外,了解源码可以帮助我们在调试Scrapy爬虫时快速找到问题原因,有效解决问题。这些都是经验丰富的爬虫工程师必须具备的技能;
截至撰写本文时(2020 年 7 月 12 日),Scrapy 的最新版本是 2.2.0 版本。我们从github上选择一个稳定的scrapy源码包,下载并解压后使用VScode软件打开源码目录。 Scrapy-2.2.0源码内容如下:
Scrapy-2.2.0版本源码结构
我们依次对这些源码目录和文件进行简单说明。在我们的学习中,我们逐渐深入源码来分析Scrapy框架。行为并监控爬虫的填充过程。依次看一下Scrapy源码的目录结构:
- commands目录:这个目录下的文件正是scrapy所支持的。比如我们用来生成爬虫项目的scrapy startproject xxxx命令对应的是startproject.py文件,scrapy shell http://www.baidu.com命令对应的是shell.py可执行文件。所以,如果我们想追踪scrapy命令的工作过程,可以从这里开始追踪代码;
- contract目录:定义了一组简单的python文件;
- core目录:非常核心,定义了scrapy框架中的核心类和方法;
- downloadermiddlewares目录:下载中间件相关代码;
- extensions目录:定义了一些扩展方法如debug.py、telnet.py等代码文件;
- http目录:该目录中定义了Request类和Response类及其相关的扩展类。以下及后续部分详细介绍了该目录中的源代码文件;
- linkextractors目录:这里的代码主要帮助抓取核心中提取网页链接,定义了一系列提取类;
- loader 目录:该目录的代码是 Item Loader。详细信息请参见源码下的docs/topics/loaders.rst进行透彻理解;
- pipelines目录:与pipelines模块相关,主要处理爬虫提取的item数据。加工;
- selector目录:该目录定义了用于解析网页的选择器,主要包括Selector和SelectorList解析器模块;
- settings目录:定义了配置文件使用的相关类和默认配置文件(default_settings.py);
- spidermiddlewares目录:定义爬虫中间件的相关类和方法,
- spiders目录:定义爬虫模块的核心类;
- template目录:下面存放创建scrapy项目所需要的一些模板文件;
- 帮助目录:一些常用的帮助功能;
- 其他文件:一些核心代码文件都在这里,比如cmdline.py、crawler.py、shell.py等。
看完这些介绍你有什么感受吗?你以为现在非常流行的Python框架就是这样吗?
当然不是,这里我们只介绍了它的表面,并没有深入研究它的内部细节。每个流行的框架都必须有独特的优势和伟大的代码。
Scrapy 框架做得非常好,简单易用。另外,由于使用Twisted作为异步处理框架,基于Scrapy框架的爬虫普遍具有良好的性能,拥有良好的社区、文档和框架生态,最终成就了Scrapy的今天。接下来,我们将慢慢深入这些目录,探索Scrapy源码,最终达到彻底掌握Scrapy框架的目标。
版权声明
本文仅代表作者观点,不代表Code前端网立场。
本文系作者Code前端网发表,如需转载,请注明页面地址。
发表评论:
◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。