Python - 透過Yahoo Finance API抓取台股歷史資料

閱讀時間約 3 分鐘

原始文章


無論是投資或是資料科學專案,經常需要股市資料作分析。證交所在政府資料開放平台中提供了個股日成交資訊,也可以透過API查詢歷史記錄,但很容易因為頻繁抓取資料而被暫時的鎖IP,之後會再寫另外一篇文章說明。
常見的替代方案是到美國的Yahoo Finance下載,只要搜尋「股票代碼.TW」就可以查詢,如「0050.TW」。另外,國外有一些公司也提供類似的API服務,像是IEX CloudAlpha Vantage,但這些資料不一定包含台股的資訊,建議付費前先查詢清楚,使用的關鍵字為Supported Symbols,Symbols指的是股票代號,像是這一篇〈How to Find All Supported Symbols on IEX Cloud〉
如果你希望獲得歷史資料,並持續累積新資料,最好的方式應該是先用這篇文章的方式抓取所有歷史資料,然後再寫一支程式每日抓取證交所的個股日成交資訊。我在2020年6月25日執行以下程式,並儲存成h5檔,總資料筆數約380萬,檔案大小約300mb,不算太大。

執行流程與程式碼

下載台股代碼清單

首先,先透過證交所的個股日成交資訊API下載最新的收盤資料,,目的是為了取得股票代碼清單。當然,你可以直接下載Excel或CSV檔,也可以透過以下的程式下載。
import requests
import numpy as np
import pandas as pd

link = 'https://quality.data.gov.tw/dq_download_json.php?nid=11549&md5_url=bb878d47ffbe7b83bfc1b41d0b24946e'
r = requests.get(link)
data = pd.DataFrame(r.json())

data.to_csv(儲存路徑 + '/stock_id.csv', index=False, header = True)

下載Yahoo股市資料

根據〈Free Stock Data for Python Using Yahoo Finance API〉.)的說法,Yahoo Finance的API的限制為:Using the Public API (without authentication), you are limited to 2,000 requests per hour per IP (or up to a total of 48,000 requests a day)。在我用以下的code抓取1116支股票的歷史記錄後,確實沒有被阻擋的問題。
點擊連結看完整文章〈使用Python及Yahoo Finance API抓取台股歷史資料〉
為什麼會看到廣告
留言0
查看全部
發表第一個留言支持創作者!
對資料科學家或數據分析師來說,資料量太大、電腦效能不足一直都是個痛,經常要小心翼翼地觀察記憶體使用率是不是快爆炸。然而,就我的觀察,一樣都是撰寫程式,資料科學工作者對於程式碼乾淨、易懂、高效率的追求似乎比其他工程師來得低。(或是我的樣本數不足,以偏概全)
雖然數據分析師是新職位,但數據分析或是資料分析的概念一點都不新。公司裡面行之有年的職位,不管是行銷、業務、採購、倉管,每個職位都需要數據,也都需要分析。隨著大數據、資料科學、機器學習、AI等酷炫的新名詞、新技術與新應用出現,所需的知識與技能多到員工爆肝也學不完。
在Python中使用MySQLdb的起手式大概長這樣。記得execute裡面的SQL語法一定要加上冒號,否則會出錯。我也在這個愚蠢的錯誤上跌倒過。編碼問題是資料庫管理中常見的問題,編碼包含又包含了兩個部份,collation和character set。
資料科學家、數據分析師是近幾年新興,而且熱門的職業,而DataCamp是一個專精於資料科學的程式教學網站。在實務上會用到的各種知識與程式技能,從流程面的網路爬蟲、數據清洗、資料視覺化,到技術面的Python、R語言、SQL,在DataCamp上幾乎都可以找到相關教學。
LinkedIn是專業導向的社群平台,許多公司和專業人士都會在上面分享最新消息與新知。只要你願意,你也可以透過LinkedIn傳訊息給比爾蓋茲。
如果每個人的人格特質都可以量化成「創作者」模式與「觀眾」模式,你的比例會是多少?20%創作者和80%觀眾?或是70%創作者和30%的觀眾?這個比例及自我認知相當重要,因為兩種模式代表著相當不同的生活方式。
對資料科學家或數據分析師來說,資料量太大、電腦效能不足一直都是個痛,經常要小心翼翼地觀察記憶體使用率是不是快爆炸。然而,就我的觀察,一樣都是撰寫程式,資料科學工作者對於程式碼乾淨、易懂、高效率的追求似乎比其他工程師來得低。(或是我的樣本數不足,以偏概全)
雖然數據分析師是新職位,但數據分析或是資料分析的概念一點都不新。公司裡面行之有年的職位,不管是行銷、業務、採購、倉管,每個職位都需要數據,也都需要分析。隨著大數據、資料科學、機器學習、AI等酷炫的新名詞、新技術與新應用出現,所需的知識與技能多到員工爆肝也學不完。
在Python中使用MySQLdb的起手式大概長這樣。記得execute裡面的SQL語法一定要加上冒號,否則會出錯。我也在這個愚蠢的錯誤上跌倒過。編碼問題是資料庫管理中常見的問題,編碼包含又包含了兩個部份,collation和character set。
資料科學家、數據分析師是近幾年新興,而且熱門的職業,而DataCamp是一個專精於資料科學的程式教學網站。在實務上會用到的各種知識與程式技能,從流程面的網路爬蟲、數據清洗、資料視覺化,到技術面的Python、R語言、SQL,在DataCamp上幾乎都可以找到相關教學。
LinkedIn是專業導向的社群平台,許多公司和專業人士都會在上面分享最新消息與新知。只要你願意,你也可以透過LinkedIn傳訊息給比爾蓋茲。
如果每個人的人格特質都可以量化成「創作者」模式與「觀眾」模式,你的比例會是多少?20%創作者和80%觀眾?或是70%創作者和30%的觀眾?這個比例及自我認知相當重要,因為兩種模式代表著相當不同的生活方式。
你可能也想看
Google News 追蹤
Thumbnail
這個秋,Chill 嗨嗨!穿搭美美去賞楓,裝備款款去露營⋯⋯你的秋天怎麼過?秋日 To Do List 等你分享! 秋季全站徵文,我們準備了五個創作主題,參賽還有機會獲得「火烤兩用鍋」,一起來看看如何參加吧~
Thumbnail
  在計算數字時我們要先搞懂運算符號代表的涵義,Python裡面的符號跟我們認知的不會有太大的差別,但是有一些代表不一樣的意思,就必須搞懂才不會在寫程式時,程式碼的重複性太高,會導致日後的維修性降低。
Thumbnail
常常會遇到好不容易寫好程式,但是輸出的時候沒辦法按照自己想要的格式,或是間隔來輸出,這時需要用到的就是格式化輸出,格式化輸出就是調整排版的一個形式。
Thumbnail
一、什麼是變數?   變數是指用來代表某一種資料型態的符號,以非數字的符號來表達,可以是英文字母也可以是一個英文單字,不過python有一些英文字母不能被當作變數,我們稱作保留字,例如:False、None、True、and、is、not、or、......,之後會在介紹。
Thumbnail
IDE是甚麼? IDE又叫做整合開發環境(Integrated Development Environment),在編輯程式碼時有許多的步驟,例如撰寫、編譯、除錯、執行......等過程,都是分開進行,但現在可以在同一個環境下開發,而使用的這些環境正是IDE。
Thumbnail
PYTHON 介紹 Python 是一種被廣泛使用的高階編程語言,它的用途十分廣泛,支援了多種的程式設計的範式,包括函數式、指令式、結構化、物件導向。 Python的設計哲學強調了它簡潔的語法,是使用空格縮進來劃分程式碼。 Python是的社群中擁有許多模組可以使用,在進行某些用途時可以很引入模組,
Thumbnail
這個秋,Chill 嗨嗨!穿搭美美去賞楓,裝備款款去露營⋯⋯你的秋天怎麼過?秋日 To Do List 等你分享! 秋季全站徵文,我們準備了五個創作主題,參賽還有機會獲得「火烤兩用鍋」,一起來看看如何參加吧~
Thumbnail
  在計算數字時我們要先搞懂運算符號代表的涵義,Python裡面的符號跟我們認知的不會有太大的差別,但是有一些代表不一樣的意思,就必須搞懂才不會在寫程式時,程式碼的重複性太高,會導致日後的維修性降低。
Thumbnail
常常會遇到好不容易寫好程式,但是輸出的時候沒辦法按照自己想要的格式,或是間隔來輸出,這時需要用到的就是格式化輸出,格式化輸出就是調整排版的一個形式。
Thumbnail
一、什麼是變數?   變數是指用來代表某一種資料型態的符號,以非數字的符號來表達,可以是英文字母也可以是一個英文單字,不過python有一些英文字母不能被當作變數,我們稱作保留字,例如:False、None、True、and、is、not、or、......,之後會在介紹。
Thumbnail
IDE是甚麼? IDE又叫做整合開發環境(Integrated Development Environment),在編輯程式碼時有許多的步驟,例如撰寫、編譯、除錯、執行......等過程,都是分開進行,但現在可以在同一個環境下開發,而使用的這些環境正是IDE。
Thumbnail
PYTHON 介紹 Python 是一種被廣泛使用的高階編程語言,它的用途十分廣泛,支援了多種的程式設計的範式,包括函數式、指令式、結構化、物件導向。 Python的設計哲學強調了它簡潔的語法,是使用空格縮進來劃分程式碼。 Python是的社群中擁有許多模組可以使用,在進行某些用途時可以很引入模組,