はじめに

Webページから特定の情報、要素を取り出したいことはよくあるかと思います。
あるECサイトのある商品の在庫や価格を出店店舗ごとに把握したいとか、ある事象についてかいてある販売本を抽出するなど)
そういう要素抽出のことをWebスクレイピングと呼びます。そういったスクレイピングを行うときにもPythonが良く利用されます。

今回はそのスクレイピングについてご紹介します。

スクレイピングとは

先述の通り、ウェブサイトから情報を抽出すること、またその技術のことをスクレイピングといいます。
ウェブスクレイピングは多くの検索エンジンによって採用されている技術でもあり、おなじみのGoogleやYahooなどでも積極的に利用されています。
一般的にはHTMLフォーマットからデータベースやスプレッドシートにデータを変換して格納する方法が有名かと思います。
ウェブスクレイピングの用途は、オンラインでの価格比較、ウェブサイトの変更検出、研究などさまざまあります。

データ収集(クローリング)との関係

データ収集の必要性がネットでも増しています。その理由としてはやはり機械学習のブームが大きなものになります。
機械学習のデータとしてテキストや画像を用意する場合も大量の情報が必要ですが、それらを手で収集するのには限界があります。
そういった情報を自動的に集める必要が出てくるわけで、そんな場合にクローリングが注目されます。
情報を収集したら、そこから必要な情報を抽出するのがスクレイピングとなります。
意味を混同したり、取り違えたりすることもあるので気を付けましょう。

クローリングと共にスクレイピングのニーズが拡大

少し前までは、クローリングのためのサーバなどは自前で用意しなければならず、大規模なデータ収集は個人や小規模では難しい状況でした。
ところが最近ではAWSなどが登場してサーバーサイドに詳しくないソフトウェア開発者でも苦労せずクローリングができる環境が整ってきました。
個人もそうですが、いままで投資の面で二の足を踏んでいた企業が積極的にクローリングを行えるようになってことで、併せてスクレイピングの重要性も高まってきました。
ニーズが拡大した理由を改めてまとめると、以下のようなものが挙げられます。

インフラが簡単に用意できるようになった

パブリックドメインなどオープンなデータが増えてきたため、対象データが多くなった

データ分析ブームが起きている

Pythonはデータ分析のライブラリが充実しているので、スクレイピングといえばPythonを利用しているエンジニアも多いです。

スクレイピングを体験する

今回は、CSSセレクタを使用してデータを取得する方法をご紹介します。

CSSセレクタとは

CSS(カスケード・スタイルシート)を記載する際には以下のように書くことが多くあります。


#test{
color: #red;
}
#test > .subtest{
color: #blue;
}

この中での「#test」及び「#test > .subtest」がCSSセレクタとなります。
一般的にはこれらを使用してHTMLを装飾します。
今回の場合なら「#test」で指定された部分は文字色が赤色、更にその中で「.subtest」で指定された部分は文字色が青色になるといった具合です。

Pythonコードを生成する

今回WEBスクレイピングするにあたっては、Pythonとスクレイピングに特化した機能を持つライブラリ「BeautifulSoup」を使用します。
採ってくるデータは、日本経済新聞の日経平均株価を取得します。


# coding: UTF-8
import urllib2 #URLを開くためのライブラリ
from bsoup import BeautifulSoup #スクレイピング機能のためのライブラリ

# データを取得するURL
url = "https://www.nikkei.com/markets/kabu/"

# URLアクセスした結果やHTML内容を取得する
cont = urllib2.urlopen(url)

# HTML部分だけを取り出して、解析結果を取得する
bs = BeautifulSoup(cont, "html.parser")

# 解析結果から、CSSセレクタを指定して、その場所に書かれているした文字列を表示する
print bs.select_one("#CONTENTS_MARROW > div.mk-top_stock_average.cmn-clearfix > div.cmn-clearfix > div.mkc-guidepost > div.mkc-prices > span.mkc-stock_prices").text

CSSセレクターの指定方法

自分で作成したHTMLなどではもちろんわかりきっていますが、今回のように公開されている情報とはいえ、一般的なWEBサイトはなかなか複雑で、CSSセレクタと一口にいっても特定が難しいのが現実です。
実際、先ほどの日本経済新聞のサイトでは、


#CONTENTS_MARROW > div.mk-top_stock_average.cmn-clearfix > div.cmn-clearfix > div.mkc-guidepost > div.mkc-prices > span.mkc-stock_prices

と指定しないと株価が取得できません。
こういったものを手作業で書くのは、間違いのもとですし、そもそも見つけるのが大変です。
WEBブラウザでは、こういったCSSセレクタがどういった経路になっているかを自動的に生成してくれる機能があります。
例えば、Google Chromeの場合には以下の手順でCSSセレクタを取得できます。

画面を右クリックして検証をクリックすると開発者ツールが表示されます。

取得させたい値が存在する要素(テキストボックスやラベルなど)を右クリックして「copy」→「Copy Selector」を選択します。
これでGoogle Chromeが自動的に生成したCSSセレクターがクリップボードにコピーされています。

コピーした値を、さきほどのPythonコードの最終行、select_one関数の引数に指定すれば完了です。

Pythonコードを実行する

実際にコードを実行し、日経平均株価を取得します。

(実行結果)

さいごに

いかがでしたでしょうか。
こういったオープンデータが増えてきたことでスクレイピングもずいぶん一般的になりました。
ただし、こういったデータを取得するということは相手方のサーバにアクセスし、負荷をかけていることを忘れずにお願いします。
1度実行するぐらいでしたら、それは通常のWEBアクセスと変わりませんが、これを定期的に自動実行したり、大量取得したりする場合はかなりの負荷になります。
場合によっては、問題になったことも過去ありましたので、スクレイピングする際には、自分自身だけでは完結しない環境ということを念頭において作業してください。

DMM WEWBCAMPについて

DMM WEBCAMPは3ヶ月間で未経験から即戦力エンジニアを育成する転職保障付きのプログラミングスクールです。1ヶ月でプログラミング・Webデザインを学ぶ通い放題の「ビジネス教養コース」も展開しています。

DMM WEBCAMPを運営する株式会社インフラトップ では、「学びと仕事を通して人生を最高の物語にする」という理念で会社を経営しています。

キャリアアップを目指す方は、この機会に私達と一緒にプログラミングを学んでみませんか?

8月枠も残りわずか】当社人気の転職保証コース
プログラミング学習から転職成功まで導く、当社人気のDMM WEBCAMP(旧WEBCAMP PRO)。
7月受入枠は満員となっております。8月枠に向け、お早めの申込みをオススメします。
・フリーランスのように自由に働きたい
・会社の将来が不安だ
・給与や待遇に不満がある

上記にあてはまる方は、ぜひご検討ください!

おすすめの記事