首页 > 编程语言 >Scrapy源码阅读分析_1_整体框架和流程介绍

Scrapy源码阅读分析_1_整体框架和流程介绍

时间:2022-12-20 17:01:46浏览次数:67  
标签:引擎 请求 流程 Scrapy 爬虫 scrapy 源码 下载

 


Scrapy github 下载地址:​​https://github.com/scrapy/scrapy​

 

 

介绍

 

Scrapy是一个基于Python编写的一个开源爬虫框架,它可以帮你快速、简单的方式构建爬虫,并从网站上提取你所需要的数据。

这里不再介绍Scrapy的安装和使用,本系列主要通过阅读源码讲解Scrapy实现思路为主。

如果有不懂如何使用的同学,请参考官方网站或官方文档学习。

------------------------------------------------------------------------------------------
scrapy 中文文档 和 scrapy 英文文档参照看。因为中文文档比较老,英文文档是最新的。
scrapy 英文文档:​​​https://doc.scrapy.org/en/latest​​​ scrapy 中文文档:​​http://scrapy-chs.readthedocs.io/zh_CN/1.0/intro/overview.html​​ 高性能爬虫 Scrapy 框

简单来说构建和运行一个爬虫只需完成以下几步:

  1. 使用 scrapy startproject spider_project
  2. 爬虫类 继承 scrapy.Spider,重写 parse 方法
  3. parse 方法中 yield 或 return 字典、Request、Item
  4. 使用 scrapy crawl <spider_name>scrapy runspider <spider_file.py>运行

经过简单的几行代码,就能采集到某个网站下一些页面的数据,非常方便。

但是在这背后到底发生了什么?Scrapy到底是如何帮助我们工作的呢?

 

 

 

架构

 

来看一看 Scrapy 的架构图:

Scrapy源码阅读分析_1_整体框架和流程介绍_数据

 

 

 

核心组件

 

Scrapy有以下几大组件:

  1. Scrapy Engine:核心引擎,负责控制和调度各个组件,保证数据流转;
  2. Scheduler:负责管理任务、过滤任务、输出任务的调度器,存储、去重任务都在此控制;
  3. Downloader:下载器,负责在网络上下载网页数据,输入待下载URL,输出下载结果;
  4. Spiders:用户自己编写的爬虫脚本,可自定义抓取意图;
  5. Item Pipeline:负责输出结构化数据,可自定义输出位置;

除此之外,还有两大中间件组件:

  1. Downloader middlewares:介于引擎和下载器之间,可以在网页在下载前、后进行逻辑处理;
  2. Spider middlewares:介于引擎和爬虫之间,可以在调用爬虫输入下载结果和输出请求/数据时进行逻辑处理;

 

 

 

数据流转

 

按照架构图的序号,数据流转大概是这样的:

  1. 引擎从自定义爬虫中获取初始化请求(也叫种子URL);
  2. 引擎把该请求放入调度器中,同时引擎向调度器获取一个待下载的请求(这两部是异步执行的);
  3. 调度器返回给引擎一个待下载的请求;
  4. 引擎发送请求给下载器,中间会经过一系列下载器中间件;
  5. 这个请求通过下载器下载完成后,生成一个响应对象,返回给引擎,这中间会再次经过一系列下载器中间件;
  6. 引擎接收到下载返回的响应对象后,然后发送给爬虫,执行自定义爬虫逻辑,中间会经过一系列爬虫中间件;
  7. 爬虫执行对应的回调方法,处理这个响应,完成用户逻辑后,会生成结果对象或新的请求对象给引擎,再次经过一系列爬虫中间件;
  8. 引擎把爬虫返回的结果对象交由结果处理器处理,把新的请求对象通过引擎再交给调度器;
  9. 从1开始重复执行,直到调度器中没有新的请求处理;

 

 

 

核心组件交互图

 

我在读完源码后,整理出一个更详细的架构图,其中展示了更多相关组件的细节:

Scrapy源码阅读分析_1_整体框架和流程介绍_中间件_02

这里需要说明一下图中的​​Scrapyer​​​,其实这也是在源码的一个核心类,但官方架构图中没有展示出来,这个类其实是处于​​Engine​​​、​​Spiders​​​、​​Pipeline​​之间,是连通这3个组件的桥梁,后面在文章中会具体讲解。

 

 

 

核心类图

 

涉及到的一些核心类如下:

Scrapy源码阅读分析_1_整体框架和流程介绍_ide_03

其中标没有样式的黑色文字是类的核心属性黄色样式的文字都是核心方法

可以看到,Scrapy的核心类,其实主要包含5大组件、4大中间件管理器、爬虫类和爬虫管理器、请求、响应对象和数据解析类这几大块。

 

 

 

标签:引擎,请求,流程,Scrapy,爬虫,scrapy,源码,下载
From: https://blog.51cto.com/csnd/5956136

相关文章

  • django基本流程
    创建项目django-adminstartprojectwebcdwebpythonmanage.pystartappweblist生成迁移文件pythonmanage.pymakemigrations生成迁移数据pythonmanage.py......
  • 微服务11:熔断、降级的Hystrix实现(附源码)
    微服务1:微服务及其演进史微服务2:微服务全景架构微服务3:微服务拆分策略微服务4:服务注册与发现微服务5:服务注册与发现(实践篇)微服务6:通信之网关微服务7:通信之RPC微服务......
  • 分布式 | 从 dble 日志分析到 MySQL 源码学习
    作者:袁琳铸爱可生DBLE团队开发成员,主要负责DBLE需求开发,故障排查和社区问题解答。背景在客户的生产环境中,dble.log时常出现nohandler日志。虽然没有影响客户业务的......
  • YOLO系列,【YOLOV5-5.x 源码解读】loss.py
    转载:https://blog.csdn.net/qq_38253797/article/details/119444854建议前往原文阅读,非常精彩,这里仅当学习记录目录前言0、导入需要的包1、smooth_BCE2、BCEBlurWithLogi......
  • 注入html源码到浏览器的几种方式
    1、通过各浏览器提供的接口调用IE的COM接口,FF的插件、Chrome的API接口等;类似的实现有Selenium的webdriver支持的各种driver,它们都是调用了浏览器的原始接口。2、通过已......
  • 直播网站程序源码,FlowLayoutManager 流式布局
    直播网站程序源码,FlowLayoutManager流式布局 importandroid.graphics.Rectimportandroid.util.Logimportandroid.util.SparseArrayimportandroid.view.Viewimport......
  • 在线直播系统源码,循环滚动RecyclerView的实现
    在线直播系统源码,循环滚动RecyclerView的实现 publicclassAutoRecyclerViewextendsRecyclerView{  privatestaticfinallongTIME_AUTO_POLL=16; private......
  • 直播小程序源码,配置tabbar底部导航栏
    直播小程序源码,配置tabbar底部导航栏 //配置tabbar导航栏"tabBar":{"borderStyle":"black","selectedColor":"#FB7299","color":"#444444","list":[{"pagePath":......
  • Dubbo架构设计与源码解析(一) 架构设计
    作者:黄金一、架构演变单应用架构---->垂直架构---->分布式架构---->微服务架构---->云原生架构二、Dubbo总体架构1、角色职能•Container:服务容器(to......
  • 【python】mac+appium+python的环境配置完整流程
    一、概述(如果电脑已有可以跳过):1、安装JavaJDK2、安装Homebrew3、安装Python34、安装Git5、安装AdroidSDK(要测试ios,还需要安装Xcode)6、安装Node.js7、安装AppiumSe......