一分鐘搞定台股數據:證交所OpenAPI無需爬蟲輕鬆獲取

閱讀時間約 9 分鐘

對於剛接觸Python程式的使用者來說,要一口氣學會爬蟲可能相對困難,但若想即時且輕鬆獲得台股相關數據,你可以利用證交所所提供的API進行數據蒐集。只需要簡單幾行程式碼,就能輕鬆抓到台股上千支股票的每日資訊,是不是棒呆了!!

了解證交所API

我們示範請求上市個股的每日成交資訊的API,其他API的請求方式也是大同小異,學習完後可以自行練習抓取其他API看看。

從下圖可以發現幾個重點:

  1. 該API是以GET的方式進行請求,這意味著我們可以通過HTTP請求直接從服務器獲取數據,而不需要進行複雜的資料發送或處理。
  2. 該API的功能是取得台股上市個股的每日成交資訊,也就是說,我們可以通過這個API輕鬆獲得每一支股票在每日的交易數據,包括成交量、成交價等詳細資訊。

這時候可能有人會問,怎麼都只有介紹,那最重要的API呼叫網址在哪呢?別擔心,只需要點擊右側的「Try it out」按鈕後按「Execute」,即可顯示出API的完整呼叫網址囉!!

證交所API

證交所API

按「Execute」後,可以發現幾個重點(下圖):

  1. 最上方的網址就是剛剛按下Execute後顯示的,該網址正是我們要請求API的網址
  2. Dowload file可以直接下載呼叫完API所獲得的資料
  3. Response headers是HTTP回應標頭,這些標頭共同作用,確保客戶端能正確處理和顯示伺服器回應的數據。讓我們逐一解釋它們的意義:
    • connection: keep-alive : 這表示伺服器要求保持連接打開,以便在未來的請求中重用。
    • content-disposition: attachment;filename=STOCK_DAY_ALL.json: 這表示回應內容應被視為附件,並建議瀏覽器將其保存為名為STOCK_DAY_ALL.json的文件。
    • content-encoding: gzip: 這表示回應內容使用gzip壓縮進行編碼,客戶端需要解壓縮才能讀取內容。
    • content-type: application/json: 這表示回應內容的MIME類型是JSON格式。
    • date: Fri, 28 Jun 2024 14:14:23 GMT: 這是伺服器生成此回應的時間和日期。
    • etag: W/"667dd2fc-412bc": 這是一個唯一標識符,用於資源的版本控制,幫助瀏覽器判斷資源是否已更改。
    • last-modified: Thu, 27 Jun 2024 21:00:44 GMT: 這表示資源最後一次修改的日期和時間。
    • server: nginx: 這表示伺服器軟體是Nginx。
    • transfer-encoding: chunked: 這表示回應內容以分塊傳輸編碼方式發送,適用於動態生成的內容。
  4. Response 200: 表示請求API成功時會回覆200。
  5. Example Value: 表示請求API成功後會回傳哪些數據,以及每個數據種類的類別。
  6. Model: 如果對於回傳數據的種類英文名稱不懂究竟是哪些數據,可以點擊Model,便會說明每個種類的中文名稱是什麼。
證交所API

證交所API

請求證交所API

請求API很簡單,我們只要利用「requests」便可輕鬆請求,而requests有兩種請求API的方式,一個是GET,一個是POST,而我們在上面介紹到該API是GET的方式,因此我們程式碼便是利用requests.get的方式進行請求,可以看到出來的結果為「Response [200]」,表示請求成功。

  • requests: 是Python中一個非常流行的HTTP庫,用來發送HTTP請求。
# 引入requests庫
import requests
# 定義API的URL
url = 'https://openapi.twse.com.tw/v1/exchangeReport/STOCK_DAY_ALL'
# 發送GET請求
res = requests.get(url)
res
response200

response200

數據視覺化

請求完API後就是要呈現數據了。從上面的介紹可以知道我們請求的數據格式是「json」格式,因此我們利用json.loads的方式解析請求回來的數據。

import json

jsondata = json.loads(res.text)
jsondata
json

json

json格式對於使用者來說要進行數據處理跟分析會是比較難使用的方式,因此我們可以透過pandas套件進行數據呈現,以利後續一些數據處理。

  • pandas: 是Python中用於數據處理和分析的強大工具
# 引入pandas庫
import pandas as pd
# 將JSON數據轉換為DataFrame
df = pd.DataFrame(jsondata)
# 將"Code"列設置為索引
df.set_index("Code", inplace=True)
# 將空字符串替換為'0'
df.replace('', '0', inplace=True)
# 將除了"Name"列以外的所有列轉換為浮點數
df[df.columns.difference(['Name'])] = df[df.columns.difference(['Name'])].astype(float)
# 顯示DataFrame
df
DataFrame

DataFrame

最後我們利用請求到的數據進行簡單的兩個圖表呈現:

  1. 畫出收盤價前10大的股票
  2. 畫出成交量前10大的股票

※ 為解決中文字體在畫圖中顯示異常,可以添加以下程式碼

import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['Microsoft JhengHei'] # 修改中文字體
plt.rcParams['axes.unicode_minus'] = False # 顯示負號


從下圖可以看出,目前台股上市公司的「股神」仍然是我們的大立光。大立光長期以來在光學鏡頭和光電元件領域保持著領先地位,依靠其卓越的技術和穩定的市場需求,保持著高股價。緊隨其後的是緯穎、世芯-KY等公司。這些公司的成功並非偶然,而是與當前的市場趨勢密切相關。正如我們從前十大股價公司中所見,目前市場上的投資熱點集中在AI熱潮以及相關的半導體、伺服器和其他硬體設備上。這些技術需求的增長不僅提升了相關公司的業績,還讓它們成為投資者眼中的獵物。

# 按收盤價排序並選取前10大收盤價的股票
top10_closing = df.nlargest(10, 'ClosingPrice')

# 視覺化
plt.figure(figsize=(15, 6))
bars = plt.bar(top10_closing['Name'], top10_closing['ClosingPrice'], color='skyblue')
plt.title('Top 10 Closing Prices',fontsize=20)
plt.xlabel('Stock Name',fontsize=20)
plt.ylabel('Closing Price',fontsize=20)
plt.xticks(fontsize=20)
# 在每個條形圖上顯示對應的股價
for bar in bars:
yval = bar.get_height()
plt.text(bar.get_x() + bar.get_width()/2, yval, round(yval, 2), ha='center', va='bottom', fontsize=12)

plt.show()
Price_top_10

Price_top_10

如果我們從成交量的角度進行分析,可以發現前十大交易量的股票與前十大股價的公司有著顯著的不同。其中,近期最受歡迎的股票正是新發行的元大台灣價值高息ETF (00940)。這支ETF以其低成本和高股息月月配的特性,吸引了大量投資者的目光,尤其是那些重視穩定回報和被動收入的投資者。這也正好符合我身邊朋友們最近熱烈討論要買進的話題。 其次,引起廣泛關注的還有元大台灣50反1 (台股反向ETF),這類反向ETF的交易量大增,或許反映了市場投資者對於當前股價屢創新高的擔憂。由於股市漲幅持續,投資者擔心隱含的崩跌風險,因此購買反向ETF來進行風險對沖,保護自己的投資組合免受潛在的市場下跌影響。 這些現象表明,在目前的市況下,投資者既在尋求穩健的被動收入,同時也在思考如何應對股市高漲帶來的不確定性。元大台灣價值高息 (00940) 這類高配息的ETF提供了持股收益的穩定性,而元大台灣50反1則為那些擔心市場回調的投資者提供了一個對沖的工具,兩者各攬其道,共同成為當前市場上的交易熱點。

Trade_top_10

Trade_top_10


172會員
59內容數
我出生於財務金融與資訊背景,滿20歲便開始踏入股市。從當初對股市一無所知的菜鳥,到現在成為一名專注於AI股市研究的分析師,這是我的成長歷程。   我崇尚彼得·林區所強調的理念,認為在生活和工作中觀察,從周遭環境中挑選出適合投資的股票,並搭配近期快速崛起的程式交易、大數據分析等AI技術,立志打造輕鬆又便利的投資之路。
留言0
查看全部
發表第一個留言支持創作者!
對於剛開始接觸Python的新手來說,無疑會在眾多執行環境中迷茫,不知道應該選擇哪一個比較好? 在這個情況下,我會推薦一個好的起點– Anaconda。現在,讓我們花費一分鐘的時間,我將引導你成功安裝Anaconda,並且正式開啟你在資料科學領域的旅程!
理解一個全新的操作環境有時候可能是一個挑戰,尤其對於那些剛開始接觸VS Code的開發者來說,即便具備一定的英文閱讀能力,可能也會對這個陌生的操作環境感到徬徨和不安。不過,沒有必要擔心,我們接下來就來一起用短短的一分鐘時間,將VS Code轉換成最熟悉的中文環境吧! 安裝繁體中文語言包 由於VS
對於剛開始接觸Python的新手來說,無疑會在眾多執行環境中迷茫,不知道應該選擇哪一個比較好? 在這個情況下,我會推薦一個好的起點– Anaconda。現在,讓我們花費一分鐘的時間,我將引導你成功安裝Anaconda,並且正式開啟你在資料科學領域的旅程!
理解一個全新的操作環境有時候可能是一個挑戰,尤其對於那些剛開始接觸VS Code的開發者來說,即便具備一定的英文閱讀能力,可能也會對這個陌生的操作環境感到徬徨和不安。不過,沒有必要擔心,我們接下來就來一起用短短的一分鐘時間,將VS Code轉換成最熟悉的中文環境吧! 安裝繁體中文語言包 由於VS
你可能也想看
Google News 追蹤
Thumbnail
這個秋,Chill 嗨嗨!穿搭美美去賞楓,裝備款款去露營⋯⋯你的秋天怎麼過?秋日 To Do List 等你分享! 秋季全站徵文,我們準備了五個創作主題,參賽還有機會獲得「火烤兩用鍋」,一起來看看如何參加吧~
Thumbnail
美國總統大選只剩下三天, 我們觀察一整週民調與金融市場的變化(包含賭局), 到本週五下午3:00前為止, 誰是美國總統幾乎大概可以猜到60-70%的機率, 本篇文章就是以大選結局為主軸來討論近期甚至到未來四年美股可能的改變
Thumbnail
Faker昨天真的太扯了,中國主播王多多點評的話更是精妙,分享給各位 王多多的點評 「Faker是我們的處境,他是LPL永遠繞不開的一個人和話題,所以我們特別渴望在決賽跟他相遇,去直面我們的處境。 我們曾經稱他為最高的山,最長的河,以為山海就是盡頭,可是Faker用他28歲的年齡...
Thumbnail
背景 《馬男波杰克》故事裡面每個角色個性經歷也都詮釋的非常好,故事是喜劇敘事,雖說故事背景是好萊塢演藝界的生活,劇情內容非常戲劇化,但每段故事的隱喻都可以貼近每個人一生都可能經歷的感受,故事裡也喜歡用諷刺搞笑的方式來表達一些實事觀點 前言 最近剛看完馬男波杰克第六季,也是這部作品的完結篇章,卡
Thumbnail
引言 《馬男波杰克》 season 3-11 "有一次我差點被溺死,在那之後我下定決心不再怕水,所以我成了救生員。 在我訓練的第一天,我的教練告訴我,有時你會看到有人遇到麻煩,你會想衝進去,盡你所能去拯救他們,但你必須停下來, 因為有些人你無法拯救。" —Ana Spanakopita
Thumbnail
《馬男波杰克》 season 3-3 "你需要很長時間才能意識到自己有多痛苦,甚至需要更長的時間才能發現事情不必如此。只有在放棄一切之後,你才能開始尋找快樂的方法" —Cuddlywhiskers “It takes a long time to realize how truly mis
Thumbnail
大家好!希望今天的你也過得順利快樂! 今天要來分享可愛的「胖胖體」怎麼在Adobe Illustrator中設定,設定好還能存起來!有兩種方法可以設定,各有優缺點,可以自行選擇喜歡哪種方法! ➊ 打開外觀視窗,設定10pt的白色筆畫 ➋ 再新增一組筆畫,設定20pt的白色筆畫 以上兩個步驟
Thumbnail
《馬男波杰克》 season 2-2 每個人都會遇到凍齡點,凍齡點就是你停止成長的那一刻,像是成名之後,人就不會成長,因為沒必要。對多數人來說凍齡點也常發生在步入婚姻的時期、安居樂業的時期,或是碰到一個呵護你並且讓你始終如一的人(朋友、伴侶、家人),也就不容易再成長了。 一些心得 我想凍齡
Thumbnail
【地基主由來】 《正法念處經》及《地藏經》都有記載的守地鬼及守屋鬼,就是地基主。​ 佛陀曾開示:「此世間有守墓鬼、守屍鬼、守地鬼、守屋鬼、守水鬼、守樹鬼、守山鬼、守糞鬼、噉血鬼、噉精氣鬼、噉胎卵鬼、行病鬼等鬼類眾生加害於人。」 何謂「地基主」呢?一塊土地或是一間屋子會有數十年、甚至數百年前的主人,曾
Thumbnail
人生有幾多個十年?十年太遠了吧?那麼活一天有幾多分鐘?是1440,人人平等。 一天大約有16小時是醒著的。請想一想:在這16小時裏,有幾多時間是「清醒的」?不要誤會,不是在反詰工作過勞,沒精打彩那種狀態;我是說我們有否在意自己「活著」。
Thumbnail
AP、IB課程,怎麼分?讓我們來揭開AP與IB的神秘面紗!三張圖就讓你搞懂AP和IB課程!
Thumbnail
許多投資新手很喜歡到外面跟投資老師報明牌買進股票,或是有人跟你說某支股票很好的時候,50%以上的人都會無腦直接跟單。但是這些人往往沒有搞懂如何去判斷股票價格合不合理,這樣懶惰的投資總有一天絕對會虧錢的!所以艾兒莎想整理我目前投資到現在的心得跟系統化知識,讓大家能穩健的投資。
Thumbnail
這個秋,Chill 嗨嗨!穿搭美美去賞楓,裝備款款去露營⋯⋯你的秋天怎麼過?秋日 To Do List 等你分享! 秋季全站徵文,我們準備了五個創作主題,參賽還有機會獲得「火烤兩用鍋」,一起來看看如何參加吧~
Thumbnail
美國總統大選只剩下三天, 我們觀察一整週民調與金融市場的變化(包含賭局), 到本週五下午3:00前為止, 誰是美國總統幾乎大概可以猜到60-70%的機率, 本篇文章就是以大選結局為主軸來討論近期甚至到未來四年美股可能的改變
Thumbnail
Faker昨天真的太扯了,中國主播王多多點評的話更是精妙,分享給各位 王多多的點評 「Faker是我們的處境,他是LPL永遠繞不開的一個人和話題,所以我們特別渴望在決賽跟他相遇,去直面我們的處境。 我們曾經稱他為最高的山,最長的河,以為山海就是盡頭,可是Faker用他28歲的年齡...
Thumbnail
背景 《馬男波杰克》故事裡面每個角色個性經歷也都詮釋的非常好,故事是喜劇敘事,雖說故事背景是好萊塢演藝界的生活,劇情內容非常戲劇化,但每段故事的隱喻都可以貼近每個人一生都可能經歷的感受,故事裡也喜歡用諷刺搞笑的方式來表達一些實事觀點 前言 最近剛看完馬男波杰克第六季,也是這部作品的完結篇章,卡
Thumbnail
引言 《馬男波杰克》 season 3-11 "有一次我差點被溺死,在那之後我下定決心不再怕水,所以我成了救生員。 在我訓練的第一天,我的教練告訴我,有時你會看到有人遇到麻煩,你會想衝進去,盡你所能去拯救他們,但你必須停下來, 因為有些人你無法拯救。" —Ana Spanakopita
Thumbnail
《馬男波杰克》 season 3-3 "你需要很長時間才能意識到自己有多痛苦,甚至需要更長的時間才能發現事情不必如此。只有在放棄一切之後,你才能開始尋找快樂的方法" —Cuddlywhiskers “It takes a long time to realize how truly mis
Thumbnail
大家好!希望今天的你也過得順利快樂! 今天要來分享可愛的「胖胖體」怎麼在Adobe Illustrator中設定,設定好還能存起來!有兩種方法可以設定,各有優缺點,可以自行選擇喜歡哪種方法! ➊ 打開外觀視窗,設定10pt的白色筆畫 ➋ 再新增一組筆畫,設定20pt的白色筆畫 以上兩個步驟
Thumbnail
《馬男波杰克》 season 2-2 每個人都會遇到凍齡點,凍齡點就是你停止成長的那一刻,像是成名之後,人就不會成長,因為沒必要。對多數人來說凍齡點也常發生在步入婚姻的時期、安居樂業的時期,或是碰到一個呵護你並且讓你始終如一的人(朋友、伴侶、家人),也就不容易再成長了。 一些心得 我想凍齡
Thumbnail
【地基主由來】 《正法念處經》及《地藏經》都有記載的守地鬼及守屋鬼,就是地基主。​ 佛陀曾開示:「此世間有守墓鬼、守屍鬼、守地鬼、守屋鬼、守水鬼、守樹鬼、守山鬼、守糞鬼、噉血鬼、噉精氣鬼、噉胎卵鬼、行病鬼等鬼類眾生加害於人。」 何謂「地基主」呢?一塊土地或是一間屋子會有數十年、甚至數百年前的主人,曾
Thumbnail
人生有幾多個十年?十年太遠了吧?那麼活一天有幾多分鐘?是1440,人人平等。 一天大約有16小時是醒著的。請想一想:在這16小時裏,有幾多時間是「清醒的」?不要誤會,不是在反詰工作過勞,沒精打彩那種狀態;我是說我們有否在意自己「活著」。
Thumbnail
AP、IB課程,怎麼分?讓我們來揭開AP與IB的神秘面紗!三張圖就讓你搞懂AP和IB課程!
Thumbnail
許多投資新手很喜歡到外面跟投資老師報明牌買進股票,或是有人跟你說某支股票很好的時候,50%以上的人都會無腦直接跟單。但是這些人往往沒有搞懂如何去判斷股票價格合不合理,這樣懶惰的投資總有一天絕對會虧錢的!所以艾兒莎想整理我目前投資到現在的心得跟系統化知識,讓大家能穩健的投資。