在 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']
.......
我已经实现了一个使用 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']
.......