目次
スクレイピングでtime.sleep処理をするのはマナー
連続でスクレイピングをしたら、対象のサーバーに負荷がかかります。そのため、意図的に処理を停止させる必要があります。処理を停止させるメソッドがtime.sleepで、プログラム言語では関数化されていることが多いです。
関数化していたら引数を指定するだけで、使えるようになるので凄く便利です。time.sleepの文法は各プログラムによって異なりますが、基本的には引数に時間を指定するだけです。
本記事ではtime.sleepについて考察しますが、time.sleepメソッドはスクレイピング以外にも使えるので、関心のある方は解説本や解説サイトを参考にして試してくださいね。
time.sleepの素朴な疑問
これからはtime.sleepの素朴な疑問について解説します。
time.sleepとはどのようなものなの?
コメントがあるので、プログラムの経験がない人でも処理の流れは理解できると思います。こちらはpythonのプログラムですが、最初に「mosimosi」、20秒後に「test」という文字が出力されます。
言い換えると20秒間は、プログラムは停止しています。基本的にプログラムのコンパイラは記述した順番から処理しますが、長いコードになるとマシーンに負荷がかかります。スクレイピングの対象はサイトなので、サイトが使用しているサーバーに負荷がかかります。
20行程度のプログラムであれば負荷は微々たるものかもしれませんが、繰り返し処理の多い10000行以上のプログラムであれば負荷は高いと思います。しかしtime.sleep処理をすれば、プログラムの動きを一時的に停止させることができるので、連続的な負荷を避けることができます。
time.sleep処理をするタイミングは?
Googleで検索すると、time.sleep処理をするタイミングがわからないという質問が、何件か見つかりました。確かにtime.sleep処理をするタイミングには明確な答えがないので、悩むのは致し方がないことです。
私はプログラマ時代に多くのプログラムを作成してきましたが、プログラムの作動時間は短時間のものが大半でした。しかし大規模なプログラムでは、適宜time.sleep処理をしていました。
スクレイピングプログラムを組むときも、適切な箇所でtime.sleep処理をすべきだと思います。
プログラムを書いている人は、実行時にどれぐらいの時間を要するのかわからないと思うので、テスターに頼んで時間を計ってもらったらいいと思います。
スクレイピング以外にも使えるの?
使えます。インターネットサービスの中には、数秒後に文字や画像が表示されるものがありますが、これらのプログラムは、time.sleep処理をしています。
クイズプログラムなどは、time.sleep処理をした方が利用者は楽しめるのではないでしょうか?
他には自動的にページをめくるプログラムも、time.sleep処理ををした方が利用者は読みやすいです。あまりにも速いスピードでページが変わったら利用者は焦ってしまいますが、time.sleep処理で間を置けば随分読みやすくなるでしょう。
スポンサーリンク
大規模なスクレイピングは日を置いて実行
大規模なスクレイピングは、日を置いて実行した方が良いでしょう。以下では詳しく見ます。
日を置いた方が良い理由
大規模なサイトは日を置いて実行した方が良い理由は、ズバリ負荷の軽減です。大規模なサイトのスクレイピングは時間を要しますが、時間がかかればかかるほど、対象のサーバーには負荷がかかります。
time.sleep処理で一時的にプログラムを停止しても、負荷率はかなり高いと思います。大規模なサイトをスクレイピングするときはtime.sleep処理でプログラムを止めるのではなく、日を置いて実行するのが基本です。
日を置いて実行するときはCRON(クローン)が便利かもしれませんが、レンタルサーバーによってはCRONを許可していないところがあります。
スケジュール機能があるスクレイピングツールを使うのが一番簡単
日を置いてスクレイピングを実行するときはCRONでもいいですが、より簡単に実行したい人は、スケジュール機能があるスクレイピングツールを使いましょう。設定可能項目はツールによって異なりますが、曜日指定もできるツールが便利だと思います。
多くのスクレイピングツールは外国産ですが、翻訳ツールを利用したら使用方法は理解できると思います。最近のブラウザーには翻訳機能が搭載されているので、対象のサイト上で右クリックをしたら翻訳ツールは利用できます。
スポンサーリンク
日を置いてスクレイピングするときはBright Dataが便利
大規模なwebサービスをスクレイピングするときは日を置いて実行するのが基本ですが、Bright Dataのデータコレクターを使えば簡単です。詳しく見ます。
データコレクターのスケジュール機能は細かい
図をみたらわかると思いますが、データコレクターのスケジュール機能は設定が細かいです。順番に見ていきますね。
- スタート時間を指定
- 実行回数を指定
- リピートの間隔を指定
- 曜日を指定
- 開始時間と終了時間を指定
曜日ごとに指定できるのは便利だと思います。人気のwebサービスは土日の閲覧者が多いと思いますが、曜日ごとに指定できたら週末だけ停止させることができますね。
リピートの間隔が指定できるのも便利で、間隔を指定することで負荷の軽減が期待できます。
データコレクターは人気のwebサービスをテンプレート化している
データコレクターは人気のwebサービスをテンプレート化していますが、単にリンクを貼っているだけではなく、少ないステップで実行できます。ステップ数が多くなれば対象のサーバーに負荷がかかりますが、データコレクターだったら短時間で終わります。
FacebookやTwitterのプロフィールをスクレイピングしたい人は多いと思いますが、データコレクターは個別に分類しているので手間が省けます。個別に分類していなければ他のデータまで引っ張る可能性がありますが、余計なデータまで引っ張ったら整形処理が大変です。
SNSのデータをスクレイピングしビジネスに活用する人は増えていますが、データコレクターを活用すれば最速で収集できますよ。
スクレイピングの代行もしてくれる
スクレイピングをするのが面倒な人は、Bright Dataに代行を依頼したらいいでしょう。
https://brightdata.jp/pricing/data-collector
プロの人が代行してくれるので、質は良いと思います。前もってリクエストを伝える必要はありますが、丸投げできるのは魅力です。こちらのプランは他の仕事が忙しくて、スクレイピングする暇のない人におすすめします。
まとめ
スクレイピングとtime.sleepについて解説をしましたが、自らスクレイピングツールを構築する人は、time.sleepメソッドを使いましょう。掲示板に投稿するときはマナーが必要ですが、スクレイピングするときもマナーは必要です。
time.sleepメソッドでは難しいスクレイピングのスケジュール化は、Bright Dataのデータコレクターが断然便利です。Bright Dataと契約したらデータコレクターは無料で使えるので、大変お得です。
Bright Dataは海外では有名なプロキシサーバーですが、スクレイピング分野でも世界のリーディングカンパニーです。
コメントを残す