スプレッドシートでスクレイピングする方法

スプレッドシートでスクレイピングを行う

Web上のデータを部分的に取得することをスクレイピングと呼びます。 今回はAPIで提供されていないデータをスクレイピングしてスプレッドシート上に表示させる方法について解説していきます。

スクレイピングを行う前の基礎知識

スプレッドシートでスクレイピングを行う前に把握しておく点がいくつかあります。

ポイント
  • スクレイピングは規約で認められていないことがあるため取り扱いには注意が必要
  • スクレイピングにはimportxml関数とXPathを利用する
  • 応用としてCONCATENATE関数を活用すると使いみちが広がる

apiと異なり、規約で禁止されている場合がある

apiが利用されることを前提として提供されているデータである一方、スクレイピングとはいわば勝手にサイト内の情報を抽出する行為となります。このため、スクレイピングしたデータを公の場所で公開したり、商用利用することは規約違反だったり違法行為となる可能性があります。 個人の利用であっても規約には十分配慮するように気をつけてください。

XPathとは

XPath (XML Path Lanugage)とはツリー構造になっているXML/HTMLデータから特定の要素や属性値を指定する構文です。

Webサイトにあるパンくずリストのようなものをイメージするとわかりやすいと思いますが、データのある場所までの見取り図のようなものとなります。

スプレッドシートでスクレイピングを行う

スプレッドシートでスクレイピングを行うには関数を使ってXPathを指定してやることで、目的の場所に格納されているデータを取得します。

IMPORTXML関数を使う

スプレッドシートには外部のXMLをインポートするためのIMPORTXML関数というものがあります。抽出先のURLと、そのページ内の欲しいデータまでのXPathを指定してやる必要があります。

=IMPORTXML(“URL”, “XPathクエリ”)

ここで必要となるXPathは、ソースを見て手書きで書いていくことも可能ですが、Chromeのアドオンを利用すれば簡単に取得できます。難しい、または面倒くさそうという人にオススメです。

『XPath Finder』でXPathを簡単に取得

今回、XPathの取得にあたり、Webページ上の任意の場所をクリックするだけでXPathを表示してくれるChromeの機能拡張アドオン『XPath Finder』を使用します。(※XPath関連のアドオンに関しては他のものもあると思いますので、各々使いやすいものを利用していただいて問題ありません。)

リンク先からアドオンを追加し、アイコンを表示させるようにします。 アイコンが表示されるようにするには右隣のジグソーパズルアイコンをクリックして『XPath Finder』の横にあるピンマークをクリックしてください。

XPath Finderを追加

アイコンをクリックしてアクティブ(赤くなっている状態)でページ上の任意の場所をクリックすると、その要素のXPathがウィンドウ左下に表示されます。

クリックした要素のXPathが表示される

ここまででXPathの取得方法がわかりました。

スプレッドシートでスクレイピングしたデータを表示させたいセルに関数を入るのですが、今回は当サイトのアドレスを指定し、タイトルタグへのXPathを指定しました。

=IMPORTXML(“https://truenote.jp/”,”/html/body/header/div/h1/a”)

ポイントとして抑えておきたいのが、文字列を指定して抽出しているのではなく、あくまで指定した場所に入っている文字列が抽出されているという点です。今回の場合、仮にサイト名が変更したとしたら、抽出されるデータも変わります。

応用:CONCATENATE関数を組み合わせてみる

CONCATENATE関数とは文字列を結合する関数です。

=CONCATENATE(“”,””)

Webページでは、パラメータやURLの名前でページの中身は変わるものの、構成やスクレイピングしたい値のXPathは不変ということがあります。例えば、米国株式のデータを扱っているWebサイトでURLにティッカーコードが付与されていたりといった場合です。

sample.com/companies/の下にAAPL(アップル)やGOOG(グーグル)などのティッカーコードが加わった場合、一々全てを書き換えるのではなく、ティッカーコードを入れるセルを作成し、そこからティッカーコードを読み込み結合するようにしたほうが管理などがしやすいです。

=IMPORTXML(CONCATENATE(“https://sample.com/companies/”,B8),”/html/body/div[1]/div/div[3]/div/div/div/div[2]/span[1]”)

importxml関数にCONCATENATE関数を組み合わせる この場合、C列のセルを下にコピーしてB列のセルにティッカーコードを入れるだけでそれぞれのページから欲しいデータをスクレイピングすることが可能です。

まとめ

スクレイピングを使うと決まったフォーマットの中で数値だけが変わるようなものを取得するのに便利です。 個人的にはGooglefinanceで取得できない指標を海外の金融系ポータルサイトから抽出したりといった使い方をしています。

投資されている方は一度使ってみるとその便利さがよく分かると思うので、ぜひ試してみてください。 Googlefinance関数と組み合わせるとかなり便利なデータシートが作成できますよ。