プロキシ経由の Scrapy AutoThrottle:スロットとレイテンシ
対象サイトのダウンロードスロットをプロキシの経路とは別に保ち、レイテンシを観測されたリクエスト経路として解釈します。
既定では、Scrapy はリクエスト URL のドメインに基づいてダウンロードスロットを割り当てます。リクエストに HTTP プロキシを指定しても、その URL がプロキシのホスト名に変わるわけではありません。そのため、異なるサイトへのリクエストは、単一の中間プロキシを共有しながら異なるスロットを保つことができます。
AutoThrottle は観測されたダウンロード レイテンシを使って各スロットの遅延を調整します。標準のドメインごとの同時実行数制限と最小ダウンロード遅延は引き続き適用されます。
アルゴリズムを変更する前にグループ化を確認する
カスタム ミドルウェアは request.meta["download_slot"] を割り当てて、通常のスロット選択を上書きできます。一部のプロキシ拡張は独自のグループ化を使います。無関係なサイトが同じスロットルを共有しているように見える場合は、それらの設定を確認してください。
逆に、プロキシごとに異なるスロットを割り当てると、複数のプロキシが同時に同じ対象へ接続できるようになります。これはクローラーが守るべきサイト全体の制限を損なう可能性があります。保護したいリソースに応じてスロット キーを選びます。
遅延には使用した経路が含まれる
Scrapy はリクエストの送信から HTTP ヘッダーの受信までのレイテンシを測定します。プロキシ経由のリクエストでは、その観測に中間プロキシの待ち行列と転送の遅延が含まれることがあります。AutoThrottle は配信元だけの処理時間を別に取得するわけではありません。
同時実行数を増やしても、その測定がサイトを切り分けるようにはなりません。対象への礼儀とプロキシの容量の両方が重要な場合は、別々の制限として扱ってください。共有プロキシでは対象スロットをまたぐ追加の同時実行予算が必要になることがありますが、各対象は独自のレート ポリシーを保ちます。