Scrapy - 激活项目管道组件 - ITEM_PIPELINES设置

时间:2015-04-27 09:58:00

标签: python scrapy settings pipeline

在scrapy文档中有以下信息:

  

激活项目管道组件

     

要激活项目管道组件,您必须将其类添加到   ITEM_PIPELINES设置,如下例所示:

     

ITEM_PIPELINES = {       ' myproject.pipelines.PricePipeline':300,       ' myproject.pipelines.JsonWriterPipeline':800,}

     

在此设置中分配给类的整数值决定了   订购他们运行的物品从订单号低到管道   高。习惯上在0-1000范围内定义这些数字。

我不明白最后一段,主要是"确定了  订购他们运行的物品从订单号低到管道  高#34;你换句话说可以解释一下吗?因为什么而选择这些数字?在范围是0-1000如何选择值?

2 个答案:

答案 0 :(得分:4)

由于Python中的字典是无序集合ITEM_PIPELINES必须是字典(与许多其他设置一样,例如,SPIDER_MIDDLEWARES),您需要以某种方式定义应用管道的顺序。这就是您需要为您定义的每个管道分配0到1000之间的数字的原因。

仅供参考,如果您查看Scrapy源代码,您会发现为ITEM_PIPELINES等每个设置调用的build_component_list()函数 - 它会在您定义的字典中生成一个列表(有序集合) ITEM_PIPELINES使用字典值进行排序:

def build_component_list(base, custom):
    """Compose a component list based on a custom and base dict of components
    (typically middlewares or extensions), unless custom is already a list, in
    which case it's returned.
    """
    if isinstance(custom, (list, tuple)):
        return custom
    compdict = base.copy()
    compdict.update(custom)
    items = (x for x in six.iteritems(compdict) if x[1] is not None)
    return [x[0] for x in sorted(items, key=itemgetter(1))]

答案 1 :(得分:0)

来自docs

  

ITEM_PIPELINES

     

默认值:{}

     

包含要使用的项目管道及其订单的dict。该   默认情况下,dict为空,订单值是任意的,但这是习惯性的   在0-1000范围内定义它们。