關於 Python網路爬蟲 是什麼東東,Jason 在前一篇:【教學】使用Python網路爬蟲下載大量圖片資料 中已經介紹過了!然後這一篇主要就是要教怎麼到「臺灣證券交易所」爬台股的的歷史資料。因為 Jason 也知道,其實很多人跑來學 Machine Learning、Deep Learning、Data Mining 或者 Data Analysis 的東西,最終的目的就是想把這些技術應用在股票上面xDD
雖然 Jason 以前是認為這東西大概沒什麼搞頭吧~ 至於為什麼這邊就不詳談了,但是最近開始對它卻有一點點改觀。 接著不論你今天想用什麼 Data Science 的技術來搞它,那你也先要有 Data! 有在玩台股的人應該都知道臺灣證券交易所,基本上它就是負責營運台灣證券集中交易的這麼一個機構,自然它也會提供一些資訊讓人查詢,像是有哪些上市櫃公司、那些公司的基本資料以及我們今天想爬的股市交易資訊等等。
然後其實股票還有分很多種,像是:上市、上櫃、興櫃、未上市、全額交割等等。
至於它們是怎麼分的,彼此之間的差異與風險又為何? Jason 這邊就不多做介紹了,畢竟這邊也不是啥專門的投資理財 Blog,個人也沒啥專門的財金相關背景,對這方面不太了解的小夥伴再自行上網 Google 一下八~ 回歸正傳,如果我們今天想爬某支特定的股票 e.g. 台積電(2330),其實台灣證卷交易所是有提供這樣的API可以讓我們Call的!舉例來說,如過你想查詢台積電(2330)在今年10月份的股票交易資料,可以在瀏覽器中鍵入下列網址: http://www.twse.com.tw/exchangeReport/STOCK_DAY?date=20201001&stockNo=2330 就可以收到台灣證卷交易所用 JSON 格式回傳給你的資料,長得像這個樣子:
事情到這邊接下來就簡單了,我們只要用 requests 模組把想要分析的股票資料一個月接著一個月爬下來,然後再配合 pandas 模組做後續的整理 & 存檔就搞定了!
但是在實務上我們往往需要下載不只一支股票的歷史資料,所以在此之前我們可以先來下載一分清單,整理出台股全部有哪些股票。就像上面所提到的股票有分很多種,我們這邊就先只整理出上市上櫃的,其他的暫時不理它。 Jason 這邊是直接寫一個 function 上網來抓,如果想看它是怎麼一步一步把這份清單整理出來的,可以下載這份 ipynb 來看。
Get Stock List
在有了 Stock List 之後,我們就知道 API 中的第二個參數(stockNo)要填多少了,接下來剩第一個參數(STOCK_DAY?date),我的想法是在給定一個時間段後,讓程式產生一個 Date List 然後再按照清單裡面的時間點一個一個去爬這樣。
Get Date List
雖然上面這段 Code 看起來沒很優雅,但至少會 Work,而且也不是啥工作上的東西只是自己無聊搞的小小 Side Project 也就懶的改進它了,在 Stock List 跟 Date List 都有了之後,接下來我們只要用清單配合 API 一支一支慢慢的把它們都爬下來就好了!
Get Stock Data
最後主程式的部分也沒什麼好取巧的,就是按照股票清單與日期清單,一次一支股票、一次一個月慢慢爬這樣,爬完之後再把它存成CSV檔。
Main
另外,為了避免爬太快被 Server 當成惡意程式,所以有加了個 Random 的 Sleep 在程式裡面,如果你覺得這樣睡太久爬太慢可以試著把它改短,但是如果改太短應該還是會被 Server 那邊擋掉,具體要設多少你們可以自己試試。
如果你每一支股票都要爬,然後又要從很久以前開始爬的話,應該是會花費很多時間,主要都是浪費在 Sleep 上面 ( 但這東西又是必要的,不能省Q_Q ),所以我是建議你這東西不要在本機上做,用 Google Colab 來做!因為你在 Colab 上是可以開很多 Sessions 的 ( 之前測試一個Google 帳號可以開 5個 ),如果你又擁有多個 Google 帳號的話就又可以再開更多!你就可以把要爬的股票切成很多段,一個 Session 爬其中一段就好了,這樣就可以快很多。 再不然如果你還是懶得爬的話,也可以下載 Jason 已經爬好的資料。 Jason 之前是爬台股每一支上市上櫃的股票(共946支),然後從 2010年10月開始到 2020年10月份結束,但是 Jason 之前是在雙十節那個連假爬這東西的,所以 2020年10月的資料就沒有很完整。
0 評論
發表回覆。 |
Jason Chen人不光是生來就擁有一切,而是靠他從學習中得到的一切來造就自己。- 歌德 文章分類
全部
封存檔
九月 2023
|