爬蟲: 下載台股歷史股價 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.

python

Python in WordPressPython in WordPress

本頁是用來示範如何將 Python 執行的結果顯示在 WordPress 中. 以下的內容, 是由 Python Flask 回傳的簡單訊息. 並內嵌在 WordPress 的頁面中. 它的優點: WordPress 具有完整的 CMS 功能. 可以讓後端工程式簡化 UI 程式的開發. 而且界面容易變化管理 WordPress 有會員管理功能, 可以透過它來管理使用者 Python 適合用於後端資料處理. 開發速度快. 兩者結合方便很多.

regexp

正則表達式與爬蟲正則表達式與爬蟲

不知道什麼是 Regexp 別說你懂爬蟲~~ 帶你了解 Regexp 正則的強大文字處理功能 什麼是 正則表達式 ( Regexp ) ? Regular Expression , 中文稱為正則表達式.  它的前世今生, 請看 WIKI  .   為什麼要在這裏說明什麼是 Regexp 呢? 即使是很多的程式設計師, 對於正則的使用, 也未必清楚. 在大數據時代來源之前, 正則的使用, 耳熟能詳的, 就只是在