エンジニアリングとお金の話

都内で働くエンジニアの日記です。

【技術】株価ランキング取得用のツールを作った

【SPONSORED LINK】

毎日株価のチェックを行っているのだが、最近の株高で監視したい銘柄が増えた事もあり非常に時間が掛かる作業となっている。

ちなみに、自分が株価調査の為に行っている作業はこんな感じである。

会社四季報でめぼしい銘柄を見つけて、yahooファイナンスのポートフォリオに登録
② 登録した銘柄を一つずつ確認して、株価が上昇している銘柄を確認
③ ②で確認した上昇している銘柄について、値上がり率ランキングでランキングを確認

一つ一つの銘柄について、値上がり率ランキングを確認するのは正直しんどいので、値上がり率ランキングを取得するツールを作ってみた。

#-*- coding:utf-8 -*-

import urllib
import re
from BeautifulSoup import BeautifulSoup

def main():
    tmpList=[]
    codeHash=getCodeHash()

  #監視銘柄分処理を実施
    for line in searchCode.split("\n"):
        if codeHash.has_key(line.strip()):
            tmpList.append((line.strip(),codeHash.setdefault(line.strip())[0],codeHash.setdefault(line.strip())[1]))

  #値上がり率ランキング順に結果を表示
    for line in sorted(tmpList,key=lambda x:x[1]):
    #証券コード,ランキング,銘柄名を表示
        print "%s,%s,%s" % (line[0],line[1],line[2])

#yahooランキングより管理銘柄のランキングを取得
def getCodeHash():
    codeList=[]
    nameList=[]
    codeHash={}
    url="http://info.finance.yahoo.co.jp/ranking/?p=%s"

    #yahooランキングで500位までランキングされている銘柄を取得
    for num in range(10):
        bs=BeautifulSoup(urllib.urlopen(url % num).read())
        for line in bs.findAll("a",attrs={"href":re.compile(r"http://.*code")}):
            codeList.append(line.text)

        for line in bs.findAll("td",attrs={"class":"normal yjSt"}):
            nameList.append(line.text)

    for rank,(code,name) in enumerate(zip(codeList,nameList)):
        codeHash.setdefault(code.encode("utf_8"),[str(rank+1).zfill(3),name.encode("utf_8")])
    return codeHash

if __name__  == '__main__':

    #チェックしたい銘柄の証券コードを設定
    searchCode="""
    7777
    3237
    6159
    6072
    3261
    8946
    3252
    3668
    8885
    7157
    9037
    6245
    5344
    3175
    3258
    4298
    6279
    3782
    4764
    6861
    8934
    3266
    2931
    8912
    3831
    6054
    2588
    3662
    3658
    4206
    4711
    3664
    3853
    8508
    6932
    2193
    2388
    2749
    6387
    6619
    3660
    6367
    3655
    6064
    6069
    7148
    3046
    8096
    6052
    2196
    """
    main()

表示結果はこんな感じ。
f:id:hatakazu93:20130427102341p:plain

これで上昇銘柄をチェックするのが楽になりそうである。GW中暇なのでいろいろなツールを開発していこう。