Pythonのお勉強 スクレイピング 5桁の証券コードで挫折

会社のお勉強会での画像処理やら機械学習でPythonを使わされたことはありましたが、テキストに書いてあるソースを元にしてただけなので、あまり深くお勉強していません。

ラズパイでも深く使ってないですし、仕事上特に必要でもありませんし。。。

でもまぁGWどこにもお出かけしないのでPythonをお勉強すべく、
これを電子ブックで買い

こちらを図書館で借りてきました。

両方図書館であればよかったんですが、特にこの手の鮮度が大事な技術本って図書館にはないんですよね。あっても貸し出されていて待ちがとんでもない数になってたりします。

いまだにパワーポイント97とかって誰がみるのよ?って本もあったりしますよね。

 

ってか正直に言うと、後者の本の方は昨年の11月に図書館で予約してます。それがGW直前にようやく回ってきました。半年待ちですよ。すげーーー

なので、2冊もいらなかったんですが、都合2冊手元にあることになります。

 

で、PythonでExcelをいじっちゃおうってのが最大のテーマ。

今まで面倒なことはVBA使っていたのでそれをPythonに置き換えられると便利になるのかな?って感じで始めてみました。

で、株価をWebから読み取ってきてExcel管理ってのをやらしてみたわけです。

今まではVBAでとあるサイトからQueryTables.Addで表をがばっと取ってきてワークシートに貼り付けてから処理してました。スクレイピングってやつですね。

それをPythonでやらそう!

で、調べて
Excelをいじるのはopenpyxlっていうライブラリを使うと楽ですね。
Webから取ってくるのは先の本を読んでBeautifulSoupってのを使おう。

ってことでやり始めて、私が取ってこようとしていたサイトはJavaScriptで動的に生成されているサイトの様で、VBAでは取ってこれるんだけど、BeautifulSoupでは取ってこれなかった。

色々と調べたりしてて、yahoo-finance-api2 って便利なものがあることを発見。

これを使って、試行錯誤しながらなんとか取り込みプログラムを作ってみました。
VBAより取り込みが速いので置き換えのメリットはありそうです。

VBAでやってた個別銘柄の取得までできるようになって、よし、手持ちの株の情報を読み込ませてみようと取得銘柄全部forループで回して取り込ませてみたら、一つだけ取り込めない。

証券コード25935 伊藤園第1種優先株式

5桁のコードには対応していないのか?データが無いよってエラー。

これが取り込めれば、全銘柄の集計するだけで終わるんだが。。。

これ↓取り込みの基本部分です。

import sys
from yahoo_finance_api2 import share
from yahoo_finance_api2.exceptions import YahooFinanceError

my_share = share.Share('2593.T')
symbol_data = None

try:
    symbol_data = my_share.get_historical(share.PERIOD_TYPE_DAY,7,
        share.FREQUENCY_TYPE_DAY,1)
except YahooFinanceError as e:
    print(e.message)
    sys.exit(1)

print(symbol_data)

このコード。5行目の指定が2593.TだったらOKですが、25935.TとしたらNGです。
困った。。。

 

コメント

タイトルとURLをコピーしました