Web上のデータを部分的に取得することをスクレイピングと呼びます。今回はAPIで提供されていないデータをスクレイピングしてスプレッドシート上に表示させる方法について解説していきます。
スプレッドシートでスクレイピングを行う前に把握しておく点がいくつかあります。
apiが利用されることを前提として提供されているデータである一方、スクレイピングとはいわば勝手にサイト内の情報を抽出する行為となります。このため、スクレイピングしたデータを公の場所で公開したり、商用利用することは規約違反だったり違法行為となる可能性があります。 個人の利用であっても規約には十分配慮するように気をつけてください。
XPath (XML Path Lanugage)とはツリー構造になっているXML/HTMLデータから特定の要素や属性値を指定する構文です。
Webサイトにあるパンくずリストのようなものをイメージするとわかりやすいと思いますが、データのある場所までの見取り図のようなものとなります。
スプレッドシートには外部のXMLをインポートするためのIMPORTXML関数というものがあります。抽出先のURLと、そのページ内の欲しいデータまでのXPathを指定してやる必要があります。
=IMPORTXML(“URL”, “XPathクエリ”)
ここで必要となるXPathは、ソースを見て手書きで書いていくことも可能ですが、Chromeのアドオンを利用すれば簡単に取得できます。難しい、または面倒くさそうという人にオススメです。
今回、XPathの取得にあたり、Webページ上の任意の場所をクリックするだけでXPathを表示してくれるChromeの機能拡張アドオン『XPath Finder』を使用します。(※XPath関連のアドオンに関しては他のものもあると思いますので、各々使いやすいものを利用していただいて問題ありません。)
リンク先からアドオンを追加し、アイコンを表示させるようにします。 アイコンが表示されるようにするには右隣のジグソーパズルアイコンをクリックして『XPath Finder』の横にあるピンマークをクリックしてください。
アイコンをクリックしてアクティブ(赤くなっている状態)でページ上の任意の場所をクリックすると、その要素のXPathがウィンドウ左下に表示されます。
ここまででXPathの取得方法がわかりました。
スプレッドシートでスクレイピングしたデータを表示させたいセルに関数を入るのですが、今回は当サイトのアドレスを指定し、タイトルタグへのXPathを指定しました。
=IMPORTXML(“https://truenote.jp/”,”/html/body/header/div/h1/a”)
ポイントとして抑えておきたいのが、文字列を指定して抽出しているのではなく、あくまで指定した場所に入っている文字列が抽出されているという点です。今回の場合、仮にサイト名が変更したとしたら、抽出されるデータも変わります。
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]”)
スクレイピングを使うと決まったフォーマットの中で数値だけが変わるようなものを取得するのに便利です。 個人的にはGooglefinanceで取得できない指標を海外の金融系ポータルサイトから抽出したりといった使い方をしています。
投資されている方は一度使ってみるとその便利さがよく分かると思うので、ぜひ試してみてください。 Googlefinance関数と組み合わせるとかなり便利なデータシートが作成できますよ。
スプレッドシートの関数については基本的なものを紹介しています。
スプレッドシートの使い方については下記の記事でまとめていますので併せてお読みください。