前回の記事で、米国株の株価をスプレッドシートで管理する方法はわかったけど、
日本株も同じように取得して管理できないかな。
(ZACK IT編集)
GoogleFinance関数では一部の指数以外日本株の株価取得や市場情報を
取ることはできないけど、別の関数を活用すればできるようになるよ。
※15~20分程度のディレイ(遅延)あり
GoogleFinance関数を使わずに日本株の情報を取得する方法
Importxml関数をつかう
GoogleスプレッドシートのImportxml関数は、ウェブサイトのデータをシートに直接自動で取り込むための強力なツールだ。特定のURLからXPathを通して指定のコンテンツを抽出することができる。
見ているウェブサイトを右クリックして「検証」を押すか、もしくはF12キーをクリックすると開発ツールが開くのは知っている人も少なくないだろう。そこで指定の要素(例えば株価情報など)を選択して”XPath”というものをコピーすることでImportxml関数を使用することができる。このクエリを活用することで、先述の通り株価情報などがウェブサイト上で更新されれば、Importxml関数で取得しているシートの値も自動で更新※されるためデータの手動入力を省き、情報の更新を自動化することができる。
※Importxml関数自体の自動更新頻度は1時間に1回。速報性には欠けるので注意が必要。
Importxml関数を使う上での注意点
ただしいくつか注意すべき点がある。
まず一つ目は、Importxml関数では情報の自動取得ができないもしくは禁止しているサイトが少なくない点だ。Webスクレイピング自体相手のサイトのサーバーに負荷をかける行為に当たるため十分事前に確認が必要な事項となる。
例えば大手通販サイトのAmazonはこのImportxml関数を使って価格や商品情報を取得することができないのが代表的なところだろう。
2つ目は先述の通り、更新頻度は約1時間に1回程度とGoogleのドキュメントで確認することができるので速報性の高いリアルタイム株価などを知りたい場合は当サイトでも紹介している楽天RSSを使うべきだろう。
というよりもMicrosoft Excelと楽天証券によほどの恨みがない限りは当サイトでは日本株の自動取得及び自動売買には楽天RSSを推奨する。
3つ目は大量の情報を一度に取得しようとするとスタック(取得待ちないしエラー)になる点だ。
大量の銘柄情報の株価や、例えば商品価格のリストを更新したいという用途には向かないため、その場合はより高度なWebスクレイピングスキルが必要になる。
Importxml関数で株価を取得する手順
実際にやる前に、そのサイトがサイト内にあるコンテンツを無許可でスクレイピングすることを禁止していることもあるのでウェブサイトの規約などはよく読んで自己責任のもとで行ってほしい。
米国株などであれば、この方法を使わずとも株価やPER、配当利回りなど取得することが可能なのだが、日本株を取得したい場合はこの方法を使うことでデータ取得が可能となる。
まずGoogleファイナンス(https://www.google.com/finance/?hl=ja)にアクセスして、任意の銘柄情報を開こう。今回はトヨタ株で説明。
次にF12キーを押して検証ツールに入り、右上にある「□←」のようなボタンをクリック。
すると、ウェブページ上の株価や銘柄名などの各要素にマウスを近づけると青く選択されるはずだ。
今回は株価を取得すると想定して説明しているので、株価にマウスオーバーして左クリックする。
すると右端にあるコードの中から、先ほどクリックした株価の要素が選択された。
この要素を右クリックして、Copyのメニューから「Copy Xpath」をクリックして要素をコピー。
スプレッドシートの適当なところに値で貼り付けを行っておこう。あとで使うことになるので、トヨタの銘柄情報を見ているURLもコピーしておいてほしい。
さて、ここまで情報を集めたら後はスプレッドシート上に関数を記述していくだけとなる。
上のシートの場合でセルの位置などは説明するのでその点は注意してほしい。
B11セルに下記の数式を入力。
=IMPORTXML(B8,B9)
B8セルのURL情報と、B9セルに格納されているXPath情報を基にデータを自動取得するための数式となる。
サイトの構成によっては先ほどの説明で簡単に情報取得ができ、自動更新されるケースもあるが今回の場合はこのXPathではエラーが返ってきてしまう。
もう一度ウェブページの検証ツールに戻ろう。
指定のコードを見てみると、Class名が”YMlKec fxKbKc”となっている。先ほどコピーしたXpathには”yDmH0d”となっていたがそのままだと情報を取得できないようだ。
今回はコピーしたXPathはそのまま使わず下記のように修正した。
//*[@class="YMlKec fxKbKc"]
B9に記載していたXPathを上のコードに修正。”@id~”ではなく”@class~”、class名を”YMlKec fxKbKc”に修正して、”[]”以降をすべて削除。
すると、トヨタ自動車(7203)の2024年5月24日時点の終値を取得することができた。
Importxml関数でPERや配当利回りを取得する手順
先ほどと同じように指定のURLとXpathをコピーして貼り付けるだけだとよかったのだがここは一筋縄ではいかない。他の関数の組み合わせも必要になってくる。
まず、Importxml関数で値をシート状に反映させるまでは一緒。データ取得にエラーが出た場合は先ほど同様、XpathをClass名に変えて試してみよう。
さて、株価収益率(PER)や、配当利回りの要素を確認すると”P6K39c”というClass名で表示されていることがわかるのでそれに従ってImportxml関数を反映させたケースが下記の通りだ。
”P6K39c”というClass名で管理されている情報が複数あるためそのまま全部情報取得してしまっている形だ。不要な情報を表示したくない場合は次の関数を合わせて使う。
Index関数はよくExcel(エクセル)でも常連のような関数だが基本はMatch関数と一緒に使ってVLOOKUPのような使い方がメインになるだろう。しかし今回はIndex関数単体で活用していく。
Index関数は取得する範囲における指定の行数、列数の情報だけを抽出できる関数だ。
今回は上の画像でいう”¥3403.00”から”380,793”のデータ範囲から、”9.27”という数値を取得したい(株価収益率)ので6行目の1列目ということになる。したがって先ほど作成したImportxml関数を囲む形でIndex関数を記述する。
=INDEX(IMPORTXML(B8,B9),6,1)
これで、Importxml関数でデータを取得して返された複数の値の中から、PERのみを抽出することができた。この手順をもう一度7行目で試すことができれば、”2.21%”すなわち配当利回りを自動で取得することができる。
まとめ
今回の記事ではGoogleFinance関数を使わずに、Importxml関数及びIndex関数を使用することで、Googleファイナンスのウェブサイトから株価、PER、配当利回りのデータを自動で取得する方法について解説した。
繰り返しになるが、Importxml関数は株価以外のウェブサイトでも活用が可能だが、Webスクレイピングが禁止されているサイトがある点と、膨大な情報量を短時間で取得することはできない点には十分注意いただい自己責任の上で活用法を模索してほしい。