Scrapy如何从命令行参数设置DEPTH_LIMIT

时间:2013-12-29 18:05:01

标签: python scrapy

我目前在我正在构建的刮刀的设置模块中设置了DEPTH_LIMIT。我希望能够作为命令行参数传递深度限制。我已经尝试了以下作为爬虫的构造函数(及其变体):

    def __init__(self, max_depth=3, *args, **kwargs):
        super(MySpider, self).__init__(*args, **kwargs)
        self.settings['DEPTH_LIMIT'] = int(max_depth)

但是,我收到错误,堆栈转储结束于:

  File "/usr/local/lib/python2.7/dist-packages/scrapy/spider.py", line 41, in crawler
      assert hasattr(self, '_crawler'), "Spider not bounded to any crawler"
   AssertionError: Spider not bounded to any crawler

甚至尝试在构造函数中打印self.settings ['DEPTH_LIMIT']会导致错误。如何从命令行参数中设置爬虫程序中的DEPTH_LIMIT?

谢谢!

1 个答案:

答案 0 :(得分:1)

您可以尝试这种方法:

def __init__(self, *args, **kwargs):
    self.settings['DEPTH_LIMIT'] = int(kwargs.pop('max_depth', 3))
    super(MySpider, self).__init__(*args, **kwargs)

有关pop的详情,请参阅python official documentation

如果这不起作用,请添加一些关于如何创建抓取工具对象的代码(例如,类定义,以及您在哪里定义settings属性)