Python __在添加统计信息时,init_u;()缺少1个必需的位置参数

Python __在添加统计信息时,init_u;()缺少1个必需的位置参数,python,python-3.x,scrapy,scrapy-pipeline,Python,Python 3.x,Scrapy,Scrapy Pipeline,我正试图从这些数据中获得开始时间 在scrapy doc他们会这样说 好的,正如他们所做的,我在init中捕捉统计数据,但是我得到一个错误,好像我没有传递stats参数。我不想让它像一场争论。这是我的密码 管道.py class MongoDBPipeline(object): def __init__(self, stats): self.timeStarted = stats.get_value('start_time') def process_item

我正试图从这些数据中获得开始时间

在scrapy doc他们会这样说

好的,正如他们所做的,我在init中捕捉统计数据,但是我得到一个错误,好像我没有传递stats参数。我不想让它像一场争论。这是我的密码

管道.py

class MongoDBPipeline(object):

    def __init__(self, stats):
        self.timeStarted = stats.get_value('start_time')

    def process_item(self, item, spider):
        valid = True
        for data in item:
            if not data:
                valid = False
                raise DropItem("Missing {0}!".format(data))
            if valid:
                item['createdAt'] = self.timeStarted

                self.collection.insert(dict(item))
                logging.info("Video cargado.")
            return item

我得到的错误是:

TypeError: __init__() missing 1 required positional argument: 'stats'
我不知道该怎么办。 谢谢

你忘了

@classmethod
def from_crawler(cls, crawler):
    return cls(crawler.stats)
它使用参数crawler.stats运行uuu init_uuuu

请参阅链接和中的示例。 两者都有来自爬虫的类方法

scrapy使用

MongoDBPipeline.from_crawler(crawler)
而原始的from_crawler在没有参数的情况下运行_init__self-所以你的新的_init__self,stats无法获取stats,它显示错误。但是如果你从运行crawler.stats的crawler.stats添加own,那么stats会得到它

编辑:显示它的最小示例

它工作正常,但如果您从_crawler中删除,则会给出错误

您可以将所有代码复制到一个文件中,并作为python script.py运行,而无需使用来自_crawler的scrapy和scrapy getspider来创建项目

import scrapy

class MySpider(scrapy.Spider):

    name = 'myspider'

    start_urls = ['http://books.toscrape.com/'] #'http://quotes.toscrape.com']

    def parse(self, response):
        print('url:', response.url)


class MyPipeline(object):

    def __init__(self, stats):
        print('__init__ stats:', stats)
        self.stats = stats

    @classmethod
    def from_crawler(cls, crawler):
        print('from_crawler stats:', crawler.stats)
        return cls(crawler.stats)

# ---

from scrapy.crawler import CrawlerProcess

c = CrawlerProcess({
    'ITEM_PIPELINES': {'__main__.MyPipeline': 1}, # used Pipeline created in current file (needs __main___)
})
c.crawl(MySpider)
c.start()

请附上一份。你能发布你收到的完整错误吗?你能展示一个完整类定义的最小示例以及你是如何使用它的吗?你是先做一个实例吗?嗨,我加上了我得到的错误。管道运行良好,但我无法获得统计数据@LeoE这两个DEF是我在这条管道中唯一的DEF。我还应该添加什么?如果没有看到产生错误的代码,您得到的错误就没有真正的帮助。代码中的某个地方正在使用您的类。这就是它被错误使用的地方。当发布有关产生异常的代码的问题时,请始终包含完整的回溯-复制并粘贴它,然后将其格式化为代码选择它并键入ctrl-k。回溯将向您和我们显示错误发生的位置,从而更容易跟踪问题。也许我会在suiteThanks@furas中检查/打印相关数据,今晚我会试试。让我问你一件事。我的问题写得或解释得那么糟糕吗?我的意思是,他们问我在哪里使用了这个方法,我没有明确地调用它,因为它很粗糙。。。Idk的人,这感觉很糟糕。不是所有的人都知道scrapy,但有时我们可以解决问题,即使我们以前使用过一些模块。从单词Traceback开始的完整错误消息可以提供错误发生的位置的更多信息。示例代码可以帮助运行它并测试不同的想法。为了解决这个问题,我必须首先创建示例代码,我可以运行这些代码,并查看完整的错误和测试想法。这是正确的。我没有使用from_crawler,因为我认为我不需要它,但ofc是因为我不完全理解scrapy中的流程。这真是说教,再次感谢@furas。