株価の日足をスクレイピングする。

 最小単位。


import pandas as pd

url = "https://finance.yahoo.co.jp/quote/1400.T/history?from=20000101&to=20220528&timeFrame=d&page=1"
df = pd.read_html(url)[0]

print(df)


これで1ページ20日分取れる。

ここから銘柄名やページをループしてデータを取得していく。

負荷を最低限にするべく、必ず十分なウェイトを取らなければならない。

スクレイピングする以上、アクセス規制も覚悟する。最悪訴訟も。


import pandas as pd
import time

df_all = pd.DataFrame()

for page in range(1,4):

    url = "https://finance.yahoo.co.jp/quote/1400.T/history?from=20000101&to=20220528&timeFrame=d&page=" + str(page)
    df = pd.read_html(url)[0]
    df_all = pd.concat([df_all,df])
    time.sleep(3)
    print(page)

print(df_all)

これで3ページ60日分取得。

何日ループするべきか分からないのでBeautifulSoupで何件データあるかを取得する。


最終的にこうなった。

import pandas as pd
import time

#200ページ*3秒=10分。
#1時間で6銘柄。24時間で144銘柄。
#3600銘柄を取得するには1か月弱。

SAVE_FOLDER = "kabu_data/"

def get_data(url="https://finance.yahoo.co.jp/quote/1400.T/history?from=20000101&to=20220528&timeFrame=d&page="):

    df_all = pd.DataFrame()

    for page in range(1,211):

        try:
            new_url = url + str(page)
            df = pd.read_html(new_url)[0]
            time.sleep(3)
            df_all = pd.concat([df_all,df])
        except Exception as e:
            print(str(page) + "ページではデータが見つかりませんでした。")
            break
        print(page)

    df_all["日付"] = df_all["日付"].str.replace('年', '/')
    df_all["日付"] = df_all["日付"].str.replace('月', '/')
    df_all["日付"] = df_all["日付"].str.replace('日', '')
    print(df_all)

    TAG = url.split("quote/")[1].split("/")[0]
    TAG = TAG.replace(".","_")

    df_all.to_csv(SAVE_FOLDER + TAG + ".csv",encoding="cp932")
    return df_all

get_data()


ページ数とか直した方がいいか。次は銘柄ループ書く。


おわり。


コメント

このブログの人気の投稿

アノマリーEAの評価版 ここからDLできます。

GMOクリック証券のヒストリカルデータをpythonでダウンロードしてみる