Scrapy:将参数从CrawlerProcess传递到管道

Scrapy:将参数从CrawlerProcess传递到管道,scrapy,Scrapy,我有一个CrawlerProcess启动我想要的爬行器,但我希望它也将参数freq传递到管道 process = CrawlerProcess(get_project_settings()) process.crawl(spider, freq=freq) process.start() 我知道获取参数的方法应该是使用: @classmethod def from_crawler(cls, crawler): 但是我不知道如何从那里得到freq参数。 有什么想法吗?我花了一些时间才弄明白,但

我有一个
CrawlerProcess
启动我想要的爬行器,但我希望它也将参数
freq
传递到管道

process = CrawlerProcess(get_project_settings())
process.crawl(spider, freq=freq)
process.start()
我知道获取参数的方法应该是使用:

@classmethod
def from_crawler(cls, crawler):
但是我不知道如何从那里得到
freq
参数。
有什么想法吗?

我花了一些时间才弄明白,但实际上一切都在方法的描述中

这个解决方案可能不是最佳方案,因为我从spider获得了freq参数,但是如果有人有更好的解决方案,那么可以直接从爬虫程序中获取它

因此,管道看起来像:

class Pipeline(object):

    def __init__(self, freq):
        self.freq = freq

    @classmethod
    def from_crawler(cls, crawler):
        return cls(freq=crawler.spider.data_test)

    def open_spider(self, spider):
        return

    def process_item(self, item, spider):
        print("Freq:{}\n".format(self.freq))

    def close_spider(self, spider):
        return
您需要做的是将要传递给管道的变量封装在
cls
中,给它们一个名称,然后在
\uuuuu init\uuuuu
中将它们存储为class属性。为了能够从spider中抓取它,我必须将它存储在spider中,它还具有一个属性:

class TestSpider(scrapy.Spider):
    name = "test"

    def __init__(self, freq):
        self.freq = freq

如果您对此解决方案有一些改进,请随时发表评论或提供更好的解决方案。我知道这不是最佳解决方案。

我使用了相同的解决方案,如果您觉得满意,请随时拨打+1:)当然,我想让您知道,如果您有任何疑问,这实际上是一个可以接受的解决方案。谢谢。然而,我仍然对以下原因感到怀疑:我必须将paramater
freq
一直传递到spider,然后才能从管道中获取它。因此,在我的设计中,蜘蛛将不得不存储它,即使它可能不需要它。