在scrapy管道中使用scrapyd job id

时间:2017-05-30 14:17:59

标签: scrapy scrapyd

我已经实现了一个使用scrapyd API触发scrapy蜘蛛的Web应用程序(Web应用程序和scrapyd在同一台服务器上运行)。

我的网络应用程序正在存储数据库中scrapyd返回的作业ID。 我的蜘蛛正在将数据存储在数据库中。

问题是:如何在数据库中链接scrapyd发出的作业ID和爬网发出的项目?

我可以使用额外的参数触发我的蜘蛛 - 比如说我的网络应用程序生成的ID - 但我不确定它是最好的解决方案。最后,如果scrapyd已发布该ID,则无需创建该ID ...

感谢您的帮助

2 个答案:

答案 0 :(得分:4)

问题应该表达为"如何在运行时获得scrapyd任务的作业ID?"

当scrapyd运行蜘蛛时,它实际上将蜘蛛的作业ID作为参数。 应始终作为sys.args的最后一个参数。

另外, os.environ['SCRAPY_JOB']应该做到这一点。

答案 1 :(得分:0)

在蜘蛛构造函数中(init内), 添加行 -->

self.jobId = kwargs.get('_job')

然后在解析函数中将其传递给项目,

def parse(self, response):
    data = {}
    ......
    yield data['_job']

在管道中添加这个 -->

def process_item(self, item, spider):
    self.jobId = item['jobId']
    .......