Scrapy 框架结构及工作原理
1、下图为 Scrapy 框架的组成结构,并从数据流的角度揭示 Scrapy 的工作原理
2、首先、简单了解一下 Scrapy 框架中的各个组件
组 件 | 描 述 | 类 型 |
ENGINE | 引擎,框架的核心,其他所有组件在其控制下协同工作 | 内部组件 |
SCHEDULER | 调度器,负责对 SPIDER 提交的下载请求进行调度 | 内部组件 |
DOWNLOADER | 下载器,负责下载页面(发送 HTTP 请求/接收 HTP 响应) | 内部组件 |
SPIDER | 爬虫,负责提取页面中的数据,并产生对新页面的下载请求 | 外部组件 |
MIDDLEWAERE | 中间件,负责对 Request 对象和 Response 对象进行处理 | 可选组件 |
ITEM PIPELINE | 数据管道,负责对爬取到的数据进行处理 | 可选组件 |
对于用户来说,Spider 是最核心的组件,Scrapy 开发是围绕着 Spider 展开的
3、接下来,看一下框架中的数据流
对 象 | 描 述 |
REQUEST | Scrapy 中的 HTTP 请求对象 |
RESPONSE | Scrapy 中的 HTTP 响应对象 |
ITEM | 从页面中爬取的一项数据 |
Request 和 Response 是 HTTP 协议的术语,即 HTTP 请求和 HTTP 响应,Scrapy 框架中定义了相应的 Request 和 Response 类,这里的 Item 带白哦Spider 从页面中爬取的一项数据
4、最后,我们来说明一下以上几种对象在框架中的流动过程
(1)当 Spider 要爬取某 URL 地址的页面时,需要用该 URL 构造一个 Request 对象,提交给 ENGINE.
(2)Request 对象随后进入 SCHEDULER 按某种算法进行排队,之后的某个时刻 SCHEDULER 将其出队,送往 DOWNLOADER
(3)DOWNLOADER 根据Request 对象中的 URL 地址发送一次 HTTP 请求到网站服务器,之后用服务器返回的 HTTP 响应构造出一个 Response 对象,其中包含页面的 HTML 文本
(4)Response 对象最终会被递交给 SPIDER 的页面解析函数(构造 Request 对象时指定)进行处理,页面解析函数从页面中提取带数据,封装成 Item 提交给 ENGINE,
item之后被送往 ITEM PIPELINES 进行处理,最终可能由 EXPORTER 易某种数据格式写入文件(csv, json)另一方面,页面解析函数还从页面中提取链接,构造新的
Request 对象提交给 ENGINE
理解了框架中的数据流,也就理解了 Scrapy 爬虫的工作原理,如果把框架中的组件比作人体的各个器官,Request 和 Response 对象便是血液,Item 则是代谢产物
Scrapy 框架结构及工作原理的更多相关文章
- scrapy框架结构与工作原理
组件: ENGINE:引擎,框架的核心,其他组件在其控制下协同工作. SCHEDULER:调度器,负责对SPIDER提交的下载请求进行调度 DOWNLOADER:下载器,负责下载页面,发送HTTP请求 ...
- Python爬虫-Scrapy框架的工作原理
Scrapy框架工作原理 Scrapy框架架构图 Scrapy框架主要由六大组件组成,分别为: 调度器(Scheduler),下载器(Downler),爬虫(Spiders),中间件(Middwa ...
- python爬虫学习之Scrapy框架的工作原理
一.Scrapy简介 Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架. 可以应用在包括数据挖掘,信息处理或存储历史数据等一系列的程序中. 其最初是为了 页面抓取 (更确切来说, 网 ...
- python网络爬虫之scrapy 工程创建以及原理介绍
执行scrapy startproject XXXX的命令,就会在对应的目录下生成工程 在pycharm中打开此工程目录:并在Run中选择Edit Configuration 点击+创建一个Pytho ...
- 菜鸟学Struts2——Struts工作原理
在完成Struts2的HelloWorld后,对Struts2的工作原理进行学习.Struts2框架可以按照模块来划分为Servlet Filters,Struts核心模块,拦截器和用户实现部分,其中 ...
- 【夯实Nginx基础】Nginx工作原理和优化、漏洞
本文地址 原文地址 本文提纲: 1. Nginx的模块与工作原理 2. Nginx的进程模型 3 . NginxFastCGI运行原理 3.1 什么是 FastCGI ...
- HashMap的工作原理
HashMap的工作原理 HashMap的工作原理是近年来常见的Java面试题.几乎每个Java程序员都知道HashMap,都知道哪里要用HashMap,知道HashTable和HashMap之间 ...
- 【Oracle 集群】ORACLE DATABASE 11G RAC 知识图文详细教程之RAC 工作原理和相关组件(三)
RAC 工作原理和相关组件(三) 概述:写下本文档的初衷和动力,来源于上篇的<oracle基本操作手册>.oracle基本操作手册是作者研一假期对oracle基础知识学习的汇总.然后形成体 ...
- ThreadLocal 工作原理、部分源码分析
1.大概去哪里看 ThreadLocal 其根本实现方法,是在Thread里面,有一个ThreadLocal.ThreadLocalMap属性 ThreadLocal.ThreadLocalMap t ...
随机推荐
- 浅析PHP页面局部刷新功能的实现小结(转)
转载地址 https://www.jb51.net/article/38901.htm 方法其实挺多的.以前比较常用的是iframe这样来做.现在多了个ajax,所以一般情况下都是用的ajax.第一种 ...
- vue axios路由跳转取消所有请求 和 防止重复请求
直接上干货 在发送第二次请求的时候如果第一次请求还未返回,则取消第一次请求,以保证后发送的请求返回的数据不会被先发送的请求覆盖. 或者是跳转路由的时候取消还未返回的请求 第一步: axios 怎么取消 ...
- 刷题64. Minimum Path Sum
一.题目说明 题目64. Minimum Path Sum,给一个m*n矩阵,每个元素的值非负,计算从左上角到右下角的最小路径和.难度是Medium! 二.我的解答 乍一看,这个是计算最短路径的,迪杰 ...
- 安装go1.11.2
1. 设置go环境变量 vim $HOME/.bashrc export GOROOT=$HOME/go export PATH=$PATH:$GOROOT/bin export GOPATH=$HO ...
- ProtoBuf试用与JSON的比较
介绍 ProtoBuf 是google团队开发的用于高效存储和读取结构化数据的工具.什么是结构化数据呢,正如字面上表达的,就是带有一定结构的数据.比如电话簿上有很多记录数据,每条记录包含姓名.ID.邮 ...
- 【代码总结】数据库抽象层PDO
一.概述 PDO就是一个"数据库访问抽象层",起作用是统一各种数据库的访问接口,能够轻松的在不同数据库之间进行切换. 二.PDO的安装 编辑php.ini文件 添加 extensi ...
- idea 启动java项目报错 java: 程序包javax.servlet.http不存在
File -- Project Structure
- Qt连接mysql数据库遇到QMYSQL driver not loaded
本文件向各位博友分享一下我在Qt开发过程中,连接mysql数据库时遇到的问题,以及解决的方法,希望对遇到同样问题的博友有所帮助. 工程运行环境:vs2015+Qt5.8 在开发过程中,编写数据库连接函 ...
- StaticLinkList(静态链表)
写这个写了几次,然后都没写完就关掉了,所以也不想多码字了,直接上代码吧(本来还认真自制了一张图片来理解静态链表的cursor与sub之间的关系)但其实也就那么回事:通过游标来找下标通过下标找到对应的数 ...
- [运维] 如何将 Linux 上的 nginx 变成 静态资源服务器 (二)
环境 虚拟机上运行 Linux centos 7 64 已经安装 nginx-1.16.1.tar.gz 具体的安装过程可以参考 https://www.cnblogs.com/unityworld ...