labview
[LabVIEW實作] 爬取股市資訊
一、前言
爬股市資訊,最常聽到的就是用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 留言