2014年9月14日日曜日

pythonで東証の全銘柄一覧取得メモ

xldrとやらを使ってexcelのファイルを読み込んだときのメモ。

まずは以下からダウンロードしてインストール。
https://pypi.python.org/pypi/xlrd

ファイルを展開してpython setup.py installを実行した。

そんで、まずは東証の次のページからexcelの銘柄一覧をurllib使って取得。
http://www.tse.or.jp/market/data/listed_companies/index.html

そのあと読み込んんだデータからxldrを使ってコード、銘柄名、業種コードを取得して
それらをcsv形式にしてまとめた一覧を標準出力に書き出した。

コード
#!/usr/bin/python
# -*- coding: utf-8 -*-

import xlrd
import urllib

def readlist(t, url):
    fd = urllib.urlopen(url)
    content = fd.read()
    fd.close()

    book = xlrd.open_workbook(file_contents=content)
    sheet = book.sheet_by_index(0)

    for n in range(1, sheet.nrows):
        row = sheet.row(n)
        day = int(row[0].value)
        code = int(row[1].value)
        name = row[2].value.encode('utf_8')
        sector = int(row[3].value) if len(row) > 3 else ""
        print ",".join([str(code), name, str(sector), t])

if __name__ == '__main__':
    urls = {
        "市場第一部(内国株)": "http://www.tse.or.jp/market/data/listed_companies/b7gje60000023aiz-att/b7gje6000003l9u4.xls",
        "市場第一部(外国株)": "http://www.tse.or.jp/market/data/listed_companies/b7gje60000023aiz-att/b7gje60000023aym.xls",
        "市場第二部": "http://www.tse.or.jp/market/data/listed_companies/b7gje60000023aiz-att/b7gje60000023aza.xls",
        "マザーズ(内国株)": "http://www.tse.or.jp/market/data/listed_companies/b7gje60000023aiz-att/b7gje60000023azg.xls",
        "マザーズ(外国株)": "http://www.tse.or.jp/market/data/listed_companies/b7gje60000023aiz-att/b7gje60000023azm.xls",
        "REIT・ベンチャーファンド・カントリーファンド": "http://www.tse.or.jp/market/data/listed_companies/b7gje60000023aiz-att/b7gje60000023b04.xls",
        "ETF・ETN": "http://www.tse.or.jp/market/data/listed_companies/b7gje60000023aiz-att/b7gje60000023azy.xls",
        "PRO Market": "http://www.tse.or.jp/market/data/listed_companies/b7gje60000023aiz-att/b7gje60000023azq.xls",
        "JASDAQ(グロース)": "http://www.tse.or.jp/market/data/listed_companies/b7gje60000023aiz-att/b7gje6000002t00f.xls",
        "JASDAQ(スタンダード)": "http://www.tse.or.jp/market/data/listed_companies/b7gje60000023aiz-att/b7gje6000003uzjd.xls",
        "JASDAQ(スタンダード・外国株)": "http://www.tse.or.jp/market/data/listed_companies/b7gje60000023aiz-att/b7gje6000003v04x.xls"}

    for t, url in urls.items():
        readlist(t, url)
出力結果
1301,極洋,50,市場第一部(内国株)
1332,日本水産,50,市場第一部(内国株)
1333,マルハニチロ,50,市場第一部(内国株)
1352,ホウスイ,6050,市場第一部(内国株)
1377,サカタのタネ,50,市場第一部(内国株)
1379,ホクト,50,市場第一部(内国株)
1414,ショーボンドホールディングス,2050,市場第一部(内国株)
1417,ミライト・ホールディングス,2050,市場第一部(内国株)
1419,タマホーム,2050,市場第一部(内国株)
1420,サンヨーホームズ,2050,市場第一部(内国株)
1514,住石ホールディングス,1050,市場第一部(内国株)
1515,日鉄鉱業,1050,市場第一部(内国株)
1518,三井松島産業,1050,市場第一部(内国株)
1605,国際石油開発帝石,1050,市場第一部(内国株)
1606,日本海洋掘削,1050,市場第一部(内国株)
1662,石油資源開発,1050,市場第一部(内国株)
1663,K&Oエナジーグループ,1050,市場第一部(内国株)
1712,ダイセキ環境ソリューション,2050,市場第一部(内国株)
      :