在 scrapy 管道中使用 scrapyd job id

Use scrapyd job id in scrapy pipelines

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

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

问题是:我如何在数据库中link scrapyd 发布的作业 ID 和抓取发布的项目?

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

感谢您的帮助

问题应表述为"How can I get a job id of a scrapyd task in runtime?"

当 scrapyd 运行蜘蛛时,它实际上将作业 ID 作为参数提供给蜘蛛。 应始终作为 sys.args.

的最后一个参数

此外, os.environ['SCRAPY_JOB'] 应该可以解决问题。

在spider构造函数中(在init里面), 添加行 -->

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

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

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

在管道中添加这个 -->

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