(三)Scrapy的抓取流程——CrawlerProcess

上一章提到scrapy的启动是通过ScrapyCommand对象中的crawler_process实现的,crawler_process是通过crawler.py下的CrawlerProcess类创建的实例。该文件下定义了Crawler,CrawlerProcess和CrawlerRunner三个类。

CrawlerProcess是CrawlerRunner的子类,而命令文件中的self.crawler_process实例的crawl方法就是对CrawlerRunner的crawl方法的继承。

(1)crawl(spname, **opts.spargs)
在这里插入图片描述
根据传入的spider名创建Crawler对象,然后调用_crawl方法进行整个抓取流程的运行。

Crawler对象的属性里就有Scrapy流程图中都很熟悉的spider,engine。在crawl方法中对spider和engine进行了初始化,并开启了engine的调度。
代码里可以看到defer.inlineCallbacks这个装饰器,Scrapy是基于twisted进行异步操作的,
这个装饰器的作用会让函数运行后返回一个deferred对象,deferred可以看做是管理回调函数的链表。
Crawler的crawl方法
在这里插入图片描述
CrawlerRunner的crawl方法
在这里插入图片描述

(2)start()
在这里插入图片描述
stop_after_crawl参数表示是否在在所有crawlers完成之后停止reactor,之前提到过deferred相当于一个事件的链表,而reactor则可以看做是这个链表的消费者。
join方法中通过对_active这个集合的判断为空时,才会跳出循环,CrawlerRunner的_crawl方法中_active这个属性保存了调用crawl方法返回的deferred对象,当结束后会从这个集合中删除对应的deferred对象。
然后是通过配置对reactor进行初始化,并开启reactor的运行。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值