補充 VBA / 使用Excel VBA爬蟲Google搜尋結果 除了單純分割字串之外
可以使用 Html Document的方式來解析內容
原理是將XMLHTTP取得的資料,寫入Microsoft XML的Html Document
這樣就可以透過Html Document來處理網頁內容
因為在 Microsoft XML, v6.0 library的版本已經不支援getElementsByClassName()
所以改用 getElementById()
也因此改爬另一個網站來測試
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
' '郵遞區號 '使用htmlFile物件 'getElementById Public Sub xmlHttpGoogle5() s = Application.EncodeURL("嘉義市東區宣信街266號") '使用Microsoft.XMLHTTP物件,傳送網址給對方,然後取回(GET)回傳資料 Set WinHttpReq = CreateObject("MSXML2.XMLHTTP") '可以不用引用物件 'WinHttpReq.Open "GET", myURL, False, "username", "password" WinHttpReq.Open "GET", "http://zip5.5432.tw/zip/" + s, False WinHttpReq.send Set dom = CreateObject("htmlFile") '將回傳資料放到dom變數 dom.body.innerHTML = WinHttpReq.responseText '確認回傳的狀態是否正常,200代表正常 If WinHttpReq.Status = 200 Then ' Debug.Print dom.body.innerHTML End If Set section = dom.getElementById("new-adrs") Debug.Print section.innertext Set WinHttpReq = Nothing ' 間格時間(單位:秒) 1<= delaysec <= 5 delaysec = Int((5 - 1 + 1) * Rnd() + 1) Debug.Print delaysec newHour = Hour(Now()) newMinute = Minute(Now()) newSecond = Second(Now()) + delaysec waitTime = TimeSerial(newHour, newMinute, newSecond) Application.Wait waitTime End Sub |
#17
將網站的回傳資料透過body.innerHTML寫入變數dom
#23
透過getElementById()取得目標資料所在的id :new-adrs
參考資料
GetElementsbyClassname: Open IE vs. MSXML2 Methods
【html】在VBA中解析HTML,以從描述列表中提取資訊?
Parse HTML in Excel VBA – Learn by parsing hacker news home page