関数 mks_re
の定義:
テキストから銘柄コード、名称、市場を抽出する正規表現を使用します。銘柄コードは通常4桁以上の数字であると仮定し、名称や市場部分の前後のスペースを削除します。
def mks_re(x):
mks_d = re.search(r'\d{4,}', x) # 銘柄コードが4桁以上の数字であると仮定
if mks_d:
dks_c = mks_d.group() # コード
dks_m = x[0:mks_d.start()].strip() # 名称
dks_s = x[mks_d.end():].strip() # 市場
return dks_m, dks_c, dks_s
else:
return x, None, None # コードが見つからない場合、名称だけを返す
関数 bunkatu
の定義:
テキストを名称、コード、市場に分割し、新しい列に格納します。
def bunkatu(df):
df[['名称', 'コード', '市場']] = df['名称・コード・市場'].apply(lambda x: pd.Series(mks_re(x)))
メイン処理:
5ページ分のデータを取得し、※データフレームに結合します。
dfa = pd.DataFrame()
for p in range(1, 6):
dfw = pd.DataFrame()
url_kh = 'https://finance.yahoo.co.jp/stocks/screening/highdividend' + '?page=' + str(p) # 優良高配当株 1~5ページ
dfs = pd.read_html(url_kh) # データフレームの準備
df = dfs[0] # 1つ目のテーブルを取得
bunkatu(df) # 繋がった文字列を分割
dfw = df.reindex(columns=['名称', 'コード', '市場', '配当利回り', 'PER', 'PBR', 'ROE', '自己資本比率', '時価総額', '最低購入代金'])
dfa = pd.concat([dfa, dfw], ignore_index=True) # 1ページごとに結合
dfa.to_excel('優良高配当株.xlsx') # エクセルへ書き出し
エクセルに書き出した結果
まとめ
この記事では、Pythonを使用してYahooファイナンスから優良高配当株のデータを自動取得し、Excelファイルに保存する方法を紹介しました。このプログラムは、データ取得から加工、保存までを自動化することで、手動の手間を大幅に削減し、データの一貫性と精度の向上を目指すものです。
※データフレームとは
Pandas DataFrame とは、表形式のデータを表示、操作する方法の一つです。二次元のデータ構造で、データを行と列に整理してテーブルとして表示します。
pandas DataFrame を使用すると、様々な形式のデータを様々なソースから取り込むことができます。例えば、 pandas の内容をインポートできるのと同時に、 NumPy の配列をインポートすることができます。
コメント