我有CrawlerProcess
启动我想要的蜘蛛,但我希望它也将参数freq
传递给管道。
process = CrawlerProcess(get_project_settings())
process.crawl(spider, freq=freq)
process.start()
我知道获取参数的方法应该是:
@classmethod
def from_crawler(cls, crawler):
但我不知道如何从那里获取freq
参数。
有什么想法吗?
答案 0 :(得分:1)
花了一些时间来弄明白,但实际上一切都在方法的Core API描述中。
这个解决方案可能不是最佳解决方案,因为我从蜘蛛中获取了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
中封装要传递给管道的变量,为它们命名,并在__init__
中将它们存储为class属性。为了能够从蜘蛛中抓取它,我必须存储它在蜘蛛中也有一个属性:
class TestSpider(scrapy.Spider):
name = "test"
def __init__(self, freq):
self.freq = freq
如果您对此解决方案有一些改进,请随时发表评论或提供更好的解决方案。我知道这不是最佳的。