VBA / 使用Excel VBA爬蟲Google搜尋結果 2

補充  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

HtmlDocument Class