Share!

データ活用の前提として、まず材料となるデータがなければなりません。

そのために例えば機械学習のために大量の画像データを収集する、Webサイトから情報を集め、CSVファイルにまとめるといった作業を行いたい場合があるでしょう。

その際、役に立つのがスクレイピングです。

本記事ではスクレイピングとは何なのか、実際の実行方法、法律・マナーに反しないために押さえるべき注意点など基本事項を初心者向けにわかりやすくご紹介します。

スクレイピングとは“データを収集し使いやすく加工すること”

スクレイピングとは“データを収集した上で利用しやすく加工すること”です。

英単語のscraping(こすり、ひっかき)に由来し、特にWeb上から必要なデータを取得することをWebスクレイピングといいます。ツール・プログラミングでスクレイピングを自動化すれば、冒頭に挙げたようなデータ活用の前準備にかかる手間・時間は大幅に省略可能です。

スクレイピングと同じような意味の言葉にクローリングがあり、こちらは“Web上からデータを収集すること”を意味します。集めたうえで使いやすく抽出・加工するのがスクレイピングの特徴というわけですね。

なお企業や公共機関はスクレイピングをするまでもなく情報を常時提供してくれることもあり、その際使われる仕組みをAPI(詳しくはコチラ)といいます。スクレイピングをする前に必要な情報がAPIで提供されていないか調べてみることをおすすめします。

機械学習、マーケティング、サービス開発などスクレイピングは幅広い領域で活用されています。

スクレイピングを実践するには? Pythonで実際にやってみた

スクレイピングの実践方法は大きく分けて2つあります。

ひとつは無料/有料のスクレイピングツール・サービスを利用すること。「Octoparse」「キーウォーカーWEBクローラー」「ScrapeStorm」「Web Scraper」などが例として挙げられます。かけられるコストとやりたいことがちょうど釣り合うものがあれば手っ取り早い選択肢です。

ふたつめの方法は自分でプログラミングすること。

PythonRuby、JavaScript、PHP、VBAといった言語がプログラミングに用いられます。そのなかでもスクレイピング用のライブラリが豊富、かつプログラミング初心者でも比較的学習しやすいことで知られるPythonで実際にスクレイピングを行ってみます。

1.スクレイピングしたいデータを決定する


まずは、“どこからどのデータを取得したいのか”を決めましょう。

スクレイピングはあくまでも手段です。集めたデータが実際に活用できるかどうかは、ここでどれだけ明確に目的を定められるかに大きく左右されます。

今回は身近な例を提示するためYahoo! Japanニュースの経済カテゴリトップページに掲載された見出し(画像赤枠部分)のテキストとそのリンクをスクレイピングしたいと思います。なお、ブラウザはGoogle Chromeを使います。

2020年6月24日(水)14:42時点のYahoo! Japanニュースの経済カテゴリトップページ

2.対応するHTMLを調べる


スクレイピングの対象が決まったらF12もしくは「右上の縦『…』>その他のツール>デベロッパーツール」でデベロッパーツールを開きます。デベロッパーツールにより、WebサイトのHTML構成を確認することができます。

四角のなかに矢印が記載された「セレクトボタン」(画像青枠部分)をクリックして、カーソルをWebページのスクレイピングしたい情報が記載された部分に持っていきましょう。色が変わって範囲が選択されるとともに、その個所に対応するタグが灰色にマーキングされます。

ここからさらに「▼ボタン」で下の階層を探ることで、手に入れたいデータ(今回の場合見出しのテキストとリンク)を指定するためのタグがわかります。 今回の場合、topicsList_mainクラスのaタグで囲われた部分に目的のデータが記述されているようです。

3.プログラミングを行う


いよいよ、Pythonによるプログラミングを行います。

今回はJupyterLabを開発環境として用いました。 利用したライブラリはスクレイピングでよく用いられる「requests」と「BeautifulSoup4」です。

実際に記述したプログラムは以下の通り。

import requests 
from bs4 import BeautifulSoup

load_url = "https://news.yahoo.co.jp/categories/business" 
html = requests.get(load_url) 
soup = BeautifulSoup(html.content, "html.parser") 

topic = soup.find(class_="topicsList_main") 
for element in topic.find_all("a"): 
     print(element.text) 
     url = element.get("href") 
     print(url)

ご覧の通り、見出しのテキストとリンクが取得できました。

今回は少数のテキストデータとリンクをスクレイピングするだけでしたが、より多くのアクセスを必要とする場合は「time」ライブラリなどを使ってサイトに負荷を与えない配慮が必要になります。

なお、スクレイピングに関わるpythonのライブラリにはほかにもクローリング、スクレイピングに特化した「Scrapy」や解析やグラフ描画に使われる「pandas」「matplotlib」などがあります。

【注意】スクレイピングはルール・マナーを守って! 違法となる可能性も

便利なスクレイピングですが、注意点を守らなければ法律違反・トラブルとなる可能性もあります。

その注意点は、以下の通り。

  • 取得したデータをデータ解析以外に使わない
  • 取得先のサイトに負荷を与えない配慮を徹底する
  • サイトからスクレイピングが禁止されていないか調べる

取得したデータをそのまま公開・販売する、複製して頒布するなどの行為は著作権法で禁止されています。他者の著作物は、情報解析もしくは検索サービス提供のために用いられる場合のみ記録・翻案することが許されます。

また、取得先のサイトに負荷を与えることは偽計業務妨害罪に当たると判断される可能性があります。例えば、2010年に起こった岡崎市立中央図書館事件では、図書館の蔵書システムにアクセスし図書情報を取得していた男性が、システムアクセス障害が生じたことをきっかけに逮捕されました。男性は不起訴となり、また図書館システム自体に問題があったことが指摘されましたが、悪意のないスクレイピングであっても逮捕につながった事例があることは押さえておきたいところです。

また法律違反でなくとも、サイトの利用規約で禁止されているのにスクレイピングを行えば民事訴訟に発展する可能性があります。例えばTwitterは利用規約によりTwitter社による同意のないスクレイピングを禁止しています。

スクレイピング・クローリングに対するサイト側の考えは利用規約のほかに、サイトに設置されたrobots.txtというファイルやHTML内の「robots metaタグ」で確認することができます。

終わりに

データ収集の強い味方「スクレイピング」の基本をまとめました。

データは今やマーケティング、商品開発、企画、営業などほとんどの仕事でかかせない武器の一つです。その調達を助けるスクレイピングは、非常に汎用性の高い技術だといえるでしょう。

法律・マナーの順守は徹底しつつ、まずは興味のある分野のデータを取得することからどんどんチャレンジしてみてください!

【参考資料】
森巧尚『Python2年生 スクレイピングのしくみ 体験してわかる!会話でまなべる!』翔泳社、2019
スクレイピング  【 scraping 】 ┃IT用語辞典e-words
スクレイピングとクローリングの違いとは?コードで解説(Python)┃Workship 
データ収集だけ解説しても意味がない―『Pythonによるクローラー&スクレイピング入門』インタビュー┃CodeZine
PythonでWebスクレイピングする時の知見をまとめておく┃stimulator
柿沼太一「「STORIA法律事務所」ブログ:改正著作権法が日本のAI開発を加速するワケ 弁護士が解説」┃AI+ by IT media NEWS
スクレイピングは違法?3つの法律問題と対応策を弁護士が5分で解説┃TOPCOURT
「SIerとしての責務を果たせていなかった」 図書館システム問題でMDIS謝罪┃ITmediaNEWS
・ 柿沼太一「進化する機械学習パラダイス ~改正著作権法が日本のAI開発をさらに加速する~」┃STORIA法律事務所
政府統計の総合窓口e-Stat
電子政府の総合窓口e-Gov

宮田文机

Eye Catch Design by C.G.

[PR]無料オンラインイベント|updataNOW20

[PR]無料オンラインイベント|updataNOW20

「データ活用」ランキング

人気のカテゴリ