python - Scrapy ERROR: Spider must return Request, BaseItem or None, got 'dict' -


i have tried reproducing scrapy tutorial using xpath , keep running error: spider must return request, baseitem or none, got 'dict' in <get http://quotes.toscrape.com/> not sure how fix this.

i'm going share snippets 2 files should enough debugging:

1) spider quotes_spider.py

from scrapy.spider import spider scrapy import request  class quotespider(spider):     name = 'quotes'     start_urls = [         'http://quotes.toscrape.com/',     ]      def parse(self, response):         quote in response.xpath('//div[@class="quote"]'):             yield {             'text': quote.xpath('.//span[@class="text"]/text()').extract(),             'author': quote.xpath('.//small[@class="author"]/text()').extract(),             'tags': quote.xpath('.//div[@class="tags"]/a[@class="tag"]/text()').extract(),             } 

2) items.py

from scrapy.item import item  class quotesbotitem(item):     text = scrapy.field()     author = scrapy.field()     tags = scrapy.field() 

fyi: in case compare tutorial , wondering why switched extract_first() extract(), it's because seeing error exceptions.attributeerror: 'selectorlist' object has no attribute 'extract_first' unrelated question believe.

you returning dictionary error says , not item

class quotespider(spider):     name = 'quotes'     start_urls = [         'http://quotes.toscrape.com/',     ]  def parse(self, response):     quote in response.xpath('//div[@class="quote"]'):         item = quotesbotitem()         item['text'] = quote.xpath('.//span[@class="text"]/text()').extract()         item['author'] = quote.xpath('.//small[@class="author"]/text()').extract()         item['tags'] = quote.xpath('.//div[@class="tags"]/a[@class="tag"]/text()').extract()         yield item 

Comments

Popular posts from this blog

android - InAppBilling registering BroadcastReceiver in AndroidManifest -

python Tkinter Capturing keyboard events save as one single string -

sql server - Why does Linq-to-SQL add unnecessary COUNT()? -