Compartir tecnología

【Scrapy】 Reglas de configuración del nivel de middleware de Scrapy

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina


Permítanme volver a interpretar felizmente el papel del protagonista de cierta hermosa historia.
Juega el papel del amante con el que compartiste tus sueños en los últimos años.
Seamos un amor que no vuelva a derramar lágrimas de amor.
Pretendiendo tener las mismas escenas que antes.
Vuelve a interpretar el papel del protagonista de una bonita historia.
Juega el papel del amante con el que compartiste tus sueños en los últimos años.
Aunque no lo entiendas, sigues solo a altas horas de la noche.
Usa tu suéter silencioso como si estuviera cerca de ti
                     🎵 陈慧娴《傻女》


Scrapy es un potente marco de rastreo. Al utilizar middleware, los usuarios pueden personalizar y ampliar el comportamiento del rastreador. El middleware proporciona un mecanismo para el procesamiento previo y posterior de solicitudes y respuestas, lo que permite a los usuarios mejorar la funcionalidad del rastreador sin modificar el código central.

En Scrapy, el orden en que se ejecuta el middleware está determinado por su "prioridad". Comprender y configurar correctamente la jerarquía del middleware es fundamental para crear un rastreador eficiente y fácil de mantener.

¿Qué es el middleware?

El middleware es un gancho en Scrapy que permite a los usuarios ejecutar código personalizado al procesar solicitudes y respuestas. El middleware se divide en dos categorías:

  • Middleware de descarga: maneja las solicitudes y respuestas relacionadas con el descargador.
  • Spider Middleware: maneja la entrada y salida relacionada con la araña.

Nivel de software intermedio

El nivel de middleware determina el orden en que se ejecutan. Scrapy utiliza un valor entero para representar el nivel de middleware. Cuanto menor sea el valor, antes se ejecutará el middleware.

  • Descargador de middleware
    El middleware de descarga se encuentra entre el descargador y el motor de Scrapy. Aquí hay una configuración de ejemplo:
DOWNLOADER_MIDDLEWARES = {
    'myproject.middlewares.CustomDownloaderMiddleware': 543,
    'scrapy.downloadermiddlewares.useragent.UserAgentMiddleware': 400,
    'scrapy.downloadermiddlewares.retry.RetryMiddleware': 500,
}
  • 1
  • 2
  • 3
  • 4
  • 5

En la configuración anterior:

CustomDownloaderMiddleware 的等级为 543
UserAgentMiddleware 的等级为 400
RetryMiddleware 的等级为 500
  • 1
  • 2
  • 3

La secuencia de ejecución es la siguiente:

UserAgentMiddleware(400)
RetryMiddleware(500)
CustomDownloaderMiddleware(543)
  • 1
  • 2
  • 3

Las solicitudes se originan en el motor, pasan a través del middleware de nivel inferior y finalmente llegan al descargador. Cuando la respuesta regresa del descargador, primero pasa a través del middleware de nivel superior y finalmente llega al motor.

Middleware araña

El middleware del rastreador se encuentra entre el motor y el rastreador. Aquí hay una configuración de ejemplo:

SPIDER_MIDDLEWARES = {
    'myproject.middlewares.CustomSpiderMiddleware': 543,
    'scrapy.spidermiddlewares.httperror.HttpErrorMiddleware': 50,
    'scrapy.spidermiddlewares.offsite.OffsiteMiddleware': 500,
}
  • 1
  • 2
  • 3
  • 4
  • 5

En la configuración anterior:

CustomSpiderMiddleware 的等级为 543
HttpErrorMiddleware 的等级为 50
OffsiteMiddleware 的等级为 500
  • 1
  • 2
  • 3

La secuencia de ejecución es la siguiente:

HttpErrorMiddleware(50)
OffsiteMiddleware(500)
CustomSpiderMiddleware(543)
  • 1
  • 2
  • 3

Las solicitudes se originan en el motor, pasan a través del middleware de nivel inferior y finalmente llegan al rastreador. Cuando la respuesta regresa del rastreador, primero pasa a través del middleware de nivel superior y finalmente llega al motor.

Cómo configurar el nivel de middleware

Para establecer el nivel del middleware, debe definir el diccionario correspondiente en el archivo de configuración de Scrapy settings.py y especificar la ruta y el nivel del middleware. Por ejemplo:

DOWNLOADER_MIDDLEWARES = {
    'myproject.middlewares.CustomDownloaderMiddleware': 543,
    'scrapy.downloadermiddlewares.useragent.UserAgentMiddleware': 400,
}

SPIDER_MIDDLEWARES = {
    'myproject.middlewares.CustomSpiderMiddleware': 543,
    'scrapy.spidermiddlewares.httperror.HttpErrorMiddleware': 50,
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

En este ejemplo, definimos un middleware de descarga CustomDownloaderMiddleware y un middleware de rastreador CustomSpiderMiddleware, y configuramos sus niveles en 543 respectivamente.

Middleware común y sus niveles predeterminados

Scrapy proporciona muchos middleware integrados, cada uno con un nivel predeterminado. A continuación se muestran algunos middlewares de descarga comunes y sus niveles predeterminados:

UserAgentMiddleware: 400
RetryMiddleware: 500
RedirectMiddleware: 600
CookiesMiddleware: 700
  • 1
  • 2
  • 3
  • 4

Para el middleware de rastreo, los más comunes incluyen:

HttpErrorMiddleware: 50
OffsiteMiddleware: 500
RefererMiddleware: 700
  • 1
  • 2
  • 3

en conclusión

El middleware es una característica poderosa en el marco Scrapy. Al configurar correctamente el nivel de middleware, puede controlar con precisión el procesamiento de solicitudes y respuestas. Comprender y utilizar las reglas de configuración de niveles del middleware puede ayudar a construir un sistema de rastreo más flexible y eficiente.