【作業フォルダーを決める】
次に、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'
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)
list ='url_list.txt'
with open(list,'w') as f:
f.writelines([d+"\n" for d in url_list])
f.close()
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:
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 データを取得できます。
ご不明な点がございましたら、コメント欄に書き込んでください。
分かる範囲で回答いたします。