高點研究所
首頁商研所許誠哲 以網路爬蟲的方式下載台股資料
篇名
以網路爬蟲的方式下載台股資料
作者
許誠哲
說明
發佈時間:20250414

在之前的專欄,曾經分享過若欲使用台股的資料進行分析,可以至 Yahoo Finance 網站下載資料。但 Yahoo Finance 已經將資料改為訂閱下載制,意即要付費才能下載歷史資料,故本次專欄我將提供利用網路爬蟲的方式,利用臺灣證券交易所 的公開資料進行下載組裝。

R語言的程式碼與說明如下,這個方法還是有缺點,就是下載時間拉比較長。但免費的資源就不要苛求太多了。若欲下載個股的資料,就將其大盤的部份改為個股,代碼填入欲下載的個股代碼即可。

R語言範例程式碼

library(httr)
library(dplyr)
library(readr)
library(stringr)

# 建立所有月份的清單(從 1990 年 1 月到 2024 年 12 月)
years <- 1990:2025
months <- 1:12
date_list <- expand.grid(year = years, month = months) %>%
arrange(year, month) %>%
mutate(date_str = sprintf("%d%02d01", year, month))

# 空的 DataFrame 用來儲存資料
all_data <- data.frame()

# 迴圈抓資料
for (date in date_list$date_str) {
# 大盤
url <- paste0("https://www.twse.com.tw/indicesReport/MI_5MINS_HIST?response=csv&date=", date)
# 個股, stock id 填入股票代碼
# url <- paste0("https://www.twse.com.tw/exchangeReport/STOCK_DAY?response=json&date=", date, "&stockNo=", stock_id)
# 發送請求
response <- readLines(url)
if (length(response)>2) {
raw_text <- response[4:length(response)]
data_lines <- read.csv(text = raw_text, header = FALSE)[,1:5]
all_data <- rbind(all_data, data_lines)
cat("成功下載:", date, "\n")
} else {
cat("無資料:", date, "\n")
}
# 避免下載過程過快導致被擋
Sys.sleep(0.25) 
}

# 更改變數名稱
colnames(all_data) <- c("date","open","high","low","close")

關鍵詞
網路爬蟲、R語言
刊名
商研所許誠哲