diff --git a/scrapy/shell.py b/scrapy/shell.py index 258c03ba6..3def28290 100644 --- a/scrapy/shell.py +++ b/scrapy/shell.py @@ -29,6 +29,7 @@ class Shell(object): self.crawler = crawler self.update_vars = update_vars or (lambda x: None) self.item_class = load_object(crawler.settings['DEFAULT_ITEM_CLASS']) + self.spider = None self.inthread = inthread self.code = code self.vars = {} @@ -57,15 +58,22 @@ class Shell(object): start_python_console(self.vars) def _schedule(self, request, spider): + spider = self._open_spider(request, spider) + d = request_deferred(request) + d.addCallback(lambda x: (x, spider)) + self.crawler.engine.crawl(request, spider) + return d + + def _open_spider(self, request, spider): + if self.spider: + return self.spider if spider is None: spider = create_spider_for_request(self.crawler.spiders, request, \ BaseSpider('default'), log_multiple=True) spider.set_crawler(self.crawler) self.crawler.engine.open_spider(spider, close_if_idle=False) - d = request_deferred(request) - d.addCallback(lambda x: (x, spider)) - self.crawler.engine.crawl(request, spider) - return d + self.spider = spider + return spider def fetch(self, request_or_url, spider=None): if isinstance(request_or_url, Request):