今天我們要講解的是,如何使用VBA+網頁XPath來抓取GoodInfo股票資訊
VBA使用的套件為MSXML2.XMLHTTP、與HTMLFile
MSXML2.XMLHTTP可以幫助我們進行網頁連線並取得內容
HTMLFile能夠利用網頁元件ID取得網頁資料
另外我們還自己寫了一些函數,將網頁標籤階層轉為Xpath ID,以便HTMLFile提取資料
今天要抓取的標的一樣是大立光,股票代號3008,
首先抓取公司名稱與產業別,這邊使用MSXML2.XMLHTTP進行網頁連線,並等待連線完成
連線完成後,呼叫函數進行解析,並使用Xpath ID取出資料
接著來抓取股利政策,一樣使用MSXML2.XMLHTTP進行網頁連線,並等待連線完成
由於表格某些資料佔用不只一欄或一列
所以我們必須先計算表格的欄數與列數
並且手動補齊,避免標頭有空白資料的狀況
再來設定要抓取的資料
找出資料欄位的索引值
最後取得表格的內容
接著抓取獲利狀況,首先使用MSXML2.XMLHTTP進行網頁連線,並等待連線完成
先計算表格的欄數與列數
補齊標頭資料
設定要抓取的資料
找出資料欄位的索引值
最後取得表格內容
最後來介紹我們寫的幾個簡單的函數
Prefix_Start作用是遇到標籤起頭將階層ID增加一層,並決定陣列索引
比如html開始的語句<html lang="zh-Hant">會被新增一個 id='/html[1]/' 屬性
如果這一次的階層(strPrefix)跟前一次的階層(strLastPreFix)為同一階層,我們會把前一次階層陣列的索引值取出加1後,指定給這次的陣列索引
前一次div陣列索引為1,這一次div陣列索引就增加為2
在解析股利政策時,我們有遇到兩個table中間插入一個div的狀況,所以需要多做一個從頭判斷ID有沒有曾經出現過,如果有索引就不是從1開始
Prefix_Finish作用是遇到標籤結尾將階層ID回推一層
如果發現是標籤結尾,往前找/後截斷字串,將階層回推一層
Parse_Html主要的工作就是判斷是否為標籤頭尾,如果是我們要的就進行處理
我們鎖定的標籤為html, body, div, table, thread, tr, td這些Xpath所需要的
在處理公司名稱時,遇到網頁原始碼中有一些問題,會讓我們的解析錯誤,上面的是單引號不匹配,下面的則是前一個<tr>沒有使用</tr>做結尾,就進入下一個<tr>
教學與操作影片
0 意見:
張貼留言