プログラミング

【違法】スクレイピングはバレる?やっておくべき4つの対策!【法律と著作権的】

私たちが何気なく使っているwebスクレイピングですが、著作権などの法律の観点から違法と判断されることがよくあります。
自分は悪気がなかったとしても結果的に相手に迷惑をかけてしまっていたりすることが多いため、気をつけなければいけません。

今回はスクレイピングとその違法性、またそれを回避するためにはどうすればいいのかについて解説していきます。

この記事でわかること
  • スクレイピングの法律的扱い
  • 著作権侵害となったスクレイピングの事例
  • 違法にならないために法律的に注意すべき4つの注意点

そもそもスクレイピングとは?

ウェブスクレイピング(英: Web scraping)とは、ウェブサイトから情報を抽出するコンピュータソフトウェア技術のこと。ウェブ・クローラーあるいはウェブ・スパイダーとも呼ばれる。 通常このようなソフトウェアプログラムは低レベルのHTTPを実装することで、もしくはウェブブラウザを埋め込むことによって、WWWのコンテンツを取得する。

ウェブスクレイピング – Wikipedia

つまり、私たちが使っているwebサイトからそこに書いてある文字を取ってきて自分達で使えるようにすることをいいます。HTMLを解析して必要なところだけを取ってくることができます。

スクレイピングはWebサイトなら基本的になんでもとってこれます。かなり便利ですし使い方によっては業務効率を格段にあげることができます。

参考:Python Webスクレイピング テクニック集「取得できない値は無い」JavaScript対応@追記あり6/12

スクレイピングの法律的規則

スクレイピングは著作権違法?

先ほどもご紹介したようにスクレイピングとは、他者が作成したネット記事などの「著作物」を勝手に取得することをいいます。

ここで気になってくるのが著作権の問題です。そもそも人様が作ったサイトや書いた文章を勝手に持ってきていいものなのでしょうか。

このスクレイピングによって他人の著作物を収集することは著作権の侵害に当たらないのでしょうか。

基本的にスクレイピングは法律的に認められている

著作権法47条の7によるとこのように書かれています。

著作物は、電子計算機による情報解析(多数の著作物その他の大量の情報から、当該情報を構成する言語、音、影像その他の要素に係る情報を抽出し、比較、分類その他の統計的な解析を行うことをいう。以下この条において同じ。)を行うことを目的とする場合には、必要と認められる限度において、記録媒体への記録又は翻案(これにより創作した二次的著作物の記録を含む。)を行うことができる。ただし、情報解析を行う者の用に供するために作成されたデータベースの著作物については、この限りでない。

つまり、情報解析目的であるならばスクレイピングをしても法律的に問題ないということです。

ただし、スクレイピングをしたサイトの利用規約がスクレイピングを禁止していたり、そのサイト内の内容を商業目的で、利用することを禁止していた場合には
違反になります。

特に会員登録が必要なサイト(FacebookやTwitterなど)は登録時に利用規約があるのでそれに従わなければ違反になってしまうので気をつけてください。

スクレイピングが違法になるケース

f:id:hatorihatorihatorik:20180930021719j:plain

スクレイピングが違法になるケースは一定数存在します。便利だからといってむやみに使わないように注意してください。

どんなものが違法になるのか、その事例を紹介します。

著作権法の侵害の場合

上にも書いた通り、情報解析目的であれば著作権法の侵害にはなりません。

ただし、スクレピングしたデータをそのままインターネット上で配信することは違法行為となります。スクレイピングで取得したデータは自分で何かしらのオリジナリティのある工夫を加える必要があります。

動産不法侵入または偽計業務妨害罪の場合

これはスクレイピングをしていると起こる相手サーバーへの負荷のことを意味します。

スクレイピングをすると、短時間になんどもサーバーへのアクセスを行います。これにより相手のサーバーに負荷がかかるため、これが犯罪になってしまうことがあります。

スクレイピングを行う際はアクセスの間隔を1秒以上開けるようにするといったような対処法をとりましょう。

スクレイピングで有名になった事件

これに関してはLibrahack事件という有名な事件があります。

この事件はスクレイピングをするときにしっかりと時間を開けて行なっていたにもかかわらず、サーバーの不具合により高負荷と判断され逮捕されてしまった事件です。この事件は明らかに誤認逮捕であると言われていますが、警察、検察の技術をあまり理解していなかったこともあり、このような結果になってしまいました。

スクレイピングを行う際はこのようなことも頭に入れながら行なっていくべきでしょう。

不法行為責任の場合

f:id:hatorihatorihatorik:20180930021711j:plain

ウェブサイトにはGoogleなどのクローラからアクセスを制限するための措置としてrobot.txtというものがあります。

これはクローラーのようなロボットがWEBページのへのアクセスすることを制限するためのファイルです。サイトの重要なページにクローラーの訪問数を増やすことで、SEO改善に繋げることができるため設定しているサイトも多いです。

このrobot.txtに書いてある内容を破ってクローリングを行なった場合は、民法上の不法行為に該当する可能性があるので注意が必要です。

robot.txtの説明はこちらをご覧ください。

参考:robots.txtとは | SEO用語集:意味/解説/SEO効果など [SEO HACKS]

スクレイピングを使ってサイト運営を行なっている事例

SmartNews

公式サイト:ニュースが快適に読めるスマホアプリ『SmartNews』

最近さまざまなニュースキュレーションサイトが出てきていますが、SmartNewsもこの一つです。

スクレイピング+ニュース+便利な機能によって付加価値を生み出しています。

例えば、高度な機械学習技術を用いてニュースのカテゴリの分類を行うことで、その該当するニュースがどこにあるのかを探しやすくしたり、違い棚というUIを用いることでユーザーが多くの情報を吸収できるような仕組みが作られています。

実際私もSmartNewsでよくニュースを見ます。日経新聞のサイトに直接いくよりもこのSmartNewsを使った方が便利ですし、短い時間でたくさんのことを吸収できます。

スクレイピングは使い方と付加価値次第でとても便利なツールになります。法律的、技術的にどこまでできるのかを事前に確認しながら利用していくようにしましょう。

スクレイピングをバレないようにするための4つの方法

じゃあ実際、どうやってスクレイピングを行なっていけばいいのでしょうか。

それは、人間らしく見せることです。

webサイトにユーザーがアクセスする時に、人間がアクセスする場合と機械がアクセスする場合では全くことなる動きをします。

 

人間だと1つのサイトを読むのに数秒かかります。ネットサーフィンをしていたらわかるとは思いますが、サイトを読む時ってまずページを読み込む時間とか、表示されたあとでスクロールして文字を読んでいく作業がありますよね。

 

一方で、機械にやらせると1ページ1秒もかからず読み込んでしまい、その後もすぐに次のページを読み込んでいきます。これは相手のサーバー側が頻繁にアクセスしてくると知れば、対策されてしまいますし、そうすると自分の存在がバレてしまいます。
やりすぎると最悪IPアドレスを特定されてブロックされちゃいます。

こういう自体の対策としては、機械を人間っぽくみせる仕組みを付け加えることが必要なんです。次は人間っぽく魅せる技を紹介しましょう。

プロキシサーバーを使用する

プロキシサーバーを使用して、スクレイピングを行うことによりアクセス経路を隠すことができます。企業で使われている社内ネットワークなどはこのプロキシサーバーを用いられています。

使用するためにはプロキシサーバーを契約する必要があるのですが、実は日本ではあまりこれに関する情報がありません。
オススメはLminatiのプロキシサーバーです。
Residential IPの$500、40GB以上のパッケージがオススメです。

Lminatiは数あるプロキシサーバーの中でも最も高品質で安く、コスパが良いため有名です。詳しくはこちらで解説しています。

あわせて読みたい
【比較】プロキシ(Proxy)サーバーのオススメ3選【日本有料版】エンジニアの人はもちろん、IT関連の勉強をしている人はプロキシという言葉を聞いたことがあると思います。スクレイピングを使用したり、サービ...

HTTPヘッダの書き換え

f:id:hatorihatorihatorik:20181005015800p:plain

1つ目の対策法はHTTPヘッダを書き換えるというものです。

通常、webサイトにアクセスするときには、HTTPヘッダというものが必ず送られています。私たちが普通にブラウザからアクセスするときのHTTPヘッダと機械がアクセスしたときのHTTPヘッダはかなり違うものになっています。これを書き換えることにより、人間っぽさを出すことができます。

今回は例として、Google Chromeの検証機能を使ってはてなブログにアクセスしたときのHTTPヘッダを確認してみたいと思います。

HTTPヘッダの確認に関しては以下のサイトを参考にしてやってみてください。

参考:https://marubon.info/method-confirm-http-header-2345/

ここで取得できるあたいは人によって異なってきますが、

 

–> GET / HTTP/1.1

Host: hatenablog.com

Connection: keep-alive

Cache-Control: max-age=0

Upgrade-Insecure-Requests: 1

User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/547.36 (KHTML, like Gecko) Chrome

Accept:text/html,application/xhtml+xml,application/xml;q=0.9,
image/webp,image/apng,*/*;q=0.8

Accept-Encoding: gzip, deflate

Accept-Language: ja,en-US;q=0.9,en;q=0.8

こんな感じになっているのではないでしょうか?

一方でスクレイピングの代表的なモジュールであるurllibを用いてアクセスしたときのHTTPヘッダはこちらです。

Accept-Encoding: identity
User-Agent: Python-urllib/3.4

がっつりurlibと書かれていますね。機械がやってるのはバレバレです。

これはまずいです。なので、このHTTPヘッダを書き換えて先ほど普通にアクセスした状態に見せかけます。

 

Beautifulsoupを使ってpythonでスクレイピングを行うときは「requests」という便利なモジュールが用意されています。このrequestsモジュールを使うことでHTTPヘッダの値を書き換えられ、人間がアクセスしたかのようにみせることができます。

import requests from bs4
import BeautifulSoup
session = requests.session()
headers = {“User-Agent”: “Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5)” "AppleWebKit/537.36 (KHTML, like Gecko) Chrome" "Accept": "text/html,application/xhtml+xml,application/xml;" "q=0.9,image/webp,image/apng,*/*;q=0.8"}
url = ("http://hatenablog.com/")
req = session.get(url, headers = headers)

このようなコードを書くことでHTTPヘッダを書き換えた状態でスクレイピングを行うことができます。

タイミングを工夫する

f:id:hatorihatorihatorik:20181005015744p:plain

スクレイピングをコンピュータの早さに任せてしまうと、とても早いリクエストをサーバーに送り続けてしまいます。

ページをクリックしてから次のクリックまでの妥当な秒数は2~3秒くらいだと言われています。なのでそのくらいの間を保ってスクレイピングをしていくことで、相手のサーバーリソースに負荷をかけにくくします。
これはpythonのtimeモジュールを使えば簡単に実装できます。

time.sleep(2) #引数には秒数を入れてください

たったこの1行を書くだけで犯罪者にならなくてすむので、念のため絶対にやっておきましょう。

ハニーポットに気をつける

ハニーポットとは、webサイト提供者側が、自身のwebサイトをスクレイピングされるのを防ぐために仕掛けるトラップのようなものです。

例えば、はてなブログでログインをしようと思ったとき、メールアドレスとパスワードをフォームに打ち込むことでログインをすることができます。

しかし、私たちの目から見えない隠しフォームというのが存在する可能性があるみたいです。下手に書いたコードだと、自分が作ったスクレイピングツールがこのフォームに入力をしてしまうため、人間ではなく機械がスクレイピングを行なっていることがばれてしまいます。

この隠しフォームのことをハニーポットといいます。

f:id:hatorihatorihatorik:20181006121016p:plain

スクレイピング初心者がやるとこの隠しフォームに適当な値を入れて送ってしまうことも多いそうです。フォームは本来値が入ってはいけないことになっているので、値が入った状態で送ってきたユーザーを悪意のあるユーザーとみなしブロックします。

膨大なデータの個人情報を扱っているfacebookなどでは、セキュリティ管理がとてもシビアな課題となっているため、このような対策が取られています。

対策法は以上です。しかしこれらを全て守っていても犯罪になるケースもあります。過去の事例をしっかりと違法にならないように注意しましょう。

スクレイピングと法律(海外の事例)

f:id:hatorihatorihatorik:20181002154949j:plain

eBayとBidder’s Edgeのサーバー負荷問題

Bidder’s Edgeという、日本でいう価格コムのようなビジネスをやっているメタオークションサイトがありました。この会社はいろんなオークションサイトの価格情報を引っ張ってきて、最も価格が安い商品を紹介する、というビジネスをやっていました。

もちろん価格情報をもってくるためにスクレイピングを使用していました。当時、オークションプラットフォーム最大手のeBayという会社は、Bidder’s Edgeからの1日10000以上のアクセスを受けてとても迷惑でした。

eBay側もIPアドレスをブロックするなど様々な対策をしたものの、プロキシサーバーを用いて別のIPアドレスを使ってアクセスすることでこれを回避しました。ブロックされるごとに新しいプロキシサーバーを使ってスクレイピングをし続けました。

結局Bidder’s Edgeは動産侵入法で訴えられ、金で解決して終わったそうです。

参考: eBay v. Bidder’s Edge – Wikipedia

AT&Tの情報セキュリティ事例

AT&Tというアメリカ最大手の電話会社があります。Andrew AuernheimerはiPadでAT&Tのサイトにアクセスすることで、ユーザーのメールアドレスを集められることを発見しました。

 

メールアドレスを発見できたという情報をGawker Mediaというメディアに送ったところ、メディアが重大ニュースとして取り上げられてしまいました。
その後Auernheimerはコンピュータアクセス謀議で有罪隣73000ドルの支払いを命じられました。

おそらく、個人情報、営業機密、政府機密などの重要なデータはスクレピングできる状況であったとしてもしないほうが安全だと思っています。また、これはAT&Tにセキュリティの脆弱性を通知する前に、メディアに伝えてしまったのが問題だと言われています。

 

セキュリティの脆弱性を発見した場合でも、メディアに直接報告するのではなく、相手企業のセキュリティ責任者に伝えてあげるほうが賢明のようです。むしろセキュリティの欠陥があったのを教えてくれてありがとう!ってなると思います。

参考:https://caselaw.findlaw.com/us-3rd-circuit/1663334.html

Googleのキャッシュ機能と著作権問題

Gordon Roy Parkerという作家が訴訟を起こした事件です。もともとParkerは、自分の書籍の1章をUsenetの掲示板で公開していました。しかし、あるときにその公開を取りやめたにも関わらず、ウェブサイトの一部を検索結果として表示されており、著作権法違反になるのではないかと訴訟を起こした事件でした。

結局Google側が勝訴したようです。他にも似たような事例がありましたが、キャッシュに関しての事例は著作権法違反にはならないようです。

参考:キャッシュは著作権侵害にあたらず–グーグルが裁判で勝訴