Compartilhamento de tecnologia

【Scrapy】 Regras de configuração de nível de middleware Scrapy

2024-07-12

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


Permita-me repetir com alegria o papel do protagonista de uma certa bela história
Desempenhe o papel do amante com quem você compartilhou seus sonhos nos últimos anos
Vamos ser um amor que não derrama lágrimas de amor novamente
Fingindo ter as mesmas cenas de antes
Repita o papel do protagonista de uma bela história
Desempenhe o papel do amante com quem você compartilhou seus sonhos nos últimos anos
Mesmo que você não entenda, você ainda está sozinho tarde da noite
Use seu suéter silencioso como se eu estivesse perto de você
                     🎵 陈慧娴《傻女》


Scrapy é uma estrutura de rastreador poderosa. Ao usar middleware, os usuários podem personalizar e estender o comportamento do rastreador. O middleware fornece um mecanismo para pré e pós-processamento de solicitações e respostas, permitindo que os usuários aprimorem a funcionalidade do rastreador sem modificar o código principal.

No Scrapy, a ordem em que o middleware é executado é determinada pela sua “prioridade”. Compreender e definir corretamente a hierarquia do middleware é fundamental para construir um rastreador eficiente e de fácil manutenção.

O que é middleware?

Middleware é um gancho no Scrapy que permite aos usuários executar código personalizado ao processar solicitações e respostas. Middleware é dividido em duas categorias:

  • Middleware do Downloader: Lida com solicitações e respostas relacionadas ao downloader.
  • Spider Middleware: lida com entradas e saídas relacionadas ao spider.

Nível de middleware

O nível de middleware determina a ordem em que são executados. Scrapy usa um valor inteiro para representar o nível do middleware. Quanto menor o valor, mais cedo o middleware é executado.

  • Middleware de download
    O middleware do downloader fica entre o downloader e o mecanismo do Scrapy. Aqui está um exemplo de configuração:
DOWNLOADER_MIDDLEWARES = {
    'myproject.middlewares.CustomDownloaderMiddleware': 543,
    'scrapy.downloadermiddlewares.useragent.UserAgentMiddleware': 400,
    'scrapy.downloadermiddlewares.retry.RetryMiddleware': 500,
}
  • 1
  • 2
  • 3
  • 4
  • 5

Na configuração acima:

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

A sequência de execução é a seguinte:

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

As solicitações originam-se do mecanismo, passam pelo middleware de nível inferior e finalmente chegam ao downloader. Quando a resposta retorna do downloader, ela primeiro passa pelo middleware de nível superior e finalmente chega ao mecanismo.

Middleware Spider

O middleware do rastreador está localizado entre o mecanismo e o rastreador. Aqui está um exemplo de configuração:

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

Na configuração acima:

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

A sequência de execução é a seguinte:

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

As solicitações originam-se do mecanismo, passam pelo middleware de nível inferior e finalmente chegam ao rastreador. Quando a resposta retorna do rastreador, ela primeiro passa pelo middleware de nível superior e finalmente chega ao mecanismo.

Como definir o nível de middleware

Para definir o nível do middleware, você precisa definir o dicionário correspondente no arquivo de configuração do Scrapy settings.py e especificar o caminho e o nível do middleware. Por exemplo:

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

Neste exemplo, definimos um middleware de download CustomDownloaderMiddleware e um middleware de rastreador CustomSpiderMiddleware e definimos seus níveis como 543, respectivamente.

Middleware comum e seus níveis padrão

Scrapy fornece muitos middlewares integrados, cada um com um nível padrão. Aqui estão alguns middlewares de download comuns e seus níveis padrão:

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

Para middleware rastreador, os mais comuns incluem:

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

para concluir

Middleware é um recurso poderoso na estrutura Scrapy. Ao definir corretamente o nível de middleware, você pode controlar com precisão o processamento de solicitações e respostas. Compreender e usar as regras de configuração de nível do middleware pode ajudar a construir um sistema rastreador mais flexível e eficiente.