深層学習とかの研究では既存のデータセットを使うこともありますが、新規性のあるアプリケーションを作ろうと思うとそれでは物足りない場合が多いです。十分な量と質を持つデータセットを自作するにはデータを持っている企業と直接契約するという手もありますが、個人ではなかなか難しいと思われます。そうなるとウェブスクレイピングするしかなくなってきますが、注意してやらないと訴えられたり逮捕されたりする可能性がなくはないので気をつけるべきことを書いておきます。

サイトの規模を考えよう

最も大事なのがどれだけの負荷を想定して作られているかを考えることです。市の公共施設のホームページのようなものは秒間1リクエストも処理できれば十分だとして設計されているでしょう。一方Googleなんかはどれだけアクセスしたところで誤差にしかならないほどの規模です。また、技術者の質もほぼサービスの規模に比例すると言っていいでしょう。小さいサイトは適当に作ってもそれなりに動きますが、大きくなれば負荷分散やネットワークのこともしっかり考えないといけないので優秀なエンジニアが作っている場合が多いです。

リクエストの種類を考えよう

リクエストはリクエストでもその種類によってサーバーに与える負荷は全く違います。大きく分けて動的コンテンツと静的コンテンツに分けられます。動的コンテンツは何かを検索して表示するページで、データベース処理が関わってくることが多いので負荷が高くなります。一方静的コンテンツはリクエスト毎によって内容が変わらない画像やJS、CSSなどです。一般的に静的コンテンツの配信にサーバーのCPUやメモリをほとんど消費しないので負荷が段違いに下がります。また、負荷分散がしやすいのも静的コンテンツです。負荷分散とは複数のサーバーに同じものを置いておいてリクエスト毎に振り分けることです。動的コンテンツはデータの整合性を取らなければならないのでその難易度は上がります。中規模以上のサイトでは動的コンテンツと静的コンテンツのサーバーが分かれており、動的コンテンツは自社サーバー、静的コンテンツはCDNサービスのサーバーにあることが多いです。CDNは全国全世界にサーバー群を保有しているので負荷耐性が高いです。

目的と連絡先を明記しよう

スクレイピングで注意したいのがDoS攻撃と勘違いされるかもしれないということです。こちらの目的を書いておけば相手方も多少なりとも安心しますし、連絡先を書いておけばよほど悪質でない限りいきなり警察に通報ということもないでしょう。ではどこにそんな情報を書くのかと言うとHTTPヘッダのUser-Agentプロパティです。大抵ここの情報は普通ログに残すのでサーバーに異常があったときは担当者の目に届くはずです。もしスクレイピングが原因であれば連絡してくれることでしょう。そうしたら頻度を下げるなり別のサイトでやるなりすればいいです。

これは親切なUser-Agentの例です。

1
HogeBot (We are crauling your sites for academic purpose (computer vision). You can contact us with [email protected])

取得内容をキャッシュしよう

スクレイピングでは抽出項目が途中で変わったり、間違えてプログラムを止めてしまったりすることが多々あります。そういったときにまた最初からリクエストしているとサーバーに無駄に負荷を掛けてしまいます。一度取得した情報は二度と取得しなくていいようにキャッシュしておきましょう。リクエストを送らないのでプログラムの動作の高速化にもなります。

適切な間隔は?

これくらいであればスクレイピングが原因でサーバーが落ちることもないでしょう。

規模 動的 静的
小規模 30秒 5秒
中規模 5秒 1秒
大規模 1秒 0秒

小中規模では人間がプラウザで閲覧可能なくらいの速度でリクエストすることを心がけるといいと思います。まあ大規模サイトはスクレイピングごときでは落ちないでしょう。また、日本向けサービスであれば深夜帯にやるなどサーバーがひましているときにアクセスするのがいいと思います。

ほんとに大丈夫?

法律の専門家ではないので詳しくは知りませんが、想定される罪状は威力業務妨害、偽計業務妨害、著作権法違反、民事の利用規約違反、個人情報保護法関連のなにかでしょう。おそらくDoSレベルでやると威力になり、想定より多くのリクエストを送りつけると偽計になると思われます。著作権法違反に関しては情報解析目的ならこちらの文化庁のサイトによると問題ないようです。利用規約違反に関しては民間サイトですが、こちらによると、「利用規約への同意クリック」を要求する必要があるようです。利用登録しなくても閲覧できるサイトならこれには該当しないでしょう。個人情報についてはこちらのサイトによると利用規約を公表するのが良さそうです。

まとめ

大事なことはサーバーの気持ちになることです。急がず寝ている間に終わらせましょう。まちがっても無間隔でやらないように!!