適用對象:
- 有 Python 基礎. 可以自己執行 Python 程式的人.
- 有興趣學習 Python 爬蟲程式的人.
知識基礎:
- Python
- Pandas : Python 數據分析的資料結構函式庫. 是爬蟲程式的主要核心.
- Requests : Python 網路連線功能. 作為 Http 資源下載使用.
爬蟲程式的概念:
- 其實爬蟲程式的概念很簡單. 找到你要的網路資源 (包含網頁, 檔案…) , 讀入後去除你不需要的內容, 再將你需要的資料存成檔案即可.
- 讀取網路資源, 使用的是 requests 這個 package. 只要一行, 就完成.
- 因為股價資料, 主要是數字為主, 文字資料為輔. 尤其是我們需要的是類似 “表格” 式的資料時, 使用 Pandas 是最方便的. 舉例來說, 如果你查找的網頁只有一個表格. 讀入到 pandas 的格式, 只要一行. 存成 csv 檔, 也只要一行. 換句話說, 你的主程式只要三行, 就完成了.
- 資料處理階段: 對下載的資料, 去蕪存菁, 只留你需要的資料.
- 將資料存入到 pandas 結構. 類似於 R 語言的 dataframe.
- 整理 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)
注意事項:
- TWSE 在連線時, 會有次數限制. 如果太頻繁連線, 程式就會回傳連線錯誤. 可以用 try: except: 處理.
- 這程式是可以允許多檔股價下載. 所以, 在處理 pandas 的資料結構時, 記得要建立 company id 的陣列, 再與股價資料合併. 這個部份讓各位處理. 作練習用.