python - Scrapy错误: Spider must return Request, BaseItem或无,得到 'dict'

标签 python xpath scrapy

我尝试使用 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() ,这是因为我看到另一个错误 exceptions.AttributeError: 'SelectorList' object has no attribute 'extract_first'我相信这与这个问题无关。

最佳答案

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

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

关于python - Scrapy错误: Spider must return Request, BaseItem或无,得到 'dict',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45690259/

相关文章:

python - 碎片 : create folder structure out of downloaded images based on the url from which images are being downloaded

python - PyMinuit 与 IMinuit

html - 包含具有特定文本的另一个元素的元素的 XPath?

java - 如何获取包含 "edit"链接的下拉按钮的 xpath?

java - 从 SOAP header 中提取术语

scrapy - scrapy CONCURRENT_REQUESTS 是每个蜘蛛还是每台机器?

python - 使用scrapy创建一个简单的python爬虫

python - 如何从按 groupby 排列的组中创建数据框?

Python:系统找不到使用subprocess.Popen指定的文件

python - 如何在 Scrapy 中创建带方括号的 url 请求?