我已经实现了一个使用scrapyd API触发scrapy蜘蛛的Web应用程序(Web应用程序和scrapyd在同一台服务器上运行)。
我的网络应用程序正在存储数据库中scrapyd返回的作业ID。 我的蜘蛛正在将数据存储在数据库中。
问题是:如何在数据库中链接scrapyd发出的作业ID和爬网发出的项目?
我可以使用额外的参数触发我的蜘蛛 - 比如说我的网络应用程序生成的ID - 但我不确定它是最好的解决方案。最后,如果scrapyd已发布该ID,则无需创建该ID ...
感谢您的帮助
答案 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']
.......