站內搜尋:Yahoo搜尋如果沒有給完整的網址,請在站內再搜尋一次!

2019-08-10

從政府資料開放平台(open data),取得上市上櫃公司基本資料(CSV),使用Python將資料寫入SQLite3資料庫

  1. 政府資料開放平台 ( https://data.gov.tw/ )
  2. 程式碼:
    ## Table : Stocks (stockType,stockID,stockAbbr,industryType,releaseDate)
    ## stockType : tse->上市,otc->上櫃
    ## 上市公司基本資料(18419) - 政府資料開放平台 https://data.gov.tw/dataset/18419
    ## 上櫃股票基本資料(25036) - 政府資料開放平台 https://data.gov.tw/dataset/25036
    ## 主要欄位說明:
    ## 出表日期[0]、公司代號[1]、公司名稱[2]、公司簡稱[3]、外國企業註冊地國[4]、產業別[5]、住址、
    ## 營利事業統一編號、董事長、總經理、發言人、發言人職稱、代理發言人、總機電話、成立日期、上市日期、
    ## 普通股每股面額、實收資本額、私募股數、特別股、編制財務報表類型、股票過戶機構、過戶電話、過戶地址、
    ## 簽證會計師事務所、簽證會計師1、簽證會計師2、英文簡稱、英文通訊地址、傳真機號碼、電子郵件信箱、網址
    zSQL="""CREATE TABLE IF NOT EXISTS `Stocks` (
            `stockType`     VARCHAR(4)  NOT NULL,
            `stockID`       VARCHAR(8)  NOT NULL,
            `stockAbbr`     VARCHAR(30) NOT NULL,
            `industryType`  VARCHAR(30),
            `releaseDate`   VARCHAR(12),
            PRIMARY KEY (`stockID`)
    );
    """
    oConn.execute(zSQL)
    oConn.commit()
    zSQL="SELECT * FROM Stocks "
    cStocks=oConn.execute(zSQL)
    rStock=cStocks.fetchone()
    if rStock==None:
        ##寫入上市公司資料
        zCsvUrl="http://mopsfin.twse.com.tw/opendata/t187ap03_L.csv"
        oHTML=requests.get(zCsvUrl)
        oHTML.encoding='utf-8'
        oList=oHTML.text.split('\r\n')
        for i in range(1,len(oList)-1):
            aList=oList[i].replace('"','').split(',')
            zSQL="INSERT INTO Stocks (stockType,stockID,stockAbbr,industryType,releaseDate) values ('tse','%s','%s','%s','%s'); "
            zSQL=zSQL%(aList[1],aList[3],aList[5],aList[0])
            oConn.execute(zSQL)
            oConn.commit()
        ##寫入上櫃公司資料
        zCsvUrl="http://mopsfin.twse.com.tw/opendata/t187ap03_O.csv"
        oHTML=requests.get(zCsvUrl)
        oHTML.encoding='utf-8'
        oList=oHTML.text.split('\r\n')
        for i in range(1,len(oList)-1):
            aList=oList[i].replace('"','').split(',')
            zSQL="INSERT INTO Stocks (stockType,stockID,stockAbbr,industryType,releaseDate) values ('otc','%s','%s','%s','%s'); "
            zSQL=zSQL%(aList[1],aList[3],aList[5],aList[0])
            oConn.execute(zSQL)
            oConn.commit()
  3. 透過Python寫入的資料:

沒有留言:

張貼留言