[專題實作]以Yfinance之臺股資料進行市場寬度指標驗證-Step2以Yfinance抓取名單中證券2010-2023收盤價
承前篇,Step1爬取上市櫃公司股票與ETF代碼名單,有了名單之後當然就要來開始爬資料啦!Yfinance的資料抓取很簡單,這邊因為資料的需求我只要Close收盤價,需要其他的小夥伴自己研究蛤。
在本文中,我們將介紹如何使用 Python 中的 requests
、time
、os
、csv
和 pandas
模組,以及 yfinance
庫來爬取台灣上市櫃股票及 ETF 的數據。這些數據將會被處理並保存為 CSV 文件,以供後續分析使用。
1. 讀取股票代碼
首先,我們從 CSV 文件中讀取股票代碼,這些代碼將被用於後續的數據爬取。以下是讀取 CSV 文件並將股票代碼存入列表的代碼:
python
import csv
path = r"D:\市場寬度 專題\2023上市櫃股票及ETF代碼(for yfinance)-1.csv"
TW_TWO = []
with open(path, "r", newline="", encoding='utf_8_sig') as csvfile:
reader = csv.reader(csvfile)
for row in reader:
TW_TWO.append(row[1]) # 取出股票代碼
del TW_TWO[0] # 刪除第一行(索引)
print(TW_TWO) # 檢查讀取結果
2. 爬取股票收盤價
接下來,我們使用 yfinance
庫來爬取每個股票代碼從 2010 年 1 月 1 日到 2023 年 2 月 1 日的收盤價,並將結果存入一個 DataFrame 中。
python
import time
import pandas as pd
import yfinance as yf
df_stock = pd.DataFrame()
for i in TW_TWO:
time.sleep(1) # 防止過快的請求
print(i) # 顯示當前處理的股票代碼
df = yf.download(i, start='2010-01-01', end='2023-02-01')
df = df[['Close']] # 只保留收盤價
df = df.rename(columns={'Close': i}) # 將欄位命名為股票代碼
df_stock = pd.concat([df_stock, df], axis=1) # 合併數據
df_stock = df_stock.dropna(axis=0, how='all') # 刪除空行
path1 = r'D:\市場寬度 專題\2010-2023個股股價df.csv'
df_stock.to_csv(path1, sep=',', na_rep='', encoding='utf_8_sig') # 保存數據
3. 爬取大盤指數
最後,我們使用 yfinance
庫爬取台灣加權指數(TWII)的數據,並將其保存為 CSV 文件。
python
import pandas as pd
import yfinance as yf
TWII = yf.download('^TWII', start='2010-01-01', end='2023-02-01')
TWII = TWII[['Close']]
TWII = TWII.rename(columns={'Close': '^TWII'})
print(TWII)
path2 = r'D:\市場寬度 專題\2010-2023 大盤指數 _raw.csv'
TWII.to_csv(path2, sep=',', na_rep='', float_format='%.4f', encoding='utf_8_sig')
總結
本文介紹了如何使用 Python 和 yfinance
庫來爬取和處理台灣上市櫃股票及 ETF 的收盤價數據。我們讀取了包含股票代碼的 CSV 文件,爬取了每個股票的收盤價,並將結果保存為 CSV 文件。此外,我們還爬取了台灣加權指數(TWII)的數據並進行了同樣的處理。這些數據可以用於後續的金融分析和研究。
留言
張貼留言