株式投資をしていると、複数口座の株を合計して損益計算したくなったりしませんでしょうか。
また、データをスプレッドシートに取り込んで加工し、細かな分析をしてみたいという事もあるでしょう。
自分がまさにそれだったので、Googleスプレッドシートを用いて株価を自動取得(スクレイピング)してみることにしました。
証券コードを入力することで、株価、PER、PBR、EPS、配当利回りなどを自動取得できるようになっています。
方法と、スプレッドシートのデータを公開したいと思います。
なお、株探とYahooファイナンスから取得する方法を書いていますが、どうもYahooファイナンスはスクレイピング禁止のようなので、株探を利用するのが良いと思います。
目次
株価を自動取得するスプレッドシート
方法とかどうでもいいから実物データ見せてくれ、という人の為に、まずスプレッドシートを公開したいと思います。
いろんな都合で閲覧のみ可能です。
セルに入ってる関数はコピーできるので、参考にしながら自分で作っていただければなーと思います。
スプレッドシートおよび関数の解説
タイトルが赤色背景の列の「証券コード」「平均取得価額」「保有株数」が手入力が必要な部分です。
ご自身の値を入れましょう。
すると、自動的に背景青色の項目の部分がウェブから取得されます。
背景黄色の項目は便利かなと思って単純にセルを参照して計算させているだけなので、必要ない方は削除してご利用ください。
株価を自動取得するコード(関数)の解説
では、ここからは何をやっているかを簡単に説明してみます。
なお、私も職業プログラマーでは無いので、割と動いたから良いやで使ってる部分はありますので、その辺はご了承ください。
Yahoo Financeからの取得方法
参考Yahoo!ファイナンス掲載情報の自動取得(スクレイピング)は禁止しています
先に紹介した参考用スプレッドシートも、株探に修正しています。
Yahoo Financeからの株価取得方法
=ImportXML(CONCATENATE("https://stocks.finance.yahoo.co.jp/stocks/detail/?code=",A6),"//td[@class='stoksPrice']")
↑コピペ用
=ImportXML(CONCATENATE("https://stocks.finance.yahoo.co.jp/stocks/detail/?code=",A6),"//td[@class='stoksPrice']")
上記ですが、まず前半のオレンジ色ところには取得したいウェブページのURLが入ります。
yahooファインナンスでは、code=の後に、証券コードを足す事で各銘柄のページが生成されているようです。
ですので、スプレッドシートサンプルではA列に証券コードをいれて、URLをくっつけるような作りにしています。
今回サンプルではA6を記載。
これで、https://stocks.finance.yahoo.co.jp/stocks/detail/?code=9432のページが取得できます。
後半の緑色の部分は、該当のURLの中の取得したい要素の部分を指定しています。
具体的にいうと、Full XPathというものを入れればOKです。
下記記事にあるとおり、Googleスプレッドシートでスクレイピングを行い、株探から株価を取得して表示とかやっています。 ウェブサイトからスクレイピングする際に、XPath(Full XPath)を記載 ...
ウェブサイトからXPath(Full XPath)を取得する方法
↑Full XPathの取得方法は、上記記事を参考にしてください。
基本、上記みたいな感じで各セル自動取得(スクレイピング)してきてます。
コードはスプレッドシートの各セルを参考にしてください。
なお、yahoo financeからうまくとれないのは、kabutanからとってきたりしており、そちらは下記で説明します。
株探(kabutan)からの取得方法
PERなどは株探からとってきています。参考に解説します。
株探からのPER取得方法
=IMPORTXML(CONCATENATE("https://kabutan.jp/stock/?code=",A6),"//*[@id='stockinfo_i3']/table/tbody/tr[1]/td[1]")
↑コピペ用
=IMPORTXML(CONCATENATE("https://kabutan.jp/stock/?code=",A6),"//*[@id='stockinfo_i3']/table/tbody/tr[1]/td[1]")
前半はyahooファイナンスと同じです。URLが株探になっているだけです。
後半の緑色部分を株探のFull XPathにしています。
株探からの株価取得方法
=IMPORTXML(CONCATENATE("https://kabutan.jp/stock/?code=",A6),"/html/body/div[1]/div[3]/div[1]/section/div[1]/div[2]/div[1]/div[2]/span[2]")
↑円付き。
=IMPORTXML(CONCATENATE("https://kabutan.jp/stock/?code=",A7),"/html/body/div[1]/div[3]/div[1]/div[2]/table[1]/tbody/tr[4]/td[1]")
↑数値のみ(終値)。
さいごに
自分はサンプルのスプレッドシートから結構自分用に改造して使っていますが、結構満足しています。
ただ、基本スクレイピングですので、取得先サイトの構造が変わるとこちらの関数も修正しないといけません。
しかし、そうそうサイトが変わる事も無いと思うので、それまではこちらの方法でいこうかなと思います。
あと、あまりに取得数が多すぎるとエラー吐きます(多分スプレッドシートの仕様)。
次はGoogle Apps Scriptでなんか作ってみるかなー。
もし質問などございましたら@investor_Y2にtwitterでReplyしていただくか、この記事のコメント欄にでも書いていただければなと思います。
Amazonの欲しいものリストにAmazonギフト券を入れてみたので、本記事がお役に立ちお布施しても良いという神様みたいな方がいらっしゃいましたら、ぜひよろしくお願いします!
めちゃ喜びます!
お布施はこちらからY2にAmazonギフト券を投げ銭する
結構作るのに手間もかかったので「このシートナイスやな」と思ってくれた方は、このブログ記事にリンクくれたり、コメントくれたり、SNSでシェアしてくれたり、Amazonギフト券でお布施してくれたりするととても喜びます。
追記
Yahooファイナンスはスクレイピングを禁止しているようです。
参考Yahoo!ファイナンス掲載情報の自動取得(スクレイピング)は禁止しています
株探を使う必要がありそうです。
サンプルのスプレッドシートもなるはやで変更します。
株探に変更しました。