Scrapy ERROR:蜘蛛必须返回Request,BaseItem或None,得到了'dict'

时间:2017-08-15 09:35:46

标签: python xpath scrapy scrapy-spider

我尝试使用Xpath重现Scrapy教程并继续运行ERROR: Spider must return Request, BaseItem or None, got 'dict' in <GET http://quotes.toscrape.com/>不确定如何解决这个问题。

我要从两个文件中共享片段,这些文件应该足以进行调试:

1)我的蜘蛛quotes_spider.py

from scrapy.spider import Spider
from scrapy import Request

class QuoteSpider(Spider):
    name = 'quotes'
    start_urls = [
        'http://quotes.toscrape.com/',
    ]

    def parse(self, response):
        for 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()

仅供参考:如果您将其与tutorial进行比较,并想知道我将extract_first()切换为extract()的原因,那是因为我看到了另一个错误{{1我认为这与这个问题无关。

1 个答案:

答案 0 :(得分:2)

您正在返回错误所说的字典,而不是项目

class QuoteSpider(Spider):
    name = 'quotes'
    start_urls = [
        'http://quotes.toscrape.com/',
    ]

def parse(self, response):
    for 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