【独習】0から始めるシストレ!

初学者がシステムトレードに挑戦するブログです

株価抽出

開発環境

開発環境としてはGoogle Collaboratory 

を用いて基本的には開発(言語はpython)を行っていこうと考えています。

Google Collaboratory とは、
Colaboratory(略称: Colab)は、ブラウザから Python を記述、実行できるサービスです。次の特長を備えています。

  • 環境構築が不要
  • GPU への無料アクセス
  • 簡単に共有

colab.research.google.com

株価の抽出

システムトレードをするためにも株価を抽出する必要があります。
そこで、今回はこちらのサイトを用いてスクレイビングを実施し株価を抽出したいと思います。
(※スクレイビング先のサイトの変更により下記コードが使えなくなることも考えられますのでご注意ください)

kabuoji3.com
下記のようにurl は https://kabuoji3.com/stock/9532/2020/ になっています。
                   ↑   ↑  ↑
            個別株価データ 証券コード 対象年
対象となる会社・対象年を自身で設定してスクレイビングを行います。

kabuoji3.com

コードリスト

今回のコードでは読み込むコードリストを作って一回で株価抽出します

code	name
9001	東武鉄道
9003	相鉄ホールディングス
9005	東急
9006	京浜急行電鉄
9007	小田急電鉄
サンプルコード
from bs4 import BeautifulSoup
import pandas as pd
import requests
from datetime import datetime

#対象株のデータ抽出
def get_dfs(stock_number):
    dfs = []
    year = [2018,2019,2020] #対象年
    for y in year:
        url = 'https://kabuoji3.com/stock/{}/{}/'.format(stock_number,y)
        headers = {
              "ユーザーエージェントの情報"
        }
        soup = BeautifulSoup(requests.get(url, headers = headers).content,'html.parser')
        tag_tr = soup.find_all('tr')
        head = [h.text for h in tag_tr[0].find_all('th')] #テーブルのヘッドの取得

        #テーブルの各データの取得
        data = []
        for i in range(1,len(tag_tr)):
            data.append([d.text for d in tag_tr[i].find_all('td')])
        df = pd.DataFrame(data, columns = head)

        col = ['始値','高値','安値','終値','出来高','終値調整']
        for c in col:
            df[c] = df[c].astype(float)
        df['日付'] = [datetime.strptime(i,'%Y-%m-%d') for i in df['日付']]
        dfs.append(df)

    return dfs

#複数年のデータフレームの結合
def concatenate(dfs):
        data = pd.concat(dfs,axis=0)
        data = data.reset_index(drop=True)
        col = ['始値','高値','安値','終値','出来高','終値調整']
        for c in col:
           data[c] = data[c].astype(float)
        return data

#作成したコードリストを読み込む
code_list = pd.read_csv('code_list.csv')

#複数のデータフレームをcsvで保存
for i in range(len(code_list)):
    k = code_list.loc[i,'code']#株式コード
    v = code_list.loc[i,'name']#会社名
    dfs = get_dfs(k)
    data = concatenate(dfs)
    data.to_csv('{}-{}.csv'.format(k,v))


ユーザエージェント情報は下記のサイトで入手可能です。
www.ugtop.com