Scrapy:从CrawlerProcess传递参数到管道

时间:2018-06-12 16:15:56

标签: scrapy

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

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

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

@classmethod
def from_crawler(cls, crawler):

但我不知道如何从那里获取freq参数。 有什么想法吗?

1 个答案:

答案 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

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