기술나눔

【스크래피】스크래피 미들웨어 레벨 설정 규칙

2024-07-12

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


어떤 아름다운 이야기의 주인공을 즐겁게 연기하게 해주세요
지난 몇 년 동안 꿈을 공유했던 연인의 역할을 맡아보세요.
다시는 사랑의 눈물 흘리지 않는 애인이 되자
예전과 같은 장면인 척
아름다운 이야기의 주인공 역할을 다시 수행해 보세요.
지난 몇 년 동안 꿈을 공유했던 연인의 역할을 맡아보세요.
이해는 안 가는데도 늦은 밤 넌 여전히 혼자야
내가 네 곁에 있는 것처럼 조용한 스웨터를 입어봐
                     🎵 陈慧娴《傻女》


Scrapy는 미들웨어를 사용하여 크롤러의 동작을 사용자 정의하고 확장할 수 있는 강력한 크롤러 프레임워크입니다. 미들웨어는 요청과 응답의 사전 및 사후 처리를 위한 메커니즘을 제공하므로 사용자는 핵심 코드를 수정하지 않고도 크롤러의 기능을 향상시킬 수 있습니다.

Scrapy에서 미들웨어가 실행되는 순서는 "우선순위"에 따라 결정됩니다. 효율적이고 유지 관리가 가능한 크롤러를 구축하려면 미들웨어 계층 구조를 이해하고 올바르게 설정하는 것이 중요합니다.

미들웨어란 무엇입니까?

미들웨어는 사용자가 요청과 응답을 처리할 때 사용자 정의 코드를 실행할 수 있도록 하는 Scrapy의 후크입니다. 미들웨어는 두 가지 범주로 나뉩니다.

  • 다운로더 미들웨어: 다운로더 관련 요청 및 응답을 처리합니다.
  • 스파이더 미들웨어: 스파이더 관련 입력 및 출력을 처리합니다.

미들웨어 수준

미들웨어 수준에 따라 실행 순서가 결정됩니다. Scrapy는 정수 값을 사용하여 미들웨어 수준을 나타냅니다. 값이 작을수록 미들웨어가 더 일찍 실행됩니다.

  • 다운로더 미들웨어
    다운로더 미들웨어는 Scrapy의 다운로더와 엔진 사이에 위치합니다. 다음은 구성 예입니다.
DOWNLOADER_MIDDLEWARES = {
    'myproject.middlewares.CustomDownloaderMiddleware': 543,
    'scrapy.downloadermiddlewares.useragent.UserAgentMiddleware': 400,
    'scrapy.downloadermiddlewares.retry.RetryMiddleware': 500,
}
  • 1
  • 2
  • 3
  • 4
  • 5

위 구성에서:

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

실행 순서는 다음과 같습니다.

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

요청은 엔진에서 시작되어 하위 수준 미들웨어를 통과하고 최종적으로 다운로더에 도달합니다. 다운로더에서 응답이 반환되면 먼저 더 높은 수준의 미들웨어를 통과한 후 마지막으로 엔진에 도달합니다.

스파이더 미들웨어

크롤러 미들웨어는 엔진과 크롤러 사이에 위치합니다. 다음은 구성 예입니다.

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

위 구성에서:

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

실행 순서는 다음과 같습니다.

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

요청은 엔진에서 시작되어 하위 수준 미들웨어를 통과하고 마지막으로 크롤러에 도달합니다. 크롤러에서 응답이 반환되면 먼저 더 높은 수준의 미들웨어를 통과하고 마지막으로 엔진에 도달합니다.

미들웨어 레벨 설정 방법

미들웨어 수준을 설정하려면 Scrapy 구성 파일 settings.py에 해당 사전을 정의하고 미들웨어의 경로와 수준을 지정해야 합니다. 예를 들어:

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

이 예에서는 다운로더 미들웨어 CustomDownloaderMiddleware와 크롤러 미들웨어 CustomSpiderMiddleware를 정의하고 각각의 수준을 543으로 설정합니다.

일반적인 미들웨어 및 기본 수준

Scrapy는 각각 기본 수준을 갖는 다양한 내장 미들웨어를 제공합니다. 다음은 몇 가지 일반적인 다운로더 미들웨어와 기본 수준입니다.

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

크롤러 미들웨어의 경우 일반적인 미들웨어는 다음과 같습니다.

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

결론적으로

미들웨어는 Scrapy 프레임워크의 강력한 기능으로 미들웨어 수준을 올바르게 설정하면 요청 및 응답 처리를 세밀하게 제어할 수 있습니다. 미들웨어의 레벨 설정 규칙을 이해하고 사용하면 보다 유연하고 효율적인 크롤러 시스템을 구축하는 데 도움이 됩니다.