まず、タイムアウトと待機時間の違いについて説明します。タイムアウトとは、特定のステップが実行される際に設定される時間制限のことです。一方、待機時間とは、そのステップを実行する前に設ける待ち時間を指します。
なぜタイムアウト時間や待機時間の設定が必要なのでしょうか?
ネットワーククローリングを行う際、タイムアウトや待機時間を設定することで、以下のような潜在的な問題を回避することができるため、非常に重要です。
クローラーが無限ループに陥るのを防ぐ:タイムアウト時間を設定しない場合、クローラーが目標のウェブページにリクエストを送信しても応答が得られない場合、クローラーはそのまま待機し続ける可能性があります。この状態が続くと、クローラーが無限ループに陥り、正常に動作しなくなるリスクがあります。
目標サイトのサーバーに過剰な負荷をかけないようにする:待機時間を設定しない場合、クローラーが短時間で頻繁にリクエストを送信し、目標サイトのサーバーに過剰な負荷をかける可能性があります。これにより、サーバーがクラッシュしたり、アクセスが制限されることも考えられます。適切な待機時間を設定することで、こうしたリスクを軽減し、クローラーを安定して運用することが可能です。
クローラーの効率を向上させる:適切なタイムアウト時間や待機時間を設定することで、ウェブページのクロール効率を高めることができます。たとえば、レスポンスが速いウェブサイトに対しては待機時間を短めに設定し、逆にレスポンスが遅いウェブサイトには余裕を持たせた待機時間を設定することで、安定して情報を取得することができます。
一般的なウェブサイトの応答速度が特に遅くない場合、以下の設定を参考にしてください:
タイムアウト時間:15~30秒
待機時間:3~5秒
どのような状況で設定が必要ですか
タイムアウトの設定
・ページロード(例:新しいページを開く場合)
多くのリソースをロードする必要がある、または複雑な JavaScript を実行するウェブページでは、ページが完全にロードされることを確実にするため、タイムアウト時間を長めに設定する必要があります。
・サーバー応答(例:ページめくりの場合)
目的のウェブサイトにリクエストを送信する際、サーバーからの応答を待つために十分な時間を設定する必要があります。一部のウェブサイトでは、サーバーの負荷、ネットワーク遅延、またはページの複雑さの影響で、応答が遅れることがあります。
・動的コンテンツのロード(例:検索、ページめくり)
Ajax や JavaScript を使用して動的にコンテンツをロードするウェブページでは、リクエスト後に待機時間を設定し、必要なデータが完全にロードされてからクローリングが行えるようにする必要があります。
待機時間の設定
データ抽出前の待機
・リクエスト間の遅延
連続してHTTPリクエストを送信する際、リクエスト間に待機時間を設けることで、頻繁なリクエストが原因でターゲットサイトにクローラーとして識別されたり、目標サイトのサーバーに過負荷を与えることを防ぎます。
・ページ送りの待機
複数ページをクロールする場合、ページ送りごとに待機時間を設定して、通常のユーザー操作に似た動作を模倣します。
・ログインまたは対話操作後の待機
クローラーがログインやその他の対話操作(フォーム入力やボタンクリックなど)を行う場合、その操作後に待機時間を設定することで、すべてのステップのプロセスが正しく完了することを確実にします。