シュンカの日記

基本的に書きたいことを書いていくスタイル。

日経会社情報のサイトから株価を自動取得するスクリプトを作った

【スポンサーリンク】

日経の会社情報のページから、株価を自動取得してメール送信するスクリプトを作ったのでメモ。

ちなみに、最近株式投資を始め、さらに自宅サーバーを立てて素人ながらLinuxコマンドに触れるようになったので、何かできないかな〜と思いやってみた。

ラズベリーパイを利用したサーバーなので、OSはraspbianとなります。
とはいえLinux系のOSであれば手順は同じです。

curlコマンドを使ってhtml情報を取得

「curl URL」で指定したページのhtml情報を取得できます。
試しに岡村製作所の会社情報のページのhtml情報を取得してみます。
(最近ここの株を買ったのでw)

curl https://www.nikkei.com/nkd/company/?scode=7994

これをそのまま実行すると大量のhtml情報が出力されるので、必要な情報を抜き出していきます。

grepとsedコマンドを使ってデータ整形

今回は現在株価と前日比の情報を抜き出してみます。
開発者ツール(F12)を使って現在株価と前日比の部分のタグを調べます(画像右側)。

f:id:nukano0522:20170910221824p:plain

一応コマンド載せますが、ここは人によっていろんなやり方があると思います。。。
僕はまだ正規表現がなんたるかもよくわかっていないので、もっとスマートにデータ整形するやり方はあるかと。

curl https://www.nikkei.com/nkd/company/?scode=7994 | grep -o "<dd class=\"m-stockPriceElm_value now\">[^<]*" | sed s/"[^>]*"// | sed s/">"//

さきほどのcurlコマンドの後に、パイプ(縦棒)をつかってgrepとsedコマンドをつなげて必要なデータを抜き出しています。
結果は以下。「1,123」という現在株価情報を取り出すことができました。(左下赤枠)
f:id:nukano0522:20170910223843p:plain

同様に、grepとsedでこねくり回すと、前日比も取り出せます。

curl https://www.nikkei.com/nkd/company/?scode=7994 | grep -o "<dd class=\"m-stockPriceElm_value comparison[^<]*" | sed s/"[^>]*"// | sed s/">"//

f:id:nukano0522:20170910223852p:plain

株価情報をcsv形式で保存

取得した株価情報を何らかのファイルに保存しておきます。
今回はCSV形式で保存することにしました。(赤字追加)

curl https://www.nikkei.com/nkd/company/?scode=7994 | grep -o "<dd class=\"m-stockPriceElm_value now\">[^<]*" | sed s/"[^>]*"// | sed s/">"// >> stock.csv
curl https://www.nikkei.com/nkd/company/?scode=7994 | grep -o "<dd class=\"m-stockPriceElm_value comparison[^<]*" | sed s/"[^>]*"// | sed s/">"// >> stock.csv

あとは、このファイルを共有フォルダに保存しておくなり、メール送信するなりの処理を加えておけば、わざわざホームページまで株価情報を見に行かなくても自分の知りたい会社の株価だけをすぐに見ることができます。

僕の場合はメールに送信するようにしました。

curl https://www.nikkei.com/nkd/company/?scode=7994 | grep -o "<dd class=\"m-stockPriceElm_value now\">[^<]*" | sed s/"[^>]*"// | sed s/">"// >> stock.csv
curl https://www.nikkei.com/nkd/company/?scode=7994 | grep -o "<dd class=\"m-stockPriceElm_value comparison[^<]*" | sed s/"[^>]*"// | sed s/">"// >> stock.csv

#メール送信
mail -s "株価通知メール" xxxx@gmail.com < stock.csv   

自動メール送信のやり方については別記事でも書いています。ご参考までに。
sSMTPを使ってラズパイからメール送信する手順 ~グローバルIPの変更を自動メール通知~ - シュンカの日記

スクリプトを定期的に実行する(cronに登録しておく)

以上のコードをスクリプトファイルに保存しておきます。
今回はstock.shとでもしておきます。

stock.sh

#!/bin/bash 

#株価情報取得
curl https://www.nikkei.com/nkd/company/?scode=7994 | grep -o "<dd class=\"m-stockPriceElm_value now\">[^<]*" | sed s/"[^>]*"// | sed s/">"// >> stock.csv
curl https://www.nikkei.com/nkd/company/?scode=7994 | grep -o "<dd class=\"m-stockPriceElm_value comparison[^<]*" | sed s/"[^>]*"// | sed s/">"// >> stock.csv

#メール送信
mail -s "株価通知メール" xxxx@gmail.com < stock.csv

stock.shを自動的に実行したいので、cronに登録しておきましょう。

crontab -e -uユーザー名

でcronの内容を編集できます。

平日(月曜〜金曜)の9時・12時・15時にstock.shを実行するようにしました。

#株価通知
00 9,12,15 * * 1,2,3,4,5 適当なパス/stock.sh 

crontabの使い方は、下記サイトが分かりやすいです。
cron の設定ガイド


ちなみにcronについてですが、
数秒単位でアクセスするなどすると日経側のサーバーに負荷がかかることが予想されるので、良識の範囲内の頻度でアクセスすることを推奨します。

※例えばyahooファイナンスはスクレイピングによる株価の自動取得は禁止されています。


以上でした。