使用Shioaji API,第一次接觸的人最常遇到的問題就是要如何抓所有的股票資料
在Day 03 - Contract這篇文章中有說明Contract的種類及抓取的方式,下面就示範如何抓所有的股票資訊,並透過pandas匯出成csv檔。
import os
from dotenv import load_dotenv
import shioaji as sj
import pandas as pd
load_dotenv('D:\\python\\shioaji\\.env') #讀取.env中的環境變數
api = sj.Shioaji()
api.login(
person_id=os.getenv('YOUR_PERSON_ID'),
passwd=os.getenv('YOUR_PASSWORD')
)
stock_list = [] #建立一個list,用來存放stock的contract
for exchange in api.Contracts.Stocks: #遍歷Stocks底下所有的exchange
for stock in exchange: #遍歷該exchange底下所有的stock contract
stock_list.append({**stock}) #將stock contract中的屬性轉成dict並加入stock_list中
df = pd.DataFrame(stock_list) #將stock_list轉換成DataFrame
df.to_csv('stock_list.csv', encoding="utf_8_sig") #將DataFrame匯出成csv,並指定encoding
api.logout()
在上面的程式碼,可以看到for in
的方式遍歷api.Contract.Stocks.XXX底下的股票Contract
同樣的,若要抓取所有期貨的contract並匯出成csv,可參考以下範例:
import os
from dotenv import load_dotenv
import shioaji as sj
import pandas as pd
load_dotenv('D:\\python\\shioaji\\.env')
api = sj.Shioaji()
api.login(
person_id=os.getenv('YOUR_PERSON_ID'),
passwd=os.getenv('YOUR_PASSWORD')
)
future_list = []
for category in api.Contracts.Futures:
for future in category:
future_list.append({**future})
df = pd.DataFrame(future_list)
df.to_csv('future_list.csv', index=False, encoding="utf_8_sig")
api.logout()