python爬蟲 — 每日即時股價

Rainie
職場學習筆記
Published in
6 min readMar 11, 2019

嗨,各位今天過得好嗎?(偷理科太太的開場)很久沒寫股票文章了,今天想簡短教學一下如何爬取台股的每日即時股價資訊 !我大概瀏覽了一下目前常見的股票爬蟲文章,大部分都還是從台灣證券交易所提供的公開資訊取得,所以今天的爬蟲我們就從證券交易所提供的基本市況報導網站下手吧!

程式碼:

將上述程式碼拆成三個步驟:

1. 爬取目標網站,包裝成函式方便重複呼叫2. 啟動定時器,定時觸發爬蟲取得最新股價資訊3. 美化表格

Step1. 爬取目標網站,包裝成函式方便重複呼叫

進入基本市況報導網站後,在右上角的個股行情查詢欄位輸入股票代號,本篇以台泥(1101)做例子:進入台泥股價頁面後,按下 F12 開啟 chrome 開發人員工具,切換到 network tab 可以發現這個頁面頻繁的對http://mis.twse.com.tw/stock/api/getStockInfo.jsp發出 Get 的 request。

基本市況報導網站

簡單的解析一下目標URL:這個網址帶了4個參數進去,重要的只有 ex_ch 這個參數,它代表了要 Get 的股票代碼,可以用|一次 query 多筆資料。

http://mis.twse.com.tw/stock/api/getStockInfo.jsp?ex_ch=tse_1101.tw|tse_1102.tw|tse_1103.tw&json=1&delay=0&_=1552123547443

[補充] 實際去 query 發現不帶另外三個參數也是可以正確取得資料 😮目前程式碼就沒有帶上後面的參數。

在網址列輸入上面 query 的網址可以直接在網頁上觀察資料格式。每一筆股價資料總共有36個欄位,我只取 ['c','n','z','tv','v','o','h','l','y'] 分別代表 ['股票代號','公司簡稱','當盤成交價','當盤成交量','累積成交量','開盤價','最高價','最低價','昨收價'],這幾種即時股價比較常用到的資訊,大家之後可以依照自己的需求調整。

檔案撈下來後將型態從 json 轉換成後續好處理也好顯示的 dataframe。此外,因為資料本身並沒有包含漲跌百分比的欄位,但是一般常見的股票網站或是手機 app 都會有,我自己也比較喜歡有這格資訊,所以手動替表格增加這格。

json格式
dataframe格式

Step2. 啟動定時器,定時觸發爬蟲取得最新股價資訊

即時股價最重要的就是要即時更新,並能在固定的時間去網站撈最新資訊下來。為了達成這個目的,我使用 python 的 schedule 排程,讓程式自動觸發爬蟲程式去網站抓取最新資訊。股市的開盤時間在平日的早上九點到下午一點半,爬蟲需要在這段時間定時擷取股價資訊(e.g. 程式碼範例是每秒觸發一次),其他時間就只需要擷取一次收盤資訊就好。

這邊提醒大家不能太頻繁地對網站發出 request ,否則 IP 很有可能會被鎖一段時間,記得至少等個一下再重新送 request(詳細秒數我並沒有實際去測試,目前使用一秒是不會被鎖的)。如果真的追求非常即時,一個資訊都不能漏掉的話,這個程式可能無法滿足你的需求。

當爬蟲在時間範圍內,每秒觸發一次

只在函式外部使用定時器排程一次,爬蟲並不會循環觸發,必須要在爬蟲結束前根據條件決定需不需要再一次排程,爬蟲才能定時觸發。如果沒有限制任何條件每一次爬蟲完都重新加入排程,會導致程序進入無窮迴圈,得強制關掉整個 process 才能停止喔!

Step3. 美化表格

恩~ 很可有可無的一個步驟 😂 😂😂,純粹只是因為在查資料的時候發現dataframe可以自定義表格顯示的顏色,於是挑了最簡單的改法試試!這份程式碼只將漲跌百分比改了顏色:當股票上漲時用紅色字體表示、下跌時用綠色字體表示。有興趣想了解更多關於 dataframe 設置的人可以參考相關網站[4],裡面有其他更豐富的視覺設定,讓你們可以根據自己喜歡的顏色或排版修正!

[補充] 我的底色是黑色所以平盤時字體白色會比較明顯,如果底色是白色的,平盤時把顏色改成黑色,版面看起來會比較清楚~

目前股票該爬的資訊應該都爬的差不多了,暫時想不出什麼新點子 😅,大家如果有想了解什麼或是希望我寫什麼關於股票的文章的都可以提供意見給我。最近還有很多讀書心得積著沒寫,股票的文章就等我想到下個主題或是最近看了股票的書有點心得的時候再來更新!歡迎大家推薦股票的書籍給我~程式碼有任何錯誤也歡迎大家幫忙指正!!!

[參考網站]

1. https://sites.google.com/site/kentyeh2000/zheng-jiao-suo-ji-shi-zi-xun-jie-xi

2. http://mis.twse.com.tw/stock/index.jsp

3. https://github.com/Asoul/tsrtc

4. http://pandas.pydata.org/pandas-docs/stable/user_guide/style.html

--

--