Seleniumを使った全銘柄時系列CSVデータの自動ダウンロード

株とPython─自作プログラムでお金儲けを目指す本 (技術書典シリーズ(NextPublishing))

株とPython─自作プログラムでお金儲けを目指す本 (技術書典シリーズ(NextPublishing))

先日購入した「株とPython―自作プログラムでお金儲けを目指す本」をゆっくり読んでいます。

2.4.1「過去のデータを一括取得」でseleniumを使ったYahoo!ファイナンスVIP倶楽部から全銘柄の時系列CSVデータを 自動ダウンロードする方法について説明されています。

本の中ではFirefoxをブラウザに使用していましたが、Chrome向けにコードを書き換えてみました。 銘柄コードのrangeについても、全銘柄を対象に変更しています。

なお、オリジナルのコードは下記から入手できます。 github.com

以下が書き換えたコードです。実行する場合は自己責任でお願いします。

# -*- coding: utf-8 -*-
from selenium import webdriver
from selenium.common.exceptions import NoSuchElementException

import time

def download_stock_csv(code_range, save_dir):

    options = webdriver.ChromeOptions()
    prefs = {"download.default_directory" : save_dir}
    options.add_experimental_option("prefs", prefs)
    driver = webdriver.Chrome(options=options)
    driver.get('https://www.yahoo.co.jp/')
    input('After login, press enter: ')

    for code in code_range:
        print(code)
        url = 'https://stocks.finance.yahoo.co.jp/stocks/history/?code={0}.T'.format(code)
        driver.get(url)

        try:
            driver.find_element_by_css_selector('a.stocksCsvBtn').click()
        except NoSuchElementException:
            print("Exception.")
            pass
    
    time.sleep(5)

if __name__ == '__main__':
    import os
    download_stock_csv(range(1301, 9998), os.getcwd())

全銘柄のダウンロードには7時間程度かかりました。ファイルサイズはTotal 710MB程度になります。

データが入手できたので、次はSQLiteに格納したいと思います。