首页 > 解决方案 > Scrapy:将参数从 CrawlerProcess 传递给管道

问题描述

我有一个CrawlerProcess启动我想要的蜘蛛,但我希望它也将参数传递freq给管道。

process = CrawlerProcess(get_project_settings())
process.crawl(spider, freq=freq)
process.start()

我知道获取参数的方法应该是使用:

@classmethod
def from_crawler(cls, crawler):

但我不知道如何freq从那里获取参数。任何的想法 ?

标签: scrapy

解决方案


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

该解决方案可能不是最佳解决方案,因为我从蜘蛛获得了频率参数,但如果有人有更好的解决方案,则可以直接从爬虫中获取它。

所以管道看起来像:

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 TestSpider(scrapy.Spider):
    name = "test"

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

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


推荐阅读