PythonでYahoo!ファイナンスから企業の株価データを取得してみた

スポンサーリンク
Python
スポンサーリンク

退屈なことはPythonにやらせよう」という本を読んだので、Webスクレイピングに挑戦しています。

以前の記事で生まれて初めてのスクレイピングに挑戦してみたのですが、なかなかうまく行きませんでした。今回は、前回のテーマは一旦おいておいて、Yahoo!ファイナンスから企業の株価データを取得してみたいと思います。


赤枠で囲ったあたりのデータを取得したい。

スポンサーリンク

環境

まずはいつもどおり環境の確認から。
開発用マシンのOSはLinux Mintです。バージョンは、

$ lsb_release -r
Release:  17.2

次に、Pythonのバージョンを確認します。「退屈なことはPythonにやらせよう」はPython3を前提として書かれているため、Python3がインストールされているか確認します。

$ Python3 --version
Python 3.4.3

HTMLコードの解析

スクリプトを書く前に、対象部分のHTMLコードを確認しておきます。
まずは、「詳細情報」の箇所。

<div class="lineFi clearfix">
<dl class="tseDtlDelay"><dd class="ymuiEditLink mar0"><strong>1,825</strong><span class="date yjSt">(06/26)</span></dd>
<dt class="title">前日終値<a class="tips alignPos" href="https://info.finance.yahoo.co.jp/dictionary/" onMouseOver="showTips('zenjituowarine');" onMouseOut ="hideTips('zenjituowarine');" data-ylk="slk:word;pos:1"><img src="https://s.yimg.jp/images/finance/common/image/btn_yougo.png" onmouseover="this.src='https://s.yimg.jp/images/finance/common/image/btn_yougo_on.png'" onmouseout="this.src='https://s.yimg.jp/images/finance/common/image/btn_yougo.png'"></a>
<span class="tips yjSt" id="zenjituowarine">前営業日、最後の取引値</span></dt>
</dl>
</div>

このあたりを見ていくと、

<

div class=”lineFi clearfix”>の後のタグの値を拾っていけばなんとかなりそうです。参考指標や信用取引情報も同じ感じで行けそうですね。

作ったスクリプト

#! python3

import sys,requests, bs4

res = requests.get('https://stocks.finance.yahoo.co.jp/stocks/detail/?code=' + sys.argv[1])
soup = bs4.BeautifulSoup(res.text,'lxml')

print(soup.select('dd[class="category yjSb"]')[0].getText())
print(soup.select('table[class="stocksTable"] > tr > th[class="symbol"]')[0].getText())

elems = soup.select('div[class="lineFi clearfix"] strong')
for e in elems:
    print(e.getText())

elems = soup.select('div[class="lineFi yjMS clearfix"] strong')
for e in elems:
    print(e.getText())

elems = soup.select('div[class="lineFi yjMS clearfix"] strong')
for e in elems:
    print(e.getText())

elems = soup.select('div[class="yjMS clearfix"] strong')
for e in elems:
    print(e.getText())

使い方と実行結果

コマンドラインから引数に企業コードを指定してスクリプトを呼び出します。異常系は考慮していないので存在するコードを指定してください。

$ python3 yahoo.py 2001
食料品
日本製粉(株)
1,825
1,822
1,839
1,819
82,400
150,691
1,425~2,225
150,854
82,524,009
1.64

30.00
(連) 16.30
(連) 1.02

(連) 112.12

(連) 1,784.44
182,800
100
1,863
1,569
9,600
+4,300
25,400
+3,300
150,854
82,524,009
1.64

30.00
(連) 16.30
(連) 1.02

(連) 112.12

(連) 1,784.44
182,800
100
1,863
1,569
9,600
+4,300
25,400
+3,300
0.38

後はこいつをCSVに吐き出す処理を書いて、ループで回してあげれば株価データの一括取得ができそうです。

コメント