爬蟲: 下載台股歷史股價 TWSE爬蟲: 下載台股歷史股價 TWSE

適用對象:

  • 有 Python 基礎. 可以自己執行 Python 程式的人.
  • 有興趣學習 Python 爬蟲程式的人.

知識基礎:

  1. Python
  2. Pandas : Python 數據分析的資料結構函式庫. 是爬蟲程式的主要核心.
  3. Requests : Python 網路連線功能. 作為 Http 資源下載使用.

爬蟲程式的概念:

  1. 其實爬蟲程式的概念很簡單. 找到你要的網路資源 (包含網頁, 檔案…) , 讀入後去除你不需要的內容, 再將你需要的資料存成檔案即可.
  2. 讀取網路資源, 使用的是 requests 這個 package. 只要一行, 就完成.
  3. 因為股價資料, 主要是數字為主, 文字資料為輔. 尤其是我們需要的是類似 “表格” 式的資料時, 使用 Pandas 是最方便的. 舉例來說, 如果你查找的網頁只有一個表格. 讀入到 pandas 的格式, 只要一行. 存成 csv 檔, 也只要一行. 換句話說, 你的主程式只要三行, 就完成了.
  4. 資料處理階段: 對下載的資料, 去蕪存菁, 只留你需要的資料.
  5. 將資料存入到 pandas 結構. 類似於 R 語言的 dataframe.
  6. 整理 pandas 格式. 匯出成你要的格式.

程式說明:

以下針對程式的部份, 簡單的說明: (請注意, 如果只是為了完成下載股價, 其實 4, 5 行程式碼就完成了. 不過為了讓下載更自動化, 所以, 額外加了很多控制)

載入 packages:

import requests
from io import StringIO
import pandas as pd
import numpy as np

參數資料準備

資料準備

# 下載股價的日期
dates = pd.date_range(‘2019-05-01′, periods = 1, freq=’MS’)
# 要下載公司的清單
comlist = [‘2330′,’6446’]

# 依公司清單執行迴圈
for comid in comlist:
x = ”
data = []
stockid = []

for dt in dates:
# 下載股價
turl = “http://www.twse.com.tw/exchangeReport/STOCK_DAY? response=csv&date=” + dt.strftime(‘%Y%m%d’) + “&stockNo=” + comid
r = requests.post(turl)
# 整理資料,變成表格
x = r.text.split(‘\r\n’)

# extract true data
y = x[2:len(x) – 6]

for line in y:
data.append(line.replace(‘”,”‘, ‘;’).replace(‘”‘,”).replace(‘,’,”).split(‘;’))

# 最後的動作. 將資料匯出成 csv 檔
cols = x[1][0:len(x[1]) -1].replace(‘”‘,”).split(‘,’)
df = pd.DataFrame(data, columns=cols)
dfcols = list(df.columns[1:len(df.columns)])
df1 = df.loc[:, list(df.columns[1:len(df.columns)])]
df1.index=df[‘日期’]
fname = comid + ‘.csv’
df1.to_csv(fname)

注意事項:

  1. TWSE 在連線時, 會有次數限制. 如果太頻繁連線, 程式就會回傳連線錯誤. 可以用 try: except: 處理.
  2. 這程式是可以允許多檔股價下載. 所以, 在處理 pandas 的資料結構時, 記得要建立 company id 的陣列, 再與股價資料合併. 這個部份讓各位處理. 作練習用.

Leave a Reply

Your email address will not be published.

機器學習課程 : 1 startup機器學習課程 : 1 startup

知識準備: 在我研究機器學習 (Machine Learning) 的過程中, 會有幾項基本的知識會不斷的出現. 由於我不太愛背, 也沒有對特定領域有太深入的鑽研. 如果你也是像我一樣, 希望做到了解機器學習的邏輯, 內容, 以及如何應用? 就請繼續看下去. 如果你想研究之餘, 更深入的去探討學問, 例如損失函數的微積分做法及驗證. 那本系列文章就不太合適了. 本系列文章, 偏向於初、中級的讀者. 歡迎您加入一起討論. 基本上, 機器學習是一個隨時間發展的科學. 所以, 我們也是從簡單的機器學習 (回歸, 分類…) 開始, 再逐步深入到神經網路和深度學習. 我比較偏好的 top-down