一樣是運用 Python 加上 Pandas 來爬取每季財報。這回會額外運用到 path 函式庫以及 for 迴圈來批次、讀取資料。
課程名稱
用 Python 理財:打造小資族選股策略:https://bit.ly/2KXR1Nw
對於初學者而言,算是簡易的入門教材。由於 Python 本身的語言特性,相較於 JavaScript 是比較人性化的。外加上已內建不少好用的函式庫,對於資料分析的處理上,用 Python 入門算是滿不錯的。
課程相關文章
輔助套件安裝
隨著表格的欄位數量增加,內建的 Terminal 無法顯示如此多的欄位,這時可以使用 Jupyter Notebook 來協助。你可以在 Anaconda 的沙盒內安裝,並下載 VS Code 的 VS Code Jupyter Notebook Previewer 套件,你就可以在 VS Code 裡使用 Jupyter 的預覽模式,而不用打開特定瀏覽器。
指令
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
import requests import pandas as pd import time #載入定時函式庫 import os #載入作業系統函式庫 from io import StringIO # 抓取指定公司的財報資料 sid = ['1101', '1301'] """ for s in sid: res = requests.get( 'http://mops.twse.com.tw/server-java/t164sb01?step=1&CO_ID='+s+'&SYEAR=2019&SSEASON=2&REPORT_ID=C') res.encoding = 'big5' #運用 os.path.join 來根據作業系統不同,添加 / 或是 \ path = os.path.join('python_learn/data', s+'.html') f = open(path, 'w') f.write(res.text) f.close() #定時器,單位為秒,以免頻繁爬取被伺服器封鎖 time.sleep(20) """ # 批次讀取財務報表 dfs = [] for s in sid: path = os.path.join('python_learn/data', s+'.html') dfs.append(pd.read_html(path, encoding='utf-8')) # 按照sid的順序,批次印出三張財務報表 for i in range(len(dfs)): print(dfs[i][0]) # 資產負債表 print(dfs[i][1]) # 綜合損益表 print(dfs[i][2]) # 現金流量表 i += 1 |
參考資料
執行 for 迴圈時出現 “list indices must be integers or slices, not str” 的解決方法:
https://stackoverflow.com/questions/32554527/typeerror-list-indices-must-be-integers-or-slices-not-str