[2017/07/10 更新] Yahoo Finance API 已關閉,目前只能透過爬網頁的方式撈取資料。
最近對於股票有一點興趣,剛好又修完一門關於 ETL 的課程,想說就來撈撈看股市資料,加以分析。
儘管 CMoney 上的股市資訊就已經相當足夠了,有技術分析、到價提醒等等好用的功能,但能看到的歷史資料範圍有限,所以還是徒手來試試看,希望能做一個自己的理財工具。
怎麼撈資料呢
台灣股市資料當然還是以「臺灣證券交易所」公布的歷史資料為準,但在截取上需要花一些功夫,所以我先用 Yahoo Finance API 來撈資料。這邊列出幾個方法的比較:
- 臺灣證券交易所:資料準確,從 88 年 1 月 5 日起開始提供
- Yahoo Finance API [已停用]:從 2000 年開始提供,資料可能會有遺漏,比如缺少過年前補上班 (2016/01/30 星期六)這天的交易資料,完整性有待商榷。直接用這個套件就行了 yahoo-finance。
- Grs 台灣上市上櫃股票價格擷取:台灣的股市資料 Python 套件,資料來源為證券交易所網站與證券櫃檯買賣中心。請參考 python grs。
- Google Finance API [已停用]:雖然於 2011 年停用,不過可以取得歷史資料,請參考這篇:使用 Yahoo/Google API 取得歷史股價資料。
- Google 財經:這個方法就是爬網頁拉,你可以透過下方的網址一頁一頁抓,不過一個頁面最多顯示 200 筆,對於大量資料較為麻煩。舉例:抓取 TPE 1517 利奇,範圍 1999-01-01 往後 200 天
http://www.google.com.hk/finance/historical?q=TPE%3A1517&startdate=1999-01-01&num=200&start=4000&ei=Mh6vVsiXGsGT0gSAk4moCw
關於 Yahoo/Google Finance API,這邊也有一個網頁 Finance APIs,告訴你怎麼抓 CSV/YQL 格式的資料,也有簡單 PHP 與 C# 範例
程式範例
這是一個簡單的 Python 程式,使用 Yahoo Finance API 抓取,接到 JSON 格式資料。
$ pip install yahoo_finance
from yahoo_finance import Share
import datetime
def getStock(id):
stock = Share(str(id)+'.TW')
today = datetime.date.today() #todays date
data = stock.get_historical('2016-01-28', str(today))
return data
print getStock(2353)
Yahoo finance API is not available anymore. I have moved to MarketXLS after this change, much more reliable data.
Thanks for your feedback. I have updated the information.