Pythonで無尽蔵から株価データをダウンロード(修正)
いつも私がお世話になっている 汲めども尽きない 無尽蔵 さん。
どうやら今年から株価データのダウンロードURLが変更になったようです。
以前私が書いた記事のスクリプトでは駄目になってしまったので、サクッと書き直してみようかなと。
最低限しか書きませんが、参考になれば幸いです。
ちなみに、新しくなったダウンロードURLは 無尽蔵さんのおしらせ帳のページ で確認できます。
※python2で書いてます。
変更されたところ
お知らせには
■新年よりデーター取得アドレスが変更になりました。
当日データー(2020年1月6日の例)
http://mujinzou.com/d_data/2020d/20_01d/T200106.zip
過去株価データー(2020年1月6日の例)
http://mujinzou.com/k_data/2020/20_01/T200106.zip
日経先物(分足)(2020年1月6日の例)
http://mujinzou.com/k_data/2020/NS2001/NSL_200106.zip
ミニ先物(分足)(2020年1月6日の例)
http://mujinzou.com/k_data/2020/NS2001/NSM_200106.zip
■掲載の継続は保証出来ませんので、ご承知おき下さい。
データー保管の意味合いから、掲載時刻は当日でない
場合もあり、当日更新の約束はできません。
と書かれていました。
過去株価データで言うと、以前は「http://souba-data.com/k_data/2015/15_01/T150105.zip」でした。
ドメイン名が「souba-data」から「mujinzou」に変更になっただけで、ファイル名など大きな変更はなさそうです。
で、■新年よりデータ取得アドレスが変更になりました。
の一文。
「今年からのデータの取得アドレス」なのか、
「今年から過去データすべての取得アドレス」なのか、
いまいち分からなかったので少し調べてみました。
でした。データの移行の問題かもしれませんので、今後変更になるかも?
それと、2014年以前は圧縮形式が lzh ですが無視します(面倒くさいので)。
日足データのダウンロード
以上を踏まえてpythonで書いてみました。
#! /usr/bin/env python # coding: utf-8 import os import codecs import zipfile import requests class Mujinzou(object): ''' 無尽蔵のクラス ''' def __init__(self): ''' 初期化メソッド ''' pass @classmethod def dl(cls, savePath='./', date_str='2015-01-05'): ''' 日足データの保存 ''' if not os.path.isdir(savePath): os.makedirs(savePath) year, month, day = date_str.split('-') fileName = 'T{0}{1}{2}.zip'.format(year[-2:], month, day) filePath = os.path.join(savePath, fileName) # ここから修正部分 if int(year) < 2019: url = 'http://souba-data.com/k_data/{0}/{1}_{2}/{3}'.format(year, year[-2:], month, fileName) else: url = 'http://mujinzou.com/k_data/{0}/{1}_{2}/{3}'.format(year, year[-2:], month, fileName) # ここまで修正部分 response = requests.get(url) if response.status_code != 200: raise with codecs.open(filePath, 'w', encoding=None) as f: f.write(response.content) return filePath @classmethod def load(cls, path='./', date_str='2015-01-05'): ''' 戻り値 {code: [open, high, low, close, volume]} ''' dic = {} year, month, day = date_str.split('-') fileName = 'T{0}{1}{2}.zip'.format(year[-2:], month, day) with zipfile.ZipFile(os.path.join(path, fileName), 'r') as zf: for row in zf.open(zf.namelist()[0]): row = row.split(',') dic[row[1]] = row[4:9] return dic def main(): import time Mujinzou().dl() time.sleep(5) Mujinzou().dl(date_str='2018-01-04') time.sleep(5) Mujinzou().dl(date_str='2019-01-04') time.sleep(5) Mujinzou().dl(date_str='2020-01-06') if __name__ == '__main__': main()
直接スクリプトを実行すれば 2015-01-05 と 2018-01-04, 2019-01-04, 2020-01-06 の株価データがダウンロードできるので問題なさそうです。
以前の記事のスクリプトを修正しただけなので、動作は過去記事を読んで下さい。
また何かあっても私は保証できませんので、サーバーの負荷など十分考慮してください。
おわりに
何かの参考になれば幸いです。
また、汲めども尽きない 無尽蔵 さまには日々感謝しております。
益々のご活躍をお祈り申し上げます。 これからもよろしくお願いいたします。