Scrapy框架流程图详解

(一)、Scrapy框架介绍:

我们写一个爬虫,需要做很多事情,比如:发送网络请求、数据解析、数据存储、反爬虫、反反爬虫(更换ip代理、设置请求头等)、异步请求等。这些事情在我们每一次写爬虫代码的时候都要自己从零开始写的话,比较浪费时间。因此 Scrapy 把一些基础的东西封装好了,在它上面写爬虫可以变的更加高效。

(二)、Scrapy架构图及各个组件:

流程图(1):

在这里插入图片描述
流程图(2):在这里插入图片描述
Scrapy框架主要由六大组件组成,它们分别是调试器(Scheduler)、下载器(Downloader)、爬虫(Spider)、中间件(Middleware)、实体管道(Item Pipeline)和Scrapy引擎(Scrapy Engine)。

2.1 Scrapy Engine(引擎):Scrapy引擎是整个框架的核心。它用来控制调试器、下载器、爬虫。它就相当于计算机中的CPU,控制着整个流程。
2.2 Spider(爬虫):发送需要爬取的链接给引擎,最后引擎再把其他模块中请求回来的数据再发送给爬虫,爬虫就会去解析想要的数据。爬取链接以及解析页面中的数据都是由自己来写的。
2.3 Scheduler(调度器):它负责引擎发过来的请求,按照一定的方式进行排序和整理,负责调度请求的顺序等。
2.4 Downloader(下载器):它负责引擎发过来的下载请求,然后去网络上下载对应的数据后,再把这个数据交还给引擎。
2.5 Item Pipeline(实体管道):负责将Spider(爬虫)传递过来的数据进行保存。具体保存在哪里应该看我们自己的需要。
2.6 Middleware(中间件):负责对Request对象和Response对象进行处理(见流程图一)

中间件又分为两部分:

1.Downloader Middlewares(下载中间件):它是拓展下载器和引擎之间的通信功能的中间件。比如说,在下载器执行之前可以在中间件进行一些操作:设置一些代理ip、设置一些请求头等。
2.Spider Middlewares(爬虫中间件):它是拓展爬虫和引擎之间的通信功能的中间件。同样的它也可以做一些操作。

(三)、Scrapy流程

1: 首先 先从Spider发送一个请求,初始化了一个Resquest对象,并且设置了回调函数(也就是创建Scrapy项目后的def parse(self, response)),把请求传给引擎。
2: 引擎收到请求后,并不会把请求马上发送出去,而是传给了调度器。调度器接受到引擎发过来的Requser请求后,把Request对象按照一定的排序算法存储到它里面的一个队列当中。
3: 接下来引擎会不断的从调度器当中取出已经处理好的Request
4: 当引擎拿到Request后,再把这个请求扔给下载器。
5: 下载器拿到请求后,按照下载中间件中的设置去互联网上面下载request请求。下载好数据后再把数据传送给引擎。
6: 引擎拿到数据之后,再把这个数据(也就是response)通过爬虫中间件返回给Spider。并把response作为参数传递给第一步设置好的回调函数。
7: 爬虫拿到数据之后(这个爬虫是由我们自己写),经过分析,把不需要的数据剔除掉,把需要的数据提取出来(使用xpath、BeautifulSoup、正则)。接下来再把提取出来的数据扔给引擎。
8: 引擎拿到数据之后,把这个数据扔给实体管道(如果这时还有其他的Requset,会重复3-8这个过程,直到获取完所有的自己想要的信息)。管道中的代码也是由我们自己来写,该怎么存储,存储到哪里去等。

以上步骤做完后,就实现了爬虫。

下面是从其他博主那里看到的一个算是小故事吧,觉得很形象的把整个流程给描述了出来。

1.引擎:Hi!Spider, 你要处理哪一个网站?

2.Spider:老大要我处理xxxx.com。

3.引擎:你把第一个需要处理的URL给我吧。

4.Spider:给你,第一个URL是xxxxxxx.com。

5.引擎:Hi!调度器,我这有request请求你帮我排序入队一下。

6.调度器:好的,正在处理你等一下。

7.引擎:Hi!调度器,把你处理好的request请求给我。

8.调度器:给你,这是我处理好的request

9.引擎:Hi!下载器,你按照老大的下载中间件的设置帮我下载一下这个request请求

10.下载器:好的!给你,这是下载好的东西。(如果失败:sorry,这个request下载失败了。然后引擎告诉调度器,这个request下载失败了,你记录一下,我们待会儿再下载)

11.引擎:Hi!Spider,这是下载好的东西,并且已经按照老大的下载中间件处理过了,你自己处理一下(注意!这儿responses默认是交给def
parse()这个函数处理的)

12.Spider:(处理完毕数据之后对于需要跟进的URL),Hi!引擎,我这里有两个结果,这个是我需要跟进的URL,还有这个是我获取到的Item数据。

13.引擎:Hi !管道 我这儿有个item你帮我处理一下!调度器!这是需要跟进URL你帮我处理下。然后从第四步开始循环,直到获取完老大需要全部信息。
14.管道“调度器:好的,现在就做!

自己刚学Scrapy不久,便乘热打铁巩固一下并加上自己的一些理解,有不足之处请各位大佬帮忙斧正。

  • 5
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值