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スクレイピング)できますが、欠点として処理が重いので、実用性はないです。他の手段を模索することをオススメします。