htmlexcelvbaweb-scrapingaliexpress

get span class from HTML using Excel VBA


I am trying to get the price from an AliExpress Product page using VBA.

However I am getting a runtime error '91': Object variable or With block variable not set.. This is my Code:

Sub Get_Web_Data()


Dim request As Object
Dim response As String
Dim html As New HTMLDocument
Dim website As String
Dim price As Variant

' Website to go to.
website = "https://de.aliexpress.com/item/1005002587077651.html"

' Create the object that will make the webpage request.
Set request = CreateObject("MSXML2.XMLHTTP")

' Where to go and how to go there - probably don't need to change this.
request.Open "GET", website, False

' Get fresh data.
request.setRequestHeader "If-Modified-Since", "Sat, 1 Jan 2000 00:00:00 GMT"

' Send the request for the webpage.
request.send

' Get the webpage response data into a variable.
response = StrConv(request.responseBody, vbUnicode)

' Put the webpage into an html object to make data references easier.
html.body.innerHTML = response

' Get the price from the specified element on the page.
price = html.getElementsByClassName("product-price-value").Item(0).innerText

' Output the price into a message box.
MsgBox price

End Sub

The code wors for other pages Like Yahoo Finance, i only get the problem for AliExpress.

Thank you.


Solution

  • You can use RegEx

    Sub Get_Web_Data()
    
    Dim reg As Object
    Dim request As Object
    Dim response As String
    Dim html As New HTMLDocument
    Dim website As String
    Dim price As Variant
    
    
    Set reg = CreateObject("vbscript.regexp")
    reg.Pattern = "totalValue: ""US \$(.+)"""
    website = "https://de.aliexpress.com/item/1005002587077651.html"
    Set request = CreateObject("WinHttp.WinHttpRequest.5.1")
    request.Open "GET", website, False
    request.setRequestHeader "If-Modified-Since", "Sat, 1 Jan 2000 00:00:00     GMT"
    request.send
    Set matches = reg.Execute(request.responseText)
    MsgBox "US $" & matches.Item(0).submatches(0)
    
    End Sub