• Stars
    star
    400
  • Rank 107,843 (Top 3 %)
  • Language
    JavaScript
  • Created over 9 years ago
  • Updated over 7 years ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

台灣股票即時爬蟲。Taiwan Stock Exchange Real Time Crawler

Taiwan Stock Real Time Crawler

這是一個會爬台股即時資訊的爬蟲,此外也分析了台灣證券交易所的 API。

討論室

有問題的話可以到 Gitter.im 發問,會盡快回答

環境需求

  • Python2 or Python3

安裝相關套件

pip install requests

使用方法

python crawl.py

可以爬當下 50 隻當沖股票的即刻資訊。

注意事項

更改清單

若要改抓取的清單,可以把 stocknumber.csv 中的股票編號換掉就好了。

資料完整性

雖然說官方文件說 5 秒會更新一次,但是爬蟲實際上戳,即便已經改成 3 秒戳一次了,每天總會漏掉一些交易,所以價量圖並不完善,約只能涵蓋 99% 的資料。

python genTodayVolumeFigure.py 可以產生今天的價量圖,ex:

9914
250.00:      39
250.50:     123
251.00:       8
251.50:      58
252.00:     122
252.50:      87
253.00:     198
253.50:      91
254.00:      38
254.50:     103
255.00:      29
255.50:       9
256.00:       1
(99.77974%)

資料整理

每天跑完後,可以執行 python cleanTodayDuplicateData.py 刪除重複抓到的資料和依照時間排序。

資料更新

每天收盤後我抓完會 push 到 github 上,如果需要的話可以 git pull 我,當然如果你也有自己抓的話,每天也可以自己更新囉。

因為機器空間不足,所以過去的資料放到 Mega 上:

Crontab 產生

python genCrontabScript.py 可以產生每五秒戳一次的 crontab。

資料格式

每天的資料會存在 data 中,當天的日期資料夾內(ex. 20150303),裡面把所有抓的資料按股票編號放 XXXX.csv 中,XXXX 就是股票編號。

檔案內每一行為一個抓取一次下即刻的資訊,分別是:

時間, 最近成交價, 當盤成交量, 累積成交量, 最佳五檔(賣價), 最佳五檔(賣量), 最佳五檔(買價), 最佳五檔(買量)

ex. 13:30:00,43.25,616,6690,43.25_43.30_43.35_43.40_43.45_,216_285_90_274_201_,43.20_43.15_43.10_43.05_43.00_,3_1_23_91_424_

更新當沖清單

  1. 下載 台灣證券交易所-當日沖銷交易標的及統計 最新清單
  2. 可能要更改 getCurrentList.py 的檔案名稱
  3. python getCurrentList.py 得到 stocknumber.csv

資料來源

台灣證券交易所 - 基本市況報導網站

證交所 API Document (偽)

經過解析 基本市況報導網站 下所執行的 Javascript 檔(可以參考 /ctrl-reference ),整理出了 twse 的 API 清單如下:

  • getChartOhlcStatis
  • getDailyRangeOnlyKD
  • getDailyRangeWithMA
  • getOhlc
  • getShowChart
  • getStock
  • getStockInfo
  • getStockNames
  • resetSession

getStockInfo Usage

其中 getStockInfo 可以用來抓取當前的交易資訊,用法如下:

http://mis.twse.com.tw/stock/api/getStockInfo.jsp?ex_ch=STOCK_NUMBER&_=CURRENT_TIME

參數設置:

  • STOCK_NUMBER 是該隻股票的種類和號碼,ex. tse_1101.tw_20150624,也可以用 | 一次 query 很多筆股票資料。ex. tse_1101.tw_20150624|tse_1102.tw_20150624|tse_1103.tw_20150624
  • CURRENT_TIME 是當下的 epoch time,單位是毫秒

getStockInfo Response

分析 response 的 JSON 可以得到:

  • msgArray
  • queryTime
  • rtcode
  • referer
  • rtmessage
  • userDelay

其主要資訊都在 msgArray 中,分為以下幾類:

股票資訊

  • c:股票代號,ex. 1101
  • ch:Channel,ex. 1101.tw
  • ex:上市或上櫃,ex. tse
  • n:股票名稱,ex. 台泥
  • nf:似乎為全名,ex. 台灣水泥股份有限公司

即時交易資訊

  • z:最近成交價,ex. 42.85
  • tv:Temporal Volume,當盤成交量,ex. 1600
  • v:Volume,當日累計成交量,ex. 11608
  • a:最佳五檔賣出價格,ex. 42.85_42.90_42.95_43.00_43.05_
  • f:最價五檔賣出數量,ex. 83_158_277_571_233_
  • b:最佳五檔買入價格,ex. 42.80_42.75_42.70_42.65_42.60_
  • g:最佳五檔買入數量,ex. 10_28_10_2_184_
  • tlong:資料時間,ex. 1424755800000
  • t:資料時間,ex. 13:30:00
  • ip:好像是一個 flag,3 是暫緩收盤股票, 2 是趨漲, 1 是趨跌, ex. 0

日資訊

  • d:今日日期,ex. 20150224
  • h:今日最高,ex. 42.90
  • l:今日最低,ex. 42.35
  • o:開盤價,ex. 42.40
  • u:漲停點,ex. 45.10
  • w:跌停點,ex. 39.20
  • y:昨收,ex. 42.15

不明所以

  • i: ex. 01
  • it: ex. 12
  • p: ex. 0
  • tk0: ex. 1101.tw_tse_20150224_B_9999310874
  • tk1: ex. 1101.tw_tse_20150224_B_9999293545

以上資訊由於找不到官方 API,為分析所得,可能有誤。

附上免責聲明

本人旨在為廣大投資人提供正確可靠之資訊及最好之服務,作為投資研究的參考依據,若因任何資料之不正確或疏漏所衍生之損害或損失,本人將不負法律責任。是否經由本網站使用下載或取得任何資料,應由您自行考量且自負風險,因任何資料之下載而導致您電腦系統之任何損壞或資料流失,您應負完全責任。

聯絡我

有 Bug 麻煩跟我說:

最後更新時間:2017/02/15

我的其他專案

台灣上市上櫃股票爬蟲,含歷史資料