はじめに
スクレイピングとは?
スクレイピングとは、Webページにある様々な情報を取得する行為です。pythonなどのプログラミング言語の変数に代入させることができます。
どんなときに使うのか?
例えばあなたが、天気予報の状態からユーザに何かの情報を提供するwebアプリケーションや、株価が上がるか下がるかを予測するシステムを作りたいとします。このとき、事前の分析のために天気や株価の情報を集めることが必要になりますが、人間がデータを記録するのも大変です。また、リアルタイムに動くシステムを作るには、時々刻々と更新される天気や株価を取得するプログラムを書かねばいけません。こういったときに、スクレイピング技術を使用します。
スクレイピングの注意点と対策
スクレイピングはてきとうにやると違法になる:
スクレイピングは、相手がWebページとして公開しているサーバからデータを吸い出す行為です。これには、二つの問題があります。1つ目は、相手のサーバに負荷をかける点です。例えば、極めて短い間隔でデータを取得するプログラムを書き、相手のサーバをダウンさせてしまった事件があり、そのスクレイピングを行なったプログラマは、実際に逮捕されています。相手のサーバに侵入する行為ですから、不正アクセスなどの問題も出てきます。法律には明るくないので詳しくは、「スクレイピング, 違法, 判例, 逮捕」などで検索して、自分なりに危機感を持ってやってください。
とりあえずやっておくべき対策:
逮捕されないために、以下3点を遵守してください。3秒に1回程度のデータ抽出にする、一度に大量のデータを取り出さないようにする、そのWebサイトが、スクレイピングを許可しているかどうかなど。
スクレイピング許可サイトの調べ方
スクレイピングが許可されているかどうかを知るために、相手のwebページのルートディレクトリにある「robot.txt」, 「robots.txt」にアクセスして、許可状況を調べます。
例えば、楽天証券には、株価や為替など、いろんな情報が日々更新されています。
楽天証券:
https://www.rakuten-sec.co.jp
このサイトは、株価を取り出すことは許可されているでしょうか。このルートドキュメントにあるrobot.txtにアクセスしてみましょう。
楽天証券のスクレイピング許可状況:
https://www.rakuten-sec.co.jp/robots.txt
User-Agent: * Disallow: /ITS/fee/ Disallow: /ITS/product/ Disallow: /ITS/service/ Disallow: /ITS/investment/ Disallow: /ITS/support/ Disallow: /ITS/company/ Disallow: /ITS/topinfo/ Disallow: /ITS/system_info/ Disallow: /ITS/IPOPDF/ Disallow: /cgi-bin/ Disallow: /ITS/PDFDL/ Disallow: /ITS/RN/pdf/ Disallow: /nisa/account/nisa_resident/pdf/ Sitemap: https://www.rakuten-sec.co.jp/sitemap_index.xml
Disallow(不許可)がずらーっと並んでいます。Disallowにあるデータをスクレイピングすると、アウトです。なお、Allow(許可)が一つもありませんので、楽天証券からスクレイピングするのはあまり良くないでしょう。
続いて、株式投資メモを調べてみます。ここも、株価が公開されています。
株式投資メモ:
https://kabuoji3.com/
株式投資メモのスクレイピング許可状況
https://kabuoji3.com/robot.txt
https://kabuoji3.com/robots.txt
User-Agent: * Allow:/ Sitemap:http://kabuoji3.com/sitemap/sitemap-index.xml
「/」にallow(許可)がついています。「/」はルートディレクトリですから、全部スクレイピングして良いということを示しています。「User-Agent: *」は、スクレイピングを行う対象であり、*は全員を意味しています。つまり、全員にスプレイピングを許可していることになります。
次に、yahooファイナンスを調べてみます。これは、robot.txtではなく、明示的にwebページで禁止されていました。
こちら
こんな感じで、うまいことスクレイピング許可サイトを探し当てて、スクレピングを行いましょう。なお、許可されているからといって、アクセスしまくることで相手のサーバに迷惑をかけると、裁判を起こされる可能性があるので注意しましょう。
インストール
pythonでスクレイピングを行うために、ターミナルコマンドで以下を打ち込んでください。
pip3 install beautifulsoup4 pip3 install requests
beautifulsoup4はpythonでスクレイピングを行うためのライブラリ、requestsはpythonでweb接続するためのライブラリです。これで準備okです。