【作業フォルダーを決める】
次に、Python のスクリプトやダウンロードした月足四本値データを置くフォルダーを決めます。
自分はコンピューターにログインしたときのユーザーフォルダーにしています。
macOS であれば、Finder を開いてから、「移動」メニューの「ホーム」を選択したときに表示される場所です。
そこに任意のテキストエディター(「テキストエディット」など)で、stockcode.txt というテキストファイルを新規作成します。
「テキストエディット」で作成する場合は、「フォーマット」メニューで「標準テキストにする」にしておくのを忘れないようにしてください。
何か実在する証券コード(例: 5401)を書き込んでから、ファイル名を「stockcode.txt」にして、UTF-8 形式で保存します。
ちなみに全角で「5401」としてはダメです。
日本語入力プログラムをオフにして、半角で「5401」と入力します。
保存場所は先の「ホーム」です。アカウント名で表示されるフォルダーです。
【スクリプトファイルを用意する】
「stockcode.txt」と同じフォルダーに、以下のソースコードをコピペしたスクリプトファイルを用意します。
ファイル名はご自身で分かれば任意で良いのですが、例として「get_stockquotes.py」とします。
import datetime import os from os.path import exists,isfile import pandas as pd import requests import ssl ssl._create_default_https_context=ssl._create_unverified_context import subprocess import sys # レコードの取得期間を定義する begin='19830101' # 前月最終日を end に指定する (未完了な当月の月足取得を回避する) today = datetime.datetime.today() end_of_the_last_month = datetime.datetime(today.year, today.month, 1)+datetime.timedelta(days=-1) end = end_of_the_last_month.strftime("%Y%m%d") # ファイルから証券コードを取得する codef='stockcode.txt' if isfile(codef): # ファイルの実在確認 f=open(codef, 'r', encoding='utf-8') code = f.read().rstrip("\n") else: # ファイル不在時にエラー表示 print(f"{codef} ファイルが見つかりません。") # 株価情報の保存先フォルダーの実在確認 (無ければ新規作成) outdir = "quotes_data" if not exists(outdir): os.mkdir(outdir) outf = outdir + '/' + code + '.csv' n = 25 # 時系列の月足ページ数上限 url_list = [] for i in range(1, n + 1): query = 'https://finance.yahoo.co.jp/' + 'quote/' + code \ + '.T/history?from=' + begin + '&to=' + end + '&timeFrame=m&page=' + str(i) url_list.append(query) # 取得先URL一覧をファイルに出力する list ='url_list.txt' with open(list,'w') as f: f.writelines([d+"\n" for d in url_list]) f.close() # 取得先URLにアクセスし、月足株価の四本値を取得する urls=[] f = open(list, 'r') urls = f.readlines() # 上場廃止済みの証券コードを指定したときの例外処理 res = requests.get(urls[0]) try: res.raise_for_status() except requests.exceptions.HTTPError as e: print(f"コード: {code}\n指定されたページは表示できません。\n{urls[0]}\n処理を中断します。\n") sys.exit() else: print(f"{code} の月足四本値を {outf} に出力します。\n") try: attrs={'class': '_13C_m5Hx _1aNPcH77'} df = pd.concat([pd.concat(pd.read_html(url, header=0, attrs=attrs), axis=0) for url in urls]) except Exception as e: print(f"{code} のレコード取得に失敗しました。\n") else: # 取得レコードをCSV形式のファイルに出力する df.to_csv(outf, encoding='shift_jis', mode='w', columns=["日付","始値","高値","安値","終値","調整後終値*"], index=False) print(f"{code} の月足四本値を {outf} に出力しました。\n保存先フォルダーを開きます。\n") pass if exists(outdir): subprocess.call(["open", outdir]) else: print(f"{outdir} フォルダーが見つかりません。")
ここまでできたら、「アプリケーション」フォルダー内の「ユーティリティ」にある「ターミナル」を起動します。
python3 get_stockquotes.py [return]
を実行します。
[return] は、ここで Mac のリターンキー (Windows の [Enter] キー) を押してくださいという意味です。
最初のうちは実行すると Python がエラーを出すと思います。
上記ソースコードの冒頭で import しているモジュールを Python が知らないとエラーを出します。
以下のモジュールくらいはターミナルで組み込んでおくと良いかもしれません。
いちどモジュールを組み込んでおけば、次回実行からはエラーを出しません。
(足りないモジュールがあればエラーを出します。)
pip3 install datetime [return] pip3 install pandas [return] pip3 install requests [return] pip3 install subprocess [return]
つつがなくスクリプトが実行されると、
5401 の月足四本値を quotes_data に保存しました。 保存先フォルダーを開きます。
というメッセージがターミナルに表示され、Finder が保存先フォルダーを開きます。
そこに 5401.csv というファイルができていればOKです。
csv ファイルを開くと、見憶えのある形式のデータが保存されています。
ちなみに、株式分割や株式統合のあった月の株価は調整されています。
対象月の調整前レコードを日足四本値で確認しておく必要があるかと思います。
stockcode.txt の中身を実在する別の証券コードに書き換えて保存後に、都度
python3 get_stockquotes.py [return]
を実行すれば、新たに csv データを取得できます。
ご不明な点がございましたら、コメント欄に書き込んでください。
分かる範囲で回答いたします。