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 ...
随机推荐
- Go_排序
package main import ( "fmt" "sort" "math/rand" ) //1.声明Hero结构体 type He ...
- Mac 配置 React Native 环境
OSX系统,这里假定你是iOS开发人员 Homebrew 是需要的,只有安装了Homebrew才能继续安装watchman和flow 安装 Node.js 4.0 或者更新的版本. 使用 Homebr ...
- 基于MHA的MYSQL高可用方案
一.MHA 简介 MHA (Master High Availability )目前在 MySQL 高可用方面是一个相对成熟的解决方案,它由日本 DeNA 公司的 youshimaton 员工(现就职 ...
- 第八届极客大挑战 Web-故道白云&Clound的错误
web-故道白云 题目: 解题思路: 0x01 首先看到题目说html里有秘密,就看了下源代码如图, 重点在红圈那里,表示输入的变量是id,当然上一行的method=“get”同时说明是get方式获取 ...
- 三分钟让你秒懂.Net生态系统
提到.Net的时候,大多数人的第一反应可能就是.Net Framework和Visual Studio..Net Framework的第一个版本发布与2002年2月13日,这对于科技发展日新月异的时代 ...
- 【JS 移动端】获取设置页面大小
获取设置页面大小 function getMobileData() { var ismobile = false; browser = { versions: function () { var u ...
- apache、mysql、php核心、phpmyadmin的安装及相互关联
1.apache的安装 https://blog.csdn.net/ashendove/article/details/52206198 里面的serverName 就是你在服务中 设置的apach ...
- 秋招落幕,对自己的总结by2018-10-20
在今天阿里沟通offer完毕,正式三方也确定了,一切如梦,想想1月的自己还担心未来的自己会花落谁家,到10月的今天,一切尘埃落地.一直不怎么喜欢总结自己的历程,今天无聊的我也总结一波吧. 准确的说没有 ...
- 解决 Anaconda 3.7更新出现CondaHTTPError与SSLError
1.问题描述: An HTTP error occurred when trying to retrieve this URL. HTTP errors are often intermittent, ...
- spring security几大核心组件
一.SecurityContext 安全上下文,用户通过Spring Security 的校验之后,验证信息存储在SecurityContext中 SecurityContext接口只定义了两个方法, ...