首页 > 解决方案 > 如何传递多个 kwargs

问题描述

我是 python(scrapy 框架)的新手,并试图实现以下要求:

scrapy crawl ispider01 -a "urls=http://www.example1.com, http://www.example2.com" -a "keywords = email, contactus"

对于“urls”部分,我可以通过以下方式实现:

def __init__(self, *args, **kwargs):
    urls = kwargs.pop('urls', []) 
    if urls:
        self.start_urls = urls.split(',')
    #self.logger.info(self.start_urls)
    super(QuotesSpider, self).__init__(*args, **kwargs)

但是为了实现关键字,我该怎么办?

在函数调用中阅读了多个 kwargs?我们可以在一个函数中传递多个 **kwargs。但是当我运行蜘蛛时,它给我添加第二个 **kwargs01 的语法错误。

感谢帮助!

标签: python-3.xscrapy

解决方案


kwargs 只是一个字典,可能看起来像这样:

kwargs = {
    "urls": "http://www.example1.com, http://www.example2.com",
    "keywords": "email, contactus"
    }
def __init__(self, *args, **kwargs):

    urls = kwargs.pop('urls', []) 
    if urls:
        self.start_urls = urls.split(',')
    #self.logger.info(self.start_urls)

    keywords = kwargs.pop('keywords', []) 
    if keywords:
        self.start_keywords = keywords.split(',')
    #self.logger.info(self.start_keywords)

    super(QuotesSpider, self).__init__(*args, **kwargs)

如果你想将两个字典传递**kwargs给一个方法,你需要先合并它们:

kwargs = { **dict1, **dict2 }


推荐阅读