同時にクロールしてブロックされたくありません。 1秒間に1つのリクエストを送信したいと思います。
そのための 設定 があります。
DOWNLOAD_DELAY
デフォルト:
0
ダウンローダーが同じWebサイトから連続したページをダウンロードするまで待機する時間(秒)。これを使用してクロール速度を調整し、サーバーへの過度のアクセスを回避できます。
DOWNLOAD_DELAY = 0.25 # 250 ms of delay
ドキュメントを読む: https://doc.scrapy.org/en/latest/index.html
グローバルなダウンロード遅延を望まない場合は、スパイダーに「download_delay」属性を設定することもできます。 http://doc.scrapy.org/en/latest/faq.html#what-does-the-response-status-code-999-means を参照してください
class S(Spider):
rate = 1
def __init__(self):
self.download_delay = 1/float(self.rate)
rateは、1秒間にダウンロードできるページの最大量を設定します。
ちょうど1秒のダウンロード遅延を維持する場合は、DOWNLOAD_DELAY=1
はそれを行う方法です。
ただし、scrapyにはAutoThrottle
と呼ばれるダウンロード遅延を自動的に設定する機能もあります。 ScrapyサーバーとクロールするWebサイトの両方の負荷に基づいて、遅延を自動的に設定します。これは、任意の遅延を設定するよりも効果的です。
詳細については http://doc.scrapy.org/en/1.0/topics/autothrottle.html#autothrottle-extension をご覧ください。
100個を超えるドメインをクロールしましたが、AutoThrottleをオンにしてブロックされていません
DOWNLOAD_DELAYの他に、scrapyのAUTOTHROTTLE機能を使用することもできます https://doc.scrapy.org/en/latest/topics/autothrottle.html
設定ファイルに応じてリクエスト間の遅延量を変更します。開始遅延と最大遅延の両方に1を設定すると、各リクエストで1秒待機します。
元々の目的は、ボットの検出が難しくなるように遅延時間を変えることです。
次のようにsettings.pyで設定するだけです:
AUTOTHROTTLE_ENABLED = True
AUTOTHROTTLE_START_DELAY = 1
AUTOTHROTTLE_MAX_DELAY = 3
遅延2に設定できますか?-
クローラーの実行中に遅延を指定できます。例えば。スクレイピークロールサンプル--set DOWNLOAD_DELAY = 3(2つのリクエスト間の遅延が3秒であることを意味します)
または、settings.pyでGlobalyを指定できますDOWNLOAD_DELAY = 3
デフォルトでは、scrapyは2つのリクエスト間で0.25秒の遅延がかかります。