技術共有

【Scrapy】Scrapyミドルウェアレベル設定ルール

2024-07-12

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


とある美しい物語の主人公を楽しく再現させてください
過去数年間に夢を分かち合った恋人の役を演じてください
もう愛の涙を流さない恋人になろう
以前と同じ景色があるふりをする
美しい物語の主人公の役割を再現してください
過去数年間に夢を分かち合った恋人の役を演じてください
分からなくても 夜更けに君は一人
まるで私があなたの近くにいるかのように、静かなセーターを着てください
                     🎵 陈慧娴《傻女》


Scrapy は強力なクローラー フレームワークであり、ミドルウェアを使用することで、ユーザーはクローラーの動作をカスタマイズおよび拡張できます。ミドルウェアは、リクエストと応答の前処理および後処理のメカニズムを提供し、ユーザーがコア コードを変更せずにクローラーの機能を強化できるようにします。

Scrapy では、ミドルウェアの実行順序は「優先度」によって決まります。効率的で保守可能なクローラを構築するには、ミドルウェアの階層を理解し、正しく設定することが重要です。

ミドルウェアとは何ですか?

ミドルウェアは、ユーザーがリクエストとレスポンスを処理するときにカスタム コードを実行できるようにする Scrapy のフックです。ミドルウェアは次の 2 つのカテゴリに分類されます。

  • ダウンローダー ミドルウェア: ダウンローダー関連のリクエストと応答を処理します。
  • Spider Middleware: スパイダー関連の入出力を処理します。

ミドルウェアレベル

ミドルウェアのレベルによって、実行される順序が決まります。 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 フレームワークの強力な機能です。ミドルウェアのレベルを正しく設定することで、リクエストと応答の処理を細かく制御できます。ミドルウェアのレベル設定ルールを理解して使用すると、より柔軟で効率的なクローラ システムを構築するのに役立ちます。