[Python] 利用 Yahoo Finance API 抓取歷史股價

[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 - [Python] 利用 Yahoo Finance API 抓取歷史股價

參考資料

Jerry
Jerry

樂於分享的軟體工程師,曾在新創與大型科技公司實習,獲得黑客松競賽冠軍,擔任資安研討會講者。長期熱衷於資訊安全、雲端服務、網路行銷等領域,希望將科技知識分享給更多人。內容轉載請來信:jlee58tw@gmail.com

2 則留言

  1. Yahoo finance API is not available anymore. I have moved to MarketXLS after this change, much more reliable data.

發表回應