python - item - Cómo acceder a la configuración de scrapy desde el elemento Pipeline
scrapy item get (4)
¿Cómo accedo a la configuración de scrapy en settings.py desde la canalización de elementos? La documentación menciona que se puede acceder a través del rastreador en extensiones, pero no veo cómo acceder al rastreador en las tuberías.
La forma de acceder a su configuración de Scrapy (como se define en settings.py
) desde your_spider.py
es simple. Todas las demás respuestas son demasiado complicadas. La razón de esto es el mantenimiento deficiente de la documentación de Scrapy, combinado con muchas actualizaciones y cambios recientes. Ni en la documentación "Configuración" " Cómo acceder a la configuración " ni en la "API de configuración" se han molestado en dar algún ejemplo viable. A continuación, se incluye un ejemplo de cómo obtener la cadena USER_AGENT actual.
Simplemente agregue las siguientes líneas a your_spider.py
:
# To get your settings from (settings.py):
from scrapy.utils.project import get_project_settings
...
class YourSpider(BaseSpider):
...
def parse(self, response):
...
settings = get_project_settings()
print "Your USER_AGENT is:/n%s" % (settings.get(''USER_AGENT''))
...
Como puede ver, no es necesario usar @classmethod
ni redefinir las from_crawler()
o __init__()
. Espero que esto ayude.
PD. Todavía no estoy seguro de por qué usar from scrapy.settings import Settings
no funciona de la misma manera, ya que sería la opción más obvia de importación.
La respuesta correcta es: depende de la ruta en la que desea acceder a la configuración.
avaleske ha respondido como si quisiera acceder a la configuración fuera del método process_item
de sus tuberías, pero es muy probable que aquí quiera la configuración y, por lo tanto, hay una manera mucho más sencilla de pasar la instancia de Spider como argumento.
class PipelineX(object):
def process_item(self, item, spider):
wanted_setting = spider.settings.get(''WANTED_SETTING'')
Ok, entonces la documentación en http://doc.scrapy.org/en/latest/topics/extensions.html dice que
El punto de entrada principal para una extensión de Scrapy (esto también incluye middlewares y tuberías) es el método de clase from_crawler que recibe una instancia de Crawler que es el objeto principal que controla el rastreador de Scrapy. A través de ese objeto puede acceder a las configuraciones, señales, estadísticas y también controlar el comportamiento del rastreador, si su extensión necesita tal cosa.
Entonces puedes tener una función para obtener la configuración.
@classmethod
def from_crawler(cls, crawler):
settings = crawler.settings
my_setting = settings.get("MY_SETTING")
return cls(my_setting)
El motor de my_setting
entonces llama a la función de inicio de la tubería con my_setting
, así:
def __init__(self, my_setting):
self.my_setting = my_setting
Y otras funciones pueden acceder a él con self.my_setting
, como se esperaba.
Alternativamente , en la función from_crawler()
puede pasar el objeto crawler.settings
a __init__()
, y luego acceder a las configuraciones de la canalización según sea necesario en lugar de sacarlas todas en el constructor.
la estructura del proyecto es bastante plana, ¿por qué no?
# pipeline.py
from myproject import settings