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,然后才能从管道中获取它。因此,在我的设计中,蜘蛛将不得不存储它,即使它可能不需要它。