如何从Scrapyd向Scrapy爬虫传递参数?

6

我可以通过一个简单的命令在Scrapy中运行一个爬虫

scrapy crawl custom_spider -a input_val=5 -a input_val2=6

其中,input_valinput_val2是我传递给爬虫的值

上述方法运行良好。

然而,在使用Scrapyd调度爬虫时,运行以下命令:

curl http://localhost:6800/schedule.json -d project=crawler -d input_val=5 -d input_val2=6 -d spider=custom_spider

抛出一个错误。
spider = cls(*args, **kwargs)
    exceptions.TypeError: __init__() got an unexpected keyword argument '_job'

我该怎么让这个工作起来?

编辑 这段代码在我的初始化器中:

def __init__(self,input_val=None, input_val2=None, *args, **kwargs):
        self.input_val = input_val
        self.input_val2 = input_val2
        super(CustomSpider, self).__init__(*args, **kwargs)
1个回答

6

请确保在您的爬虫中支持任意关键字参数,并像 文档中展示的那样 使用super()调用__init__

class MySpider(scrapy.Spider):
    name = 'myspider'

    def __init__(self, category=None, *args, **kwargs):
        super(MySpider, self).__init__(*args, **kwargs) # <- important
        self.category = category

Scrapyd提供作业ID作为传递给爬虫的_job参数(请参见此处的代码)。


谢谢,我已经用构造函数编辑了问题,但错误仍然存在...你有什么想法是错在哪里吗? - wolfgang
@wolfgang 您使用的是哪个版本的Scrapy和Scrapyd?您能否提供一个小的自包含示例项目,以便在部署到Scrapyd时重现问题? - Elias Dorneles
@wolfgang,我无法重现您提供的代码中的问题。 - Elias Dorneles
是的,我会得到那个自包含的代码,并检查蜘蛛是否与您的代码建议一起工作,但对于某些情况,它不起作用(可能是我的配置有误),我会让您知道的,谢谢。 - wolfgang

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接