一、前言


爬股市資訊,最常聽到的就是用Python來爬。那麼,LabVIEW的學習者也能學以致用嗎?答案是肯定的!

完成的程式碼與人機介面如下圖所示,會覺得複雜嗎?別擔心,不妨跟著我的思路一步一步逐步把成果構建起來。


二、問題描述


用 Match Pattern + HTTP GET,爬股市資訊,透過代號搜尋,顯示不同股票,即時網頁資訊。

三、解題步驟

解題原則就是化繁為簡,逐步擊破。因此我們把任務拆解成3個目標。

目標1 : 可輸入股票代號,同時顯示股票名稱
目標2 : 顯示欄位名稱
目標3 : 顯示欄位對應之值

Step 1.運用HTTP GET擷取網頁資訊 (以2330台積電為例)

在奇摩股市網頁中輸入台積電股票代號,你會看到以下的畫面。
觀察一下網址的文字(黃色螢光筆),會發現一個規則 : 文字都是固定的,數字會隨著你輸入的股票代號不同而變動。


因此,根據我們發現的規則,我們在LabVIEW上呼叫 Concatenate Strings (串接字串)的函式,固定的網址文字以 常數字串 呈現。股票代號則以 控制字串 呈現。如下圖所示 :




為了要抓下該網頁的資訊,請呼叫 HTTP GET這個函式 (路徑 : Functions >> Data Counication >> Protocols >> HTTP Client >> GET),並和Concatenate Strings函式連線。GET可幫你顯示出網頁的header(型態是Indicator)和body(型態是Indicator),相關接線,如下圖 :

補充說明,client handle out 與 error out的線不一定要接。

然後你在人機介面看到header和body擷取到資訊,如下圖所示 :


Step 2.顯示股票名稱

接下來就要利用 Match Pattern 的函式來顯示股票名稱。你可以從網頁或人機介面顯示的body查找 "台積電" 3個字的所在位置與規則。以網頁為例,查找到的"台積電"如螢光筆所示。



我們發現只要透過 "<" 和 ">",就可以把 "台積電" 這三個字比對出來。因此,接著呼叫 Match Pattern 函式,並完成相關接線和整理,如下圖 :




做到這邊,你在人機介面上會看到下圖的樣子。很棒喔,我們已經實現目標1了,只剩2個目標就完成了,加油!


Step 3.運用Match Pattern擷取欄位名稱

從網頁或人機介面顯示的body查找 欄位名稱所在位置與規則。以網頁為例,查找到的欄位資訊如螢光筆所示。(請看時間那列就好。手殘不小心掃到代號那列,請忽略。)


而我們所需的資訊從 "時間" 到 "最低" 計有10欄,因此我們可以運用 for迴圈 搭配 Match Pattern 的函式,將這些欄位名稱擷取出來。結合稍早你所完成的部分,目前完成的程式如下圖所示 :
 

程式正常運作後,欄位名稱的 Indicator 會正常抓取資訊,顯示如下 :


Step 4.運用Match Pattern擷取各欄位數值

同樣比照Step3,從網頁或人機介面顯示的body查找 欄位名稱所在位置與規則。以網頁為例,查找到的欄位數值資訊如黃色螢光筆所圈選的區塊。




而我們所需的資訊計有10欄,因此我們可以運用 for迴圈 搭配 Match Pattern 的函式,將這些數值擷取出來。結合稍早你所完成的部分,目前完成的程式如下圖所示 :


程式正常運作後,資料的 Indicator 會正常抓取資訊,顯示如下 :



但當你仔細看的時候,你會發現第二格與第五格的顯示資料似乎不是你預期的,因此我們會在下個步驟進行處理。

Step5. 處理異常資訊之欄位

我們發現第二格未處理的成交欄顯示資料為 " <b>300.5</b> ",第五格未處理之漲跌欄顯示如下圖 :





同樣運用 Match Pattern的方式,擷取第二格所需資訊,程式摘要如下 :



同樣運用 Match Pattern的方式,擷取第五格所需資訊,程式摘要如下 :


完成後,將原本在 Step4 所擷取到的資料進行置換,程式摘要如下 :



最後希望時間的顯示可以從 " 09:42 ",再多加日期的資訊,顯示成 " 2020/5/11 上午 09:42:53 ",程式碼摘要如下 :



Step 6. 將所有區塊的程式整合起來


完成的程式碼如下圖所示 :


人機介面顯示如下 :


恭喜你,大功告成!

#LabVIEW # MatchPattern #stocks #股市爬蟲

0 留言