読者です 読者をやめる 読者になる 読者になる

oneshotlife-pythonのブログ

Pythonを好んで使っているプログラマです。Pythonこそが最強のプログラミング言語だと思っています。Pythonは使いやすいです。Pythonは書きやすいです。Pythonは読みやすいです。Pythonはパワフルです。Pythonは一貫性があります。Pythonが好きです。

PythonでYahoo!ファイナンスから株価を取得 #Python #WebScraping

2017/03/24 Pythonスクレイピング関連の書籍についてアップデート

コードを引数にして株価を取得したい

株価を取得したいというニーズは昔からある様子。2000年以前の書籍を見ても、株価を取得するサンプルコードがあった。htmlのタグ付けなど大きく変わっているだろうから、そのままは使えない。Pythonで書き直してみることに。

株価の情報はYahoo!ファイナンスから

他のサイトでもいいんだけど、URL設計がしっかりとしていて、タグ付けがちゃんとしていそうなので、ここにした。
http://finance.yahoo.co.jp/

株価詳細ページ

ソニーの詳細ページを見てみる。
URLは、

http://stocks.finance.yahoo.co.jp/stocks/detail/?code=6758.T

となっている。

ここから、ある推測が出来る。
ベースURLはきっと、

http://stocks.finance.yahoo.co.jp/stocks/detail/

だ。

パラメーターとしてcodeを渡す。コードの後ろには、「.T」が付く。

ここまで得た情報を元に、サンプルコードを組んでみる。

サンプルコード

import requests
from bs4 import BeautifulSoup

def get_stockprice(code):
    base_url = "http://stocks.finance.yahoo.co.jp/stocks/detail/"
    query = {}
    query["code"] = code + ".T"
    ret = requests.get(base_url,params=query)
    soup = BeautifulSoup(ret.content,"lxml")
    stocktable =  soup.find('table', {'class':'stocksTable'})
    symbol =  stocktable.findAll('th', {'class':'symbol'})[0].text
    stockprice = stocktable.findAll('td', {'class':'stoksPrice'})[1].text
    return symbol,stockprice
if __name__ == "__main__":
    symbol,stockprice = get_stockprice("6758")
    print symbol,stockprice

実行結果

>>> 
ソニー(株) 3,175

たくさんのコードを渡してみる。

せっかくなので、リストで渡してみましょうか。

    l = []
    l.append("8411")
    l.append("8306")
    l.append("3103")
    l.append("6803")
    l.append("6502")
    l.append("4689")
    l.append("8107")
    l.append("8303")
    l.append("9101")
    l.append("8604")
    l.append("6501")
    l.append("9972")
    l.append("6753")
    l.append("7201")
    l.append("6752")
    l.append("9501")
    l.append("7011")
    l.append("7647")
    l.append("7211")
    l.append("9104")
    for el in l:
        symbol,stockprice = get_stockprice(el)
        print symbol,stockprice

実行結果

(株)みずほフィナンシャルグループ 171.9
(株)三菱UFJフィナンシャル・グループ 519.4
ユニチカ(株) 71
ティアック(株) 42
(株)東芝 363.5
ヤフー(株) 420
(株)キムラタン 7
(株)新生銀行 163
日本郵船(株) 190
野村ホールディングス(株) 506.6
(株)日立製作所 535.3
アルテック(株) 210
シャープ(株) 167
日産自動車(株) 1,011.5
パナソニック(株) 977.2
東京電力ホールディングス(株) 415
三菱重工業(株) 424
(株)音通 32
三菱自動車(株) 538
(株)商船三井 237

見づれぇ~~~~~~~~~!!!
前株とか後株とかあるのな。。。ひとつに統一しろよwww

出力結果をテーブルに吐いてみた

最後をこうするだけ。

        print "|",symbol,"|",stockprice,"|"

実行結果

(株)みずほフィナンシャルグループ 171.9
(株)三菱UFJフィナンシャル・グループ 519.4
ユニチカ(株) 71
ティアック(株) 42
(株)東芝 363.5
ヤフー(株) 420
(株)キムラタン 7
(株)新生銀行 163
日本郵船(株) 190
野村ホールディングス(株) 506.6
(株)日立製作所 535.3
アルテック(株) 210
シャープ(株) 167
日産自動車(株) 1,011.5
パナソニック(株) 977.2
東京電力ホールディングス(株) 415
三菱重工業(株) 424
(株)音通 32
三菱自動車(株) 538
(株)商船三井 237