GoogleスプレッドシートはGoogleアカウントを保有している人なら無料で使える表計算アプリです。
このスプレッドシートはGoogle Apps Script(通称GAS)と言われるプログラムを書くことができ、これによりさまざまな作業を自動化することが可能になります。
今回この記事では、Yahooファイナンスから株価を自動的に取得する仕組みを紹介します。
また、メール登録いただいた方には本来3千円で作成している株価収集スプレッドシートのテンプレを無料でプレゼントします。
株価取得ツールの基本構造
株価取得するためのGASを作成するには、大きく以下3つのロジックを作っていきます。
1.Webサイト情報の取得
2.HTMLのパース
3.欲しい情報の取得
1.Webサイト情報の取得
まず、Webサイトへアクセスし、HTML情報を取得します。
GoogleスプレッドシートはWebアプリなので、簡単にスクレイピングも実装が可能です。Pythonと比較しても簡単にロジックを作ることが可能です。
function myFunction() {
var url = "https://finance.yahoo.co.jp/quote/998407.O" // Yahoo!ファイナンス 日経平均
var html = UrlFetchApp.fetch(url).getContentText('UTF-8')
Logger.log(html)
}
このメインロジック2行だけでHTML情報の取得ができます。
まず、HTMLを取得したいサイトのURLを定義し、UrlFetchAppクラスを使ってHTMLを取得します。また、getContentTextにより文字コードの指定もおこないます。今回は”UTF-8”を指定していますが、対象のサイトに合わせ変更してください。
2.HTMLのパース
次に取得したHTMLをパースします。
まずGASでパースを行うためには、事前にParserをインポートする必要があります。
以下手順で簡単にインポートできるので、事前に実施してください。


スクリプトIDに以下をコピーして貼り付け、「検索」ボタンを押せば出てきます
1Mc8BthYthXx6CoIz90-JiSzSafVnT6U3t0z_W3hLTAX5ek4w0G_EIrNw
※2022年11月時点
あとは「追加」ボタンを押せばParserが追加されます。

Parserの役割は対象のHTMLデータから開始文字列と終了文字列に挟まれている文字列の抽出を行います。
HTMLだからといって、HTMLタグを指定する必要はなく、任意の文字列を指定して抽出することが可能です。
Parser.data(‘抽出データ').from(‘開始文字列').to(‘終了文字列').build() //最初に見つけたひとつだけを抽出
Parser.data(‘抽出データ').from(‘開始文字列').to(‘終了文字列')iterate() //複数のデータを抽出
Parserで条件に合致した場合のデータ取得方法として、上記2パターンを使うことが多いです。
iterate()を使う場合は、結果はリスト型で返却されますので、build()とは型が異なるので、後続のロジックで利用する際は注意が必要です。
ParserのHTMLの開始、終了の文字列をどのように指定するかは、WebサイトのHTML構造を見ながら決めていきます。
ブラウザでHTMLを取得したいWebサイトを開きF12キーを押すことで、HTMLを簡単に見ることが可能です。
以下Chromeの例を紹介します。

このエレメント選択を使うことで、Webサイトの中で取得したい情報がどこに書かれているのかを一発で指定することが可能です。あとは、この記述をうまく挟み込める開始、終了文字列を指定できればParserの記述は完了します。
注意点として、開始、終了文字列には可変となるような情報は含まないようにしましょう。Webサイトを見るタイミングや株価のように、対象の株式会社が変わるごとに変化する情報まで条件に含めてしまうと、特定の条件下でしかParserが機能しなくなってしまいます。
3.欲しい情報の取得
パースまでできればあとは欲しい情報を取得し、スプレッドシートのセルへ値を貼り付けます。
情報を取得するため、2で紹介したパースを使い、欲しい情報を取得していきます。
Yahooファイナンスの場合、株価や企業名などは独立してHTMLタグが設定されていますが、参考指標は表形式で定義されています。

それぞれの構造に合わせたパース条件を定義し、表などはリスト型で受け取り、リストから必要な要素を抽出します。
var value_list = Parser.data(html).from('<class="Test">').to('</span>').iterate() //表データをリスト取得
sheet.getRange(1, 4).setValue(value_list[0]) //リストの1番目(表の1番目)をスプレッドsーとのセルへ入力
まとめ
Googleスプレッドシートを利用することで、Webスクレイピングツールを簡単に作ることが可能です。実際、今回紹介した基本3つのロジックだけで、簡単に株価情報を取得することができます。
基礎的なプログラミングスキルがある方は、これらを組み合わせればすぐに応用ツールを作ることもできると思います。
無料プレゼント
プログラミングスキルがない方やすぐにツールを使いたい方へ、本来お客様には3千円で作成している株価収集スプレッドシートの簡易版テンプレを無料でプレゼントします!
こちらのフォームから「株価収集スプレッドシートが欲しい」とメッセージいただければ、ツールアドレスを送付させていただきます。このツールは、証券コードをスプレッドシートに記載するだけで、Yahooファイナンスから株価を自動的に取得してくれます。

このツールはテンプレをそのままコピーして、ご自身の環境ですぐにご利用可能です。また、ご自身でカスタマイズし、より使いやすいツールを作られた方は、送り返していただけましたら、こちらのブログでも紹介させていただきます!
無料配布になりますので、YahooファイナンスのHTML変更には対応しておりませんのでご了承ください。メンテナンスについては別途ご連絡いただければ有償にて対応させていただきます。
