python开源爬虫框架scrapy源码解析(四)
引擎是整个 scrapy 的核心控制和调度 scrapy 运行. Engine 的 open_spider 方法完成了一些初始化 , 以及启动调度器获取种子队列以及去重队列 . 最后调用 self._nest_request 开始一次爬取过程 . @defer.inlineCallbacks def open_spider(self, spider, start_requests=(), close_if_idle=True): assert self.has_capacity(), "No free spider slot when opening %r" % \ spider.name logger.info("Spider opened", extra={'spider': spider}) nextcall = CallLaterOnce(self._next_request, spider) #首先获取next调用。 scheduler = self.scheduler_cls.from_crawler(self.crawler) #从crawler获取调度器 start_requests = yield self.scraper.spidermw.process_start_requests(start_requests, spider) slot = Slot