scrapy入门教程(三)scrapy相关组件

前面两步的准备工作完成之后,我们先不要着急开始工作,毕竟作为一个框架,还是很复杂的;贸然上手 开整,很容易陷入懵逼状态啊!一团浆糊,理不清思路,后面的事情做起来很很麻烦啦!

我们来看看下面这张图:

在这里插入图片描述
这是scrapy官方文档1.5.1(此网站最好fp查看)提供的架构图。

(1)引擎(Engine)
引擎负责控制数据流在系统所有组件中流动,并在相应动作发生时触发事件。你可以理解为我们人的身体。
(2)调度器(Scheduler)
调度器从引擎接受request并将他们入队,以便之后引擎请求他们时提供给引擎。
(3)下载器(Downloader)
下载器负责获取页面数据并提供给引擎,而后提供给spider。
(4)爬虫(Spider)
Spider是Scrapy用户编写用于分析response并提取item(即获取到的item)或额外跟进的URL的类。
(5)Item Pipelines
Item Pipelines负责处理被spider提取出来的item。比如去重,持久化存储(存数据库,写入文件,总之就是保存数据用的)。
(6)下载器中间件(Downloader middlewares)
下载器中间件是在引擎及下载器之间的特定钩子(specific hook),处理Downloader传递给引擎的response。你可以当作是一个可以自定义扩展下载功能的组件。
(7)Spider中间件(Spider middlewares)
Spider中间件是在引擎及Spider之间的特定钩子(specific hook),处理spider的输入(response)和输出(items及requests)。你可以理解为是一个可以自定扩展和操作引擎和Spiders中间‘通信‘的功能组件(比如进入Spiders的Responses;和从Spiders出去的Requests)。

scrapy整个数据流程

1、引擎打开一个网站,找到处理该网站的spider,并向spider请求第一个要爬取的url。
2、引擎从spider获取到url后将其传递给调度器进行调度。
3、调度器向引擎返回下一个要爬取的url。
4、引擎获得url后,通过下载器中间件向下载器发送request请求。
5、一旦页面下载完成,下载器通过下载器中间件返回一个该页面的response对象给引擎。
6、引擎收到response对象后通过spider中间件将其传递给spider进行处理。
7、spider对接收到的response对象进行处理,并通过spider中间件返回给引擎item和新的request请求。
8、引擎将接收到的item交给item pipeline进行处理,将request传递给调度器进行调度。
9、重复以上步骤,直到调度器中没有request请求(对于下载失败的url,Scrapy会重新进行请求),引擎关闭该网站。

是不是太过官方化,晦涩难懂。没关系,我们用大白话来讲解一下。

在这里插入图片描述

程序在运行的时候。scrapy的整个数据流向是这样的:

引擎:hi,spider,你要处理哪个网站?ヾ(✿゚▽゚)ノ
spider:唔…我要处理ooxx.com(❁´ω`❁)
引擎:(๑‾ ꇴ ‾๑)好哒,你把你第一个需要的处理的url告诉我吧,么么哒(づ ̄ 3 ̄)づ。
Spiders:嗯呐…给你第一个url,它是ooxxox.com✧(≖ ◡ ≖✿
引擎:收到٩( ‘ω’ )و get!
引擎:hello!调度器哥哥,我这有个request你帮人家排序入队一下啦(/ω\)…害羞(✿◡‿◡)。
调度器:好的,正在处理,你等一下。
引擎:谢谢调度器哥哥(╹▽╹),等你处理好了,记得把你处理好的request传给人家哦(✺ω✺)。
调度器:没问题(大手一挥),给你,这是我处理好的request,拿去吧。
引擎:下载器,你好呀(*´▽`)ノノ,能按照下载器中间件的设置帮我处理这个request吗Ծ‸Ծ拜托啦!
下载器:当然可以啦…!给你,这是下载好的东西(´▽`)ノノ(如果失败,下载器告诉引擎:不好意思啦亲,这个request下载失败了(弱小委屈可怜无助…(。﹏。)对不起),然后引擎告诉调度器,调度器哥哥,这个request下载失败了,你记录一下啦,我们一会儿再下载。乖乖( ,´•ω•)ノ"(´っω•`。))
引擎:Spider,你好呀,又见面了,这是下载好的东西,并且已经按照Spider中间件处理过了,你再处理一下。期待中…*❦ω❦(注意!这儿responses默认是交给def parse这个函数处理的)
Spiders:呐,引擎,这是我需要跟进的url,还有这是我获取到的Item٩(๑>◡<๑)۶
引擎:❥(ゝω・✿ฺ)Item Pipeline,在吗?我这儿有个item你帮人家处理一下啦…(づ ̄3 ̄)づ╭❤~
引擎:调度器哥哥!这是我需要的url你帮人家处理下嘛,好不好…✺◟(∗❛ัᴗ❛ั∗)◞✺。
然后一直循环,直到调度器哥哥不再被你萌化,再给你request了,整个程序才会停止,(也就是说,对于下载失败的url,会重新调度哦。)

以上就是Scrapy整个流程了,大家将就着看看。
在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值