日本の上場企業約3700社の4本値を取得するコードです。
例によって今回も株式投資メモを使います。これだけデータを提供してくれているのはありがたい限りです。以下のコードになります。https://kabuoji3.com/stock/では企業数が変わるので今表示できる最大のページに変えてください。ライブラリはpandasのみでOKです。
import pandas as pd
#https://kabuoji3.com/stock/の最終ページ番号
last_page=34
#jupyternotebook上で5000行まで表示させる
pd.set_option('display.max_rows',5000)
URL='https://kabuoji3.com/stock/?page='
for num in range(1,last_page+1):
df_part=pd.read_html(URL+str(num))[0] #表を取得
df=pd.concat([df_part, df])#結合
df= df.reset_index(drop=True)#indexをリセット
df2 = pd.concat([df, df['コード・名称'].str.split(' ',1, expand=True)], axis=1).drop('コード・名称', axis=1)#コード・名称を分割
df2.rename(columns={0: 'コード', 1: '名称'}, inplace=True)#リネーム
df2=df2.iloc[:,[5,6,0,1,2,3,4]]#並び替え
df2= df2.sort_values(by=["コード"], ascending=True)#コードでソート
df2 = df2.reset_index(drop=True)#インデックスをリセット
df2
このコードでdf2で全企業のデータフレームを取得できました。10行だけ表示させます。
コード | 名称 | 市場 | 始値 | 高値 | 安値 | 終値 | |
---|---|---|---|---|---|---|---|
0 | 1301 | (株)極洋 | 東証1部 | 2903.0 | 2930.0 | 2903.0 | 2916.0 |
1 | 1305 | ダイワ 上場投信-トピックス | 東証ETF | 1868.0 | 1870.0 | 1865.0 | 1868.0 |
2 | 1306 | (NEXT FUNDS)TOPIX連動型上場投信 | 東証ETF | 1845.0 | 1849.0 | 1844.0 | 1845.0 |
3 | 1308 | 上場インデックスファンドTOPIX | 東証ETF | 1825.0 | 1829.0 | 1824.0 | 1827.0 |
4 | 1309 | (NEXT FUNDS)ChinaAMC・中国株式・上証50 | 東証ETF | 41600.0 | 42000.0 | 41550.0 | 42000.0 |
5 | 1311 | (NEXT FUNDS)TOPIX Core30連動型上場投信 | 東証ETF | 822.0 | 823.0 | 821.0 | 823.0 |
6 | 1312 | 小型コア・インデックス連動型上場投信 | 東証ETF | 19940.0 | 20110.0 | 19940.0 | 20110.0 |
7 | 1313 | サムスンKODEX200上場指数投資信託 | 東証ETF | 3480.0 | 3540.0 | 3480.0 | 3540.0 |
8 | 1319 | (NEXT FUNDS)日経300株価指数連動型上場投信 | 東証ETF | 333.0 | 333.0 | 333.0 | 333.0 |
9 | 1320 | ダイワ 上場投信-日経225 | 東証ETF | 27390.0 | 27430.0 | 27370.0 | 27400.0 |
これで1301からコードごとに4本値を取得できました。
銘柄コード一覧をリストで取得するには次のコードを使ってください。
code_list=df2.コード.values.tolist()
code_list
['1301',
'1305',
'1306',
'1308',
'1309',
'1311',
'1312',
'1313',
'1319',
'1320',
'1321',....省略
またエクセルに出力する場合にはクリップボードにコピーしてから貼り付けをします。
df2.to_clipboard()
pandasのread_html()を使えば煩雑なコードが不要で表を取得できるのでかなり便利です。データ数が多くなるとエクセルでは重くて使い物にならないのでpandasが使えて損はないです。
コメント