scrapy详细数据流走向(个人总结)

直接从数据流的角度来说比较容易理解:
·1、Spider创建一个初识url请求,把这个请求通过Engine转给Scheduler调度模块。然后Scheduler向Engine提供一个请求(这个请求是一个真实的url请求)
疑问点一:为什么Engine把请求发给Scheduler模块,然后又从Scheduler模块里面取出来,这不是多此一举么,这个Scheduler模块有作用么?
按照我的理解,scrapy把各个组件模块化,就是为了更加方便的配置,当然你把所有模块都写在一起,功能同样可以实现,只不过这就失去了这个框架的价值了,Scheduler就是为了存取请求,而Spider就是解析出新的请求和数据item。
疑问点二:为什么说Scheduler存的是真实的url请求
Spider里面的url不一定是我们需要的url,需要经过解析,生成我们所需要的真实url,然后通过Engine发送给Scheduler
2、第一步Engine已经得到了真实的url地址,然后Engine把这个请求request发送给Downloader模块
tips:我们主要到Engine发送请求给Downloader模块前,需要进过DownloaderMiddleware中间件,实际上这里可以对请求做一些修改,也就是添加User-Agent之类的参数,如果用过requests第三方包应该容易理解
3、Downloader模块把网页下载完成后会把结果返回给Engine
tips:这个过程同样会经过DownloaderMiddleware,所以很容易理解,我们可以在这里修改response相关信息
4、Engine得到数据之后,它会把数据发送给Spider进行解析得到item(数据)或者是request(新的请求)
tips:比如我们本来要获取的是图片信息,在得到的response中发现不止有图片信息(item),还有其他的连接(新的request)
5、Spider解析得到的item和request会有两种走向
a:如果是item,也就是已经得到了数据,那么就通过Engine把item发送到Itempipeline进行处理,这里主要是进行数据的清洗、查重、保存等操作。
b:如果生成的是request,照着之前的,通过Engine把真实请求request发送给Scheduler,然后Engine从Scheduler拿request,发给给Downloader下载,Downloader下载完通过Engine发送给Spider。。如此往复,直到没有新的request请求
有时候看到网上的教程那么长会觉得难,不想去学,真正去学的时候会发现,其实也就那样。好了,关于scrapy的数据流就到这。
scrapy详细数据流走向(个人总结)的更多相关文章
- scrapy抓取拉勾网职位信息(三)——爬虫rules内容编写
在上篇中,分析了拉勾网需要跟进的页面url,本篇开始进行代码编写. 在编写代码前,需要对scrapy的数据流走向有一个大致的认识,如果不是很清楚的话建议先看下:scrapy数据流 本篇目标:让拉勾网爬 ...
- 97、爬虫框架scrapy
本篇导航: 介绍与安装 命令行工具 项目结构以及爬虫应用简介 Spiders 其它介绍 爬取亚马逊商品信息 一.介绍与安装 Scrapy一个开源和协作的框架,其最初是为了页面抓取 (更确切来说, ...
- 爬虫框架之Scrapy
一.介绍 二.安装 三.命令行工具 四.项目结构以及爬虫应用简介 五.Spiders 六.Selectors 七.Items 八.Item Pipelin 九. Dowloader Middeware ...
- Scrapy学习篇(一)之框架
概览 在具体的学习scrapy之前,我们先对scrapy的架构做一个简单的了解,之后所有的内容都是基于此架构实现的,在初学阶段只需要简单的了解即可,之后的学习中,你会对此架构有更深的理解.下面是scr ...
- 爬虫 之 scrapy框架
浏览目录 介绍 安装 项目结构及爬虫应用简介 常用命令行工具 Spiders爬虫 Selectors选择器 Item Pipeline 项目管道 Downloader Middleware下载中间件 ...
- 爬虫框架scrapy的基本内容
Scrapy介绍 Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架. 可以帮助用户简单快速的部署一个专业的网络爬虫.如果说前面我们写的定制bs4爬虫是”手动挡“,那Scrapy就相当 ...
- 爬虫之scrapy工作流程
Scrapy是什么? scrapy 是一个为了爬取网站数据,提取结构性数据而编写的应用框架,我们只需要实现少量代码,就能够快速的抓取到数据内容.Scrapy 使用了 Twisted['twɪstɪd] ...
- 九、爬虫框架之Scrapy
爬虫框架之Scrapy 一.介绍 二.安装 三.命令行工具 四.项目结构以及爬虫应用简介 五.Spiders 六.Selectors 七.Items 八.Item Pipelin 九. Dowload ...
- 第六篇:Scrapy框架
爬虫框架之Scrapy 一.介绍 二.安装 三.命令行工具 四.项目结构以及爬虫应用简介 五.Spiders 六.Selectors 七.Items 八.Item Pipelin 九. Dowload ...
随机推荐
- JS格式化时间(支持小程序,兼容IOS)
})-(\d{})-(\d{})T(\d{}):(\d{}):(\d{})/ /** * @function format time * @param val, format * @return {s ...
- MySQL使用笔记(七)排序和限制数据记录查询
By francis_hao Dec 17,2016 排序数据记录查询 排序是指将筛选出符合条件的数据进行有序排放,有升序(ASC(默认))方式和降序(DESC)方式. mysql> se ...
- 用实例工厂的方法实例化bean
在实例化bean时,除了setter,constructor方法外,还有实例工厂方法,和静态工厂方法. 看代码: People类的代码如下: package com.timo.domain; publ ...
- 7月21号day13总结
今天学习过程和小结 学习了hive中的数据类型以及hive的简单查询, 学习了sqoop version用sqoop导入导出数据. 主要用于在Hadoop(Hive)与传统的数据库(mysql.pos ...
- PHP 抽象类,接口,抽象方法,静态方法
1.Abstract class(抽象类) 抽象类是指在 class 前加了 abstract 关键字且存在抽象方法(在类方法 function 关键字前加了 abstract 关键字)的类. 抽象类 ...
- eclipse配置文件内存设置
1.-Xms64m -Xmx128m 2.配置文件的修改 http://wenku.baidu.com/link?url=spM-qCe0qHdhiykzwuzp-vBtcQrVtAzYiWe8uex ...
- java中的构造块、静态块等说明
一:这篇博客写的时候我在学校已经一个星期了,为什么又会想到写这le,因为这几天又在重新学下有关spring.myBatis的知识,其中在实例化sessionFactory的时候用到了静态块,虽然在学习 ...
- Html 让文字显示在图片的上面
如题: 第一种方式便是将 image 作为背景图片,即:background-image:url("......."); 在此可以控制背景图片的横向和纵向的平铺: backgrou ...
- 【转载】字符串最小表示法-O(n)算法
原博客链接:http://blog.csdn.net/zy691357966/article/details/39854359 未授权,侵权删. 因为这篇博客写得真好..转载了.. 红色的字是原博主写 ...
- 【洛谷 P3834】 可持久化线段树1(主席树)
题目链接 主席树=可持久化权值线段树. 如果你不会可持久化线段树,请右转 如果你不会权值线段树,请自行脑补,就是线段树维护值域里有多少个数出现. 可持久化线段树是支持查询历史版本的. 我们对每个数都进 ...