【问题标题】:Scrapyd jobid value inside spider蜘蛛内部的Scrapyd jobid值
【发布时间】:2012-03-11 04:28:07
【问题描述】:

框架 Scrapy - Scrapyd 服务器。

我在蜘蛛内部获取 jobid 值时遇到了一些问题。

将数据发布到http://localhost:6800/schedule.json 后,回复是

status = ok
jobid = bc2096406b3011e1a2d0005056c00008

但是我需要在这个过程中在当前蜘蛛中使用这个jobid。它可以用于打开 {jobid}.log 文件或其他动态原因。

class SomeSpider(BaseSpider):
    name = "some"
    start_urls = ["http://www.example.com/"]
    def parse(self, response):
        items = []
        for val in values:
            item = SomeItem()
            item['jobid'] = self.jobid # ???!
            items.append(item)
        return items

但是我只有在任务完成后才能看到这个jobid :( 谢谢!

【问题讨论】:

    标签: python scrapy scrapyd


    【解决方案1】:

    您可以从SCRAPY_JOB 环境变量中获取它

    os.environ['SCRAPY_JOB']
    

    【讨论】:

    • 现在是os.environ['SHUB_JOBKEY']
    【解决方案2】:

    我想有一种更简单的方法,但您可以从命令行参数中提取作业 ID。 IIRC,scrapyd 启动了一个蜘蛛,给它一个 jobid 参数。只需探索sys.args 需要jobid 的地方。

    【讨论】:

    • 所有天才都很容易;)谢谢,伙计!一些例子:if (len(sys.argv)>2): if ('_job' in sys.argv[3]): self.jobid = sys.argv[3].rsplit('=')
    • @Maxim,很高兴它成功了。请不要忘记接受和支持对您有用的答案。
    • 它需要 15 点声望。经过一些成长后,我会回到这篇文章;)谢谢。
    • 也可以从SCRAPY_JOB环境变量中获取:os.environ['SCRAPY_JOB']
    • @PabloHoffman 如果我们有多个计划运行会发生什么?我得到了jobid,但我不确定它们是否每次都正确。
    【解决方案3】:

    在 spider.py 中 -->

    class SomeSpider(BaseSpider):
        name = "some"
        start_urls = ["http://www.example.com/"]
    
        def __init__(self, *args, **kwargs):
            super(SomeSpider, self).__init__(*args, **kwargs)
            self.jobid = kwargs.get('_job')
    
        def parse(self, response):
            items = []
            for val in values:
               item = SomeItem()
               item['jobid'] = self.jobid # ???!
               items.append(item)
            return items
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多