diff --git a/scrapy/core/scraper.py b/scrapy/core/scraper.py index f9bc8e4f2..ffae1a47a 100644 --- a/scrapy/core/scraper.py +++ b/scrapy/core/scraper.py @@ -128,7 +128,13 @@ class Scraper(object): def call_spider(self, result, request, spider): defer_result(result).chainDeferred(request.deferred) - return request.deferred.addCallback(arg_to_iter) + return request.deferred.addCallback(self._iterable_spider_output) + + def _iterable_spider_output(self, result): + if isinstance(result, (BaseItem, Request)): + return [result] + else: + return arg_to_iter(result) def handle_spider_error(self, _failure, request, spider, propagated_failure=None): referer = request.headers.get('Referer', None) diff --git a/scrapy/tests/test_spiders/testspider.py b/scrapy/tests/test_spiders/testspider.py index dda7d55e5..22384dea1 100644 --- a/scrapy/tests/test_spiders/testspider.py +++ b/scrapy/tests/test_spiders/testspider.py @@ -40,7 +40,7 @@ class TestSpider(BaseSpider): m = self.price_re.search(response.body) if m: item['price'] = m.group(1) - return [item] + return item SPIDER = TestSpider()