Java 擷取上市櫃公司名稱與代號

Chao-Hsuan Ke
小小實驗室
Published in
Oct 19, 2020

之前寫了用 Python 擷取上市櫃公司名稱與代號,

也該來寫個 Java 版的才是。

台灣的股票資料來源是台灣證券交易所以及證券櫃臺買賣中心。上市與上櫃公司的名稱與代號已經可以直接從下面列出的網址查到:

本國上市證券國際證券辨識號碼一覽表

https://isin.twse.com.tw/isin/C_public.jsp?strMode=2

本國上櫃證券國際證券辨識號碼一覽表

https://isin.twse.com.tw/isin/C_public.jsp?strMode=4

有了這兩個網址上的資訊,要擷取資訊就快了。

Java 要擷取網頁有許多方式,不過現在很多網頁因為安全性限制所以不提供 http 的讀取 ,需要改用 HttpsReader 來抓 https 資料。這一部分我是自己懶得再寫了,直接使用別人寫好的比較快。

全部的 code 可以先從這邊下載: https://github.com/deternan/Medium/tree/master/code/src/get_StockIdName

主要分別是在 get_StockIdName 資料夾下的兩個檔案

GetCompany_Main.javaget_Company_list.java

以及 httpGet 資料夾下用於擷取 https 網頁資料的

GetValues.javaHtmlReader.javaHttpReader.javaHttpsReader.java

GetCompany_Main 是主程式,主程式只是當作用入口(接口),會呼叫其他類別來進行工作,主要是會去呼叫 get_Company_list.java 來進行https 擷取網頁的動作。擷取回來的資料會自動存成文字檔,因此記得要修改 get_Company_list.java 內的儲存位置 sourceFolder 變數。

執行後會把 html code 抓回,但可以看得出來此 html 是由 table 建成,第三列之後才是我們想要的資料,所以要從第三列開始抓,而資料的每一列總共有 7 個 td。

String temp[];for(int i=0; i<trs.size(); i++) {Elements tds = trs.get(i).select("td");if(tds.size() == 7) {temp = tds.get(0).text().split(" ");if(temp[0].trim().length() == 4) {companyId.add(temp[0].trim());companyName.add(temp[1].trim());}}}

此段 code 是 get_Company_list.java 的片段,先判斷 td 為 7 時才開始擷取,且把抓到的資料依序將 代號 與 名稱 存入 companyId 與 companyName 兩個 Vector 中。

在 output 的方法中會將 companyId 與 companyName 兩個 Vector 輸出,如此即完成股票的代號與名稱擷取。

--

--

Chao-Hsuan Ke
小小實驗室

永遠熱愛自己的工作,總是找一堆事把自己的時間塞滿。喜歡接觸不同領域,像是 歷史、文化、金融和公共政策 等議題,期許著自己會什麼就分享什麼。