Scrapy 源码剖析:架构概览
Python中文社区
共 2643字,需浏览 6分钟
· 2021-02-10
介绍
使用 scrapy startproject
命令创建一个爬虫模板,或自己按模板编写爬虫代码定义一个爬虫类,并继承 scrapy.Spider
,然后重写parse
方法parse
方法里编写网页解析逻辑,以及抓取路径使用 scrapy runspider
运行这个爬虫
架构
核心模块
Scrapy Engine
:核心引擎,负责控制和调度各个组件,保证数据流转;Scheduler
:负责管理任务、过滤任务、输出任务的调度器,存储、去重任务都在此控制;Downloader
:下载器,负责在网络上下载数据,输入待下载的 URL,输出下载结果;Spiders
:我们自己编写的爬虫逻辑,定义抓取意图;Item Pipeline
:负责输出结构化数据,可自定义格式和输出的位置;
Downloader middlewares
:介于引擎和下载器之间,可以在网页在下载前、后进行逻辑处理;Spider middlewares
:介于引擎和爬虫之间,在向爬虫输入下载结果前,和爬虫输出请求 / 数据后进行逻辑处理;
运行流程
引擎从自定义爬虫中获取初始化请求(也叫种子 URL); 引擎把该请求放入调度器中,同时调度器向引擎获取待下载的请求; 调度器把待下载的请求发给引擎; 引擎发送请求给下载器,中间会经过一系列下载器中间件; 这个请求通过下载器下载完成后,生成一个响应对象,返回给引擎,这中间会再次经过一系列下载器中间件; 引擎接收到下载器返回的响应后,发送给爬虫,中间会经过一系列爬虫中间件,最后执行爬虫自定义的解析逻辑; 爬虫执行完自定义的解析逻辑后,生成结果对象或新的请求对象给引擎,再次经过一系列爬虫中间件; 引擎把爬虫返回的结果对象交由结果处理器处理,把新的请求通过引擎再交给调度器; 重复执行1-8,直到调度器中没有新的请求处理,任务结束;
核心模块的协作
Scrapyer
模块,其实这也是 Scrapy 的一个核心模块,但官方的架构图中没有展示出来。这个模块其实是处于 Engine
、Spiders
、Pipeline
之间,是连接这 3 个模块的桥梁,我会在后面的源码分析文章中具体讲到。核心类图
没有样式的黑色文字是类的核心属性; 标有黄色样式的高亮文字是类的核心方法;
五大核心类: Scrapy Engine
、Scheduler
、Downloader
、Spiders、Item Pipeline
四个中间件管理器类: DownloaderMiddlewareManager
、SpiderMiddlewareManager
、ItemPipelineMiddlewareManager
、ExtensionManager
其他辅助类: Request
、Response
、Selector
更多阅读
特别推荐
点击下方阅读原文加入社区会员
评论
Apache Paimon毕业,湖仓架构的未来发展趋势!
北京时间 2024 年 4 月 16日,开源软件基金会 Apache Software Foundation(以下简称 ASF)正式宣布 Apache Paimon 毕业成为 Apache 顶级项目(TLP, Top Level Project)。经过社区的共同努力和持续创新,Apache Paim
程序源代码
0
微软开源MS-DOS操作系统源码,冲到GitHub第一了!
大家好,我是轩辕。这两天逛GitHub的时候,突然发现一个叫 MS-DOS的项目冲到Trending榜首了!定睛一看,微软官方啊,搜了一下才知道,原来前两天,微软把MS-DOS 4.0系统开源了!关于这个系统,估计现在很多程序员都不知道了,或者只在古老的教科书上看过这玩意儿。MS-DOS,全称为Mi
编程技术宇宙
6
架构应该如何来理解?
来源:zhuanlan.zhihu.com/p/141027477👉 欢迎加入小哈的星球 ,你将获得: 专属的项目实战 / Java 学习路线 / 一对一提问 / 学习打卡 / 赠书福利全栈前后端分离博客项目 2.0 版本完结啦, 演示链接:htt
小哈学Java
0
AI数据中心网络架构需求:400/800G光模块
随着AI技术和相关应用的不断发展,大模型、大数据和AI计算能力在AI发展中的重要性日益凸显。大模型和数据集构成AI研究的软件基础,而AI算力是关键的基础设施。在本文中,我们将探讨AI发展对数据中心网络架构的影响。下载链接:AI数据中心网络架构需求:400/800G光模块Fat-Tree数据中心网络架
架构师技术联盟
0
springboot第70集:字节跳动后端三面经,一文让你走出微服务迷雾架构周刊
创建一个使用Kubernetes (K8s) 和 Jenkins 来自动化 GitLab 前端项目打包的CI/CD流水线,需要配置多个组件。下面,我将概述一个基本的设置步骤和示例脚本,以帮助你理解如何使用这些工具整合一个自动化流程。前提条件确保你已经有:Kubernetes 集群:用于部署 Jenk
程序源代码
0
超大规模数据中心网络架构及其技术演变
本文所讲的数据中心网络架构和技术范围是针对典型的大型互联网和云计算公司的超大规模数据中心(Hyperscale Data Center),不一定适合其他类型的数据中心网络。业界对于什么规模才算是“超大规模(Hyperscale”并没有一个精确的定义。一般来说,一个数据中心网络集群至少有 5000台服
数据中心运维管理
0
微服务与领域驱动设计,架构实践总结
来源:知了一笑👉 欢迎加入小哈的星球 ,你将获得: 专属的项目实战 / Java 学习路线 / 一对一提问 / 学习打卡 / 赠书福利全栈前后端分离博客项目 2.0 版本完结啦, 演示链接:http://116.62.199.48/ ,新
小哈学Java
0
神作《凤凰架构:构建可靠的大型分布式系统》PDF来了
今天给大家带来了一本大作:周志明老师的 《凤凰架构:构建可靠的大型分布式系统》PDF版来了,文末直接获取周志明是谁?这可是真大佬,或许有些朋友没有听过,但是你们一定听过:《深入理解 Java 虚拟机》这本神书,没错就是这本书的作者,出过多本书,豆瓣评分如下,全是高分,尤其是《深入理解Java虚拟机》
路人甲Java
0