スクレイピングにsleep処理が必要なのは昔から言われていましたが、深掘りした記事は少ないようです。
本記事では、スクレイピングにsleep処理が必要な理由を深掘りしたいと思います。
スクレイピングは有益なプログラム手法ですが、マナーを守って実行したいものです。
本記事の内容を最後まで読めば、何故マナーを守る必要があるのかが理解できるようになるでしょう。
目次
sleep処理の基本
sleep処理の基本を見ましょう。
ソフトをたくさん立ち上げるとパソコンがフリーズする
パソコンを持っている人は経験したことがあると思いますが、ソフトをたくさん立ち上げるとパソコンがフリーズします。
フリーズしたパソコンは時間を置くと正常に戻ることが多いですが、時間のない人は強制終了するでしょう。
スクレイピングされるwebサービスもパソコンを使っていますが、個人が使うパソコンではなく、サーバーというパソコンです。
サーバーパソコンは多くの人がアクセスできる仕様になっていますが、それでも限度を超えたらパソコンの処理が追いつかなくなり、フリーズ状態になります。
フリーズ状態になったwebサービスは、エラー番号を吐き出し、利用者は閲覧できないようになります。
スクレイピング処理の流れを見る
スクレイピングは、対象のwebサービスの情報をすべて読み取ります。
正確にはサイトの骨格であるHTMLを読み込みますが、大規模なサイトであれば読み込み時間は長くなります。
読み込む時間が長くなれば当然サーバーに負荷がかかるので、webサービス側は迷惑を被ります。
多くのレンタルサーバーでは転送量の上限を決めていますが、転送量の上限を決めているのはサーバーへの負荷を一定に抑えるためです。
スクレイピングも転送量に影響を与えますが、スクレイピングは単にwebサービスの情報を読み取っているだけではありません。
いったんすべての情報を読み取った後に、必要な情報だけを抽出します。
この行為もサーバーに負荷をかけるので、スクレイピングを実行する側は、十分に注意しなければいけません。
スポンサーリンク
sleep処理の詳細
sleep処理の解説をします。
sleep処理はプログラム手法
sleep処理はプログラム手法で、プログラム言語によっては専用の関数を用意しています。
sleep処理をすれば、一時的にプログラムを停止できます。
一時的にプログラムを停止させることで、負荷を軽減させることができます。
sleep処理の関数の引数は単純で時間を指定するだけですが、sleep処理を実行させるタイミングはしっかり検討しなくてはいけません。
一般的に繰り返し処理は負荷が発生しやすいので、繰り返し処理直前にsleep処理を実行してもいいでしょう。
このあたりの見極めは数値化しないと判断が難しいですが、数値化できない人は経験で学んでいくしかないでしょう。
条件分岐中にsleep処理をするときはロジックに注意
プログラム言語には条件分岐という手法がありますが、慣れた人でもロジックを読み違えることはあります。
ロジックを読み違えてしまえば、間違ったタイミングでsleep処理をする可能性があります。
そのため条件分岐中にsleep処理をするときは、条件分岐の内容を精査することが大切です。
一番有効な方法はコメントを付けることです。
コメントを付けることで、客観的にプログラムを見ることができるようになります。
sleep関数がない場合は自ら実装
プログラム言語によっては、sleep関数がないこともあるでしょう。
このようなプログラム言語でsleep処理を実行するときは、time関数が便利です。
time関数を利用すれば、現在の時間が取得できます。
まずはtime関数で、現在時刻を取得します。
time関数で取得した現在時刻を変数化します。
後は1分間なら1分間、プログラムを停止させるようにしたらいいだけです。
sleep処理の適切な時間は?
sleep処理関数は時間が指定できると解説しましたが、指定する時間はどれぐらいが適切でしょうか?
1分間が目安
適切なsleep時間はプログラム処理によって変わってきますが、解らないうちは1分間を目安にすればいいでしょう。
1分間プログラムを停止させるだけでも、かなり負荷を軽減させることができます。
ただプログラムの内容によっては、何回かに分けてsleep処理をしなければならないかもしれません。
このあたりの判断は経験を積んで覚えていくしかないですが、負荷を数値化できる人は数字を参考に判断してもいいでしょう。
既存のスクレイピングツールを使う人はスケジュール機能を活用
既存のスクレイピングツールは自らプログラムを編集することはできませんが、スケジュール機能があるスクレイピングツールの場合は、繰り返し回数や間隔を指定することができます。
数値を入力するだけなので楽です。
スクレイピングツールによっては一日置きに実行させることも可能なので、一つのwebサービスを定期的にスクレイピングをしたい人は、大いに活用してほしいと思います。
スクレイピングツールで、スクレイピングしても失敗することはあります。
スクレイピングサービスによっては失敗のレポートも発行してくれるので、再度挑戦するときは、失敗したURLだけ指定すればいいでしょう。
急に対象のサイトが重たくなったら直ぐに対処しよう
スクレイピングは対象のサイトに負荷をかけますが、スクレイピングしている本人は気付かないことが多いです。
しかし別のパソコンで別の人がアクセスをしたら、負荷の具合が解ります。
各々のサイトが使用しているサーバーのスペックはマチマチです。そのため貧弱なサーバーに当たったら、直ぐにサイトが重たくなります。
スペックの高いサーバーでも長時間スクレイピングしたら重たくなる可能性はあるので、スクレイピングしているサイトのレスポンスをチェックすることは大切です。
スポンサーリンク
マナーを守りスクレイピングしましょう
スクレイピングというと身元を隠してするイメージがありますが、身元を隠してもIPアドレスは対象のwebサーバーに通知されます。
サイトを重たくしているIPアドレスが解れば、ブロックされる可能性があります。
このような悲劇を避けるためには、マナーを守ってスクレイピングすることが大切です。
sleep時間の指定は言うに及ばず、スクレイピングする時間帯にも気を配りましょう。
またスクレイピング禁止と明示している場合は、スクレイピングは控えた方が無難です。
たかがスクレイピングと思うかもしれませんが、スクレイピングが原因で、裁判沙汰になる可能性はあります。
まとめ
スクレイピングにsleep処理が必要な理由を解説しましたが、想像以上にスクレイピングは対象のサーバーに負荷を与えます。
自力でsleep処理ができない人は、スケジュール機能があるスクレイピングツールを使ってください。
スクレイピングツールは外国産のものが多いため、少し日本語が不自然なことがありますが、スケジュール機能は時間を指定するだけなので、英語が読めなくても大丈夫です。
スクレイピングツールを選ぶときは、まずは無料体験をしてください。
無料体験で満足したら、本契約をしましょう。
コメントを残す