【無料】Pythonによる最新の株価取得

Pythonによる最新の株価取得

今回はPythonを用いた日足チャート取得について書いていきます。以前の投稿でもチャート取得の記事がありました。以下の記事です。

Pythonで株価取得・グラフ表記

以前の投稿では、最新の株価情報は、2営業日前のものでした。つまり、2021年4月23日にプログラム実行すると、2021年4月21日までの株価が取得できます。中長期の投資であれば、最新の株価なしでテクニカル分析してもいいかもしれませんが、短期〜中期の投資にかけては最新の株価は必要不可欠です。(中長期でも最新の株価があるに越したことはありません)

この記事での目的は、無料で最新株価まで取得可能にする事です。もちろん、お金をかければ最新の株価を日足以外にも分足、時間足等でデータとして取得できますが、今回はあくまで無料に拘っています笑。
今回紹介するプログラムは、先ほどの例で言えば2021年4月22日までの株価が取得できます!

株価取得方法

2営業日以前の株価は以前の記事で示した通りの方法で取得が可能です。そのため、今回の肝は、1営業日前の株価を取得することです。そこで、BeautifulSoupというスクレイピングのモジュールを用いてウェブサイトから最新の株価情報を取得していきました。イメージとしては以下の通りです。

株価取得方法のイメージ

Beautiful Soupとは

簡単に言うと、ウェブサイト上に表示されている文字や数字などを取得できるPythonのライブラリです。ウェブサイトはHTML(Hyper Text Markup Language)、論文などはXML(Extensible Markup Language)が主に使用されており、BeautifulSoupはこれらのマークアップ言語のフォーマットに対応しており、ディスプレイに視覚的に表示されているものをデータとして取得できます。

使いこなすためには、マークアップ言語についてある程度の知識が必要かと思いますが、とりあえずページに表示されている数字や文字を取得したいようであれば、インターネットで調べながらやるだけで簡単にできます。

株価取得コード

では実際に書いたコードを紹介します。以下のコードを作成しました。コードを見てもわかる通り?Pandasで取得したデータとBeautifulSoupで取得したデータを結合するのに苦戦しました。絶対シンプルな書き方があると思いますが、今回は勘弁してください笑。結合する際に、BeautifulSoupで取得した1営業日前の株価をPandasのデータフレームに変換しています。

import pandas as pd
import pandas_datareader as data
import numpy as np
from datetime import datetime
from urllib.request import urlopen
from bs4 import BeautifulSoup
from datetime import datetime as dt
import datetime
from matplotlib.dates import date2num
import matplotlib.pyplot as plt
import mpl_finance as mpf

stock_number='6666'
# 指定の期間を切り出し
start='2017-1-15'
stockdata=data.DataReader(stock_number+".jp",'stooq')
#指定期間内の株価取得
stockdata=stockdata[:start]
stockdata=stockdata.sort_index()
date=stockdata.index

def get_stock_information(code):
  try:
      tgt = 'https://kabutan.jp/stock/kabuka?code=' + str(code)
      html = urlopen(tgt)
      bsObj = BeautifulSoup(html, 'html.parser')
      table = bsObj.findAll('table', {'class':'stock_kabuka0'})[0]
      rows = table.findAll('tr')
      for row in rows:
          rec = []
          for cell in row.findAll(['td', 'th']):
              rec.append(cell.get_text())
          del rec[5:7]
      info.append(rec)
      return 'Success'
  except Exception as e:
      return str(code) + ': ' + str(e)

info=[]
get_stock_information(stock_number)

#株価取得時の,を削除
for i in range(1,6):
    info[0][i]=info[0][i].replace(',','')
#20●●年となるように調整
a=info[0][0]
info[0][0]='20'+a

tdate=dt.strptime(info[0][0],"%Y/%m/%d")
info[0][0]=datetime.date(tdate.year,tdate.month,tdate.day)
columns=['Date', 'Open' ,'High', 'Low', 'Close' ,'Volume']
df = pd.DataFrame(info)
df.columns=columns
df = df.set_index('Date')

df.index=pd.to_datetime(df.index)
df=stockdata.append(df)
df=df.astype('int64')

xdate=[x for x in df.index]
ohlc=np.vstack((date2num(xdate),df.values.T)).T
fig=plt.figure()
ax=plt.subplot()
mpf.candlestick_ohlc(ax,ohlc,width=0.7,colorup='r',colordown='b')
ax.grid()

fig.autofmt_xdate()
ax.set_xlim(df.index[-100].date(),df.index[-1].date())
plt.ylabel('Stock Price[yen]')
plt.show()

出力結果

グラフも出力できますが、今回は表の出力結果を確認してみます。取得した日は5月5日なので、ゴールデンウィークということもあり、最新の株価は4月30日となります。結果はこちらです。

取得した株価情報

このように1営業日前の株価を含めて株価取得ができていることがわかります。実際、ウェブサイトで同じものはみれますが、このプログラムを実行することで、データとして取得できるメリットがあります。そして、データを用いて独自に分析を行うことで、個別株式相場の流れが掴めてくるかもしれません。

まとめ

今回は日本株の中でも、個別株における最新株価情報の取得を行いました。PandasとBeautifulSoupを組み合わせることで上手くデータ処理ができたかなと思います。ソースコードも書いてありますので、よかったら試してみてください。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA


ABOUT US
shota_py
メーカー勤務のエンジニアです。 自分の趣味である、「電気回路」、「ガジェット」「株式投資」、「Python」に関する記事をつらつらと書いています