在scrapy管道中使用scrapyd作业id

在scrapy管道中使用scrapyd作业id,scrapy,scrapyd,Scrapy,Scrapyd,我已经实现了一个web应用程序,它使用ScrapydAPI触发scrapy爬行器(web应用程序和scrapyd在同一台服务器上运行) 我的web应用程序正在数据库中存储从scrapyd返回的作业ID。 我的爬行器正在数据库中存储项目 问题是:如何在DB中链接scrapyd发布的作业id和爬网发布的项目 我可以使用一个额外的参数触发我的爬行器——比如说我的web应用程序生成的ID——但我不确定这是否是最好的解决方案。最后,如果scrapyd已经发布了该ID,则无需创建该ID 感谢您的帮助问题应表

我已经实现了一个web应用程序,它使用ScrapydAPI触发scrapy爬行器(web应用程序和scrapyd在同一台服务器上运行)

我的web应用程序正在数据库中存储从scrapyd返回的作业ID。 我的爬行器正在数据库中存储项目

问题是:如何在DB中链接scrapyd发布的作业id和爬网发布的项目

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


感谢您的帮助

问题应表述为“如何在运行时获取scrapyd任务的作业id?”

当scrapyd运行爬行器时,它实际上将作业id作为参数提供给爬行器。 应始终作为
sys.args
的最后一个参数

而且,
os.environ['SCRAPY_JOB']
应该可以做到这一点。

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

然后在解析函数中传入该项

def parse(self, response):
    data = {}
    ......
    yield data['_job']
在管道中添加此-->


谢谢,你说得对!我尝试在我的spider构造函数中编写
logger.debug(kwargs)
,scrapyd作业id显示在这个键
debug:{“u作业”:“d584ea40454911e794246c4008a91422”}
def parse(self, response):
    data = {}
    ......
    yield data['_job']
def process_item(self, item, spider):
    self.jobId = item['jobId']
    .......