だれかのなにかに役立てるウェブ制作者YoTaの趣味ブログ

Googleスプレッドシート 証券コード入力⇒株価など自動取得&表示する方法

先日、Googleスプレッドシートを利用し、証券コードの入力だけで、銘柄名・株価・安値や高値・PERやPBR・配当金や優待内容・財務状況・企業概要を自動取得するwebスクレイピングなシートを作ってみました。

結論は、遅すぎて使い物にならなかったのですが、その時のやり方・ノウハウをカンタンにまとめます。

前提知識

webスクレイピングを利用

webスクレイピングとは、web上のデータから抽出したものをデータベースやGoogleスプレッドシートに表示させることを言います。

今回の場合、Googleスプレッドシートの関数機能を利用して、銘柄情報を公開しているサイトにアクセスし、そこにあるデータを自動的に取得して、シート上に表示することをします。

今回はImportXML()を利用する

Googleスプレッドシートでは、株価などの情報を取得する関数がいくつか準備されています。

ImportHTML()
 >指定したHTMLページ内の表やリストからデータをインポートする
 >詳しくはこちら

ImportXML()
 >XML、HTML、CSV、TSV、RSS フィード、Atom XML フィードなど、さまざまな種類の構造化データからデータをインポートする
 >詳しくはこちら

Google Finance()
 >Google Finance から現在や過去の証券情報を取得する
 >詳しくはこちら

スピードだけ考えるなら、「Google Finance()」を使うのがベストだと思いますが、これだと決められたパラメータ情報しか取得できず、優待内容などはゲットできないので、今回はImportXML()を使います。

ImportXMLの欠点

後述しますが、量が増えると、一気に処理が重くなってしまうことです。

たとえば、200個の銘柄の証券コードを入力して、それぞれの情報を取得しようとすると、読込にひどく時間がかかってしまって、使い物にならないです。

あと、タイムラグがあるため、株式市場のリアルタイムな情報を取得できるわけではないため、注意が必要です。

作ってみた完成品

ImportXMLの基本構文

こちらが基本的な構文になります。

/* 基本構文 */
=ImportXML(CONCATENATE("参照先のURL","証券コードの4桁の番号"),"XML情報")

自分の望む文字列を指定することで、好きなデータをひっぱってくることができます。

ただし、参照先のURLは、証券コードの番号を含む文字列になっていることが条件となります。(URLと証券コードの文字列を結合させて認識させる。)

また、XML情報は、デベロッパーツールを開いて解析したソースコードをXML形式にして入力しないといけないので、少しwebの知識がないと作成できないかもしれません。

作ったサンプルシート

先にキャプチャーを貼ります。

まずは「v_sheet」という情報取得に必要となるパラメータ情報をまとめたシートを準備しておきます。(読込に必要なパラメータは分けておくと、管理や更新が楽なので、こうしてます。)

で、一覧シートのほうにまとめて出力させます。

上記の場合は、SBI証券の個別銘柄「ギグワークス」のページにアクセスして、銘柄名や現在株価、年初来・上場来の情報をひっぱってきています。

A列の証券コードに番号を入れて、B列以降のセルに関数をコピペすると、自動で情報取得ができる作りになっています。

しかし、これには一つ欠点があります。

冒頭でも述べたように、読込量が増えると、処理制限がかかってしまうのです。

ImportXMLの処理制限

Googleスプレッドシートでは、ImportXMLを使うと、そのボリュームに応じて、処理速度に制限がかかります。

一つのデータを読込するくらいなら問題ないのですが、5個~10個以上になると、すぐにパンクしてしまいます。

データが増えると「Loading」の嵐で使い物にならない

こちらは試しに、証券コードをたっぷり増やしてみたシートです。

見ると分かりますが、読込できている場所が非常に少なく、処理が重すぎるあまり、「Loading」ばかりになってしまっています。

要するに、使い物にならないということです 笑

GoogleスプレッドシートのImportXMLでは一覧シートは作りにくい

まだ試してないのですが、関数「Google Finance()」は、Google側で用意した、株価関連のデータを自動取得してくるものですので、こっちを使って一覧シートを使うと、まだ実用的なものが期待できるのかなと思っています。

ただし、読込できるパラメータは、オプション指定で決まっているものだけになりますので、すべて100%自分好みの一覧シートを作るのは、なかなか難しそうです。

あとはpythonなんかで自作アプリでもしてみないとダメかなと思います。

webスクレイピングは禁止されているページもあるので注意

当然のことですが、webスクレイピングは、指定したURLのページにアクセスをします。

つまり、webページを公開しているサーバーに少なからず負荷をかける行為であり、それが機械的に数百以上の通信を一気に……となると、F5連打以上のDOS攻撃にもなりかねません。

webサイトによっては禁止もしていますし、使う側も十分に確認&配慮した上で使用する責任がありますので、気をつけてください

まとめ

Googleスプレッドシートでは、ImportHTMLやImportXMLで、好きな情報を取得(webスクレイピング)できますが、欠点として処理が重いので、実用性はないです。他の手段を模索することをオススメします。

ページ上部に戻る