item python scrapy settings pipeline

python - Scrapy-Activación de un componente Pipeline de elementos-configuración ITEM_PIPELINES



scrapy item get (2)

En la documentación de scrapy existe esta información:

Activación de un componente Pipeline de elementos

Para activar un componente Pipeline de elementos, debe agregar su clase a la configuración ITEM_PIPELINES, como en el siguiente ejemplo:

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

Los valores enteros que asigna a las clases en esta configuración determinan el orden en que se ejecutan en los elementos que pasan por las tuberías desde el número de orden de bajo a alto. Es costumbre definir estos números en el rango 0-1000.

No entiendo el último párrafo, principalmente "determinar el orden que corren en los elementos que pasan por tuberías desde el número de orden bajo al alto", ¿puede explicar en otras palabras? que los números son elegidos por qué? en el rango es 0-1000 cómo elegir los valores?


De los documentos

ITEM_PIPELINES

Defecto: {}

Un dict que contiene las tuberías de elementos a usar y sus órdenes. El dict está vacío por orden predeterminado. Los valores son arbitrarios, pero es habitual definirlos en el rango 0-1000.


Dado que un diccionario en Python es una colección desordenada y ITEM_PIPELINES tiene que ser un diccionario (como muchas otras configuraciones, como, por ejemplo, SPIDER_MIDDLEWARES ), debe definir, de alguna manera, un orden en el que se apliquen las tuberías. Es por eso que debe asignar un número del 0 al 1000 a cada tubería que defina.

FYI, si observas el origen de Scrapy, encontrarás la función build_component_list() que se llama para cada configuración como ITEM_PIPELINES - hace una lista (colección ordenada) fuera del diccionario que defines en ITEM_PIPELINES utilizando los valores del diccionario para ordenar:

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))]