Importar datos web con Excel VBA

Aug 30 2020

Quiero que cuando importe la URL de un sitio web de un producto, muestre el nombre, la descripción, el precio y la URL de la imagen del producto en una hoja de cálculo.

Esto es lo que tengo: (no es el sitio web real)

Sub Trial() Dim ieObj As InternetExplorer Dim ht As HTMLDocument
    
    Website = "https://www.amazon.com/resistencia-Avalon-cartas-empaque-original/dp/B009SAAV0C?pf_rd_r=WWESR922Z214Y10K3PHH&pf_rd_p=4dd821c0-e689-433a-a035-5e03461484eb&pd_rd_r=305599f9-5f3f-41c6-9a13-8daefd8d998c&pd_rd_w=qWHso&pd_rd_wg=BNzqC&ref_=pd_gw_unk"
    
    Set ieObj = New InternetExplorer ieObj.Visible = True ieObj.navigate Website
    
    Do Until ieObj.readyState = READYSTATE_COMPLETE DoEvents Loop
    
    Set ht = ieObj.document
    
End Sub

Información adicional
Nombre del producto: The Resistance: Avalon Social Deduction Gam
id="productTitle" class="a-size-large product-title-word-break"

Descripción del producto: The Resistance: Avalon es un juego independiente y aunque The Resistance no es necesario para jugar; los juegos son compatibles y se pueden combinar
Para 5 a 10 jugadores
Requiere 30 minutos de tiempo de juego
(Todos en clase = "un elemento de lista" pero diferentes secciones)

Precio: $17.12
id="priceblock_ourprice"
class="a-size-medium a-color-price priceBlockBuyingPriceString"

URL de la imagen:https://images-na.ssl-images-amazon.com/images/I/91JhcC33dTL._AC_SY879_.jpg
img alt="La Resistencia: Juego de deducción social de Avalon"

Respuestas

1 SIM Aug 30 2020 at 21:19

Puede usar xhr en lugar de IE para obtener los campos mencionados. Definitivamente hará que la ejecución sea más rápida y te ahorrará mucho tiempo. Usé expresiones regulares solo para aislar el enlace de imagen deseado. Asegúrese de agregar Microsoft HTML Object Librarya la biblioteca de referencia antes de la ejecución.

Sub GetContent()
    Const URL = "https://www.amazon.com/resistencia-Avalon-cartas-empaque-original/dp/B009SAAV0C?pf_rd_r=WWESR922Z214Y10K3PHH&pf_rd_p=4dd821c0-e689-433a-a035-5e03461484eb&pd_rd_r=305599f9-5f3f-41c6-9a13-8daefd8d998c&pd_rd_w=qWHso&pd_rd_wg=BNzqC&ref_=pd_gw_unk"
    Dim S$, sImage$, Matches As Object

    With CreateObject("MSXML2.XMLHTTP")
        .Open "GET", URL, False
        .setRequestHeader "User-Agent", "Mozilla/5.0 (Windows NT 6.1; rv:79.0) Gecko/20100101 Firefox/79.0"
        .send
        S = .responseText
    End With
    
    With New HTMLDocument
        .body.innerHTML = S
        [A1] = .querySelector("h1#title > span#productTitle").innerText
        [B1] = Trim(Split(.querySelector("#feature-bullets > ul.a-unordered-list").innerText, "model number.")(1))
        [C1] = .querySelector("span[id='priceblock_ourprice']").innerText
        sImage = .querySelector("#imgTagWrapperId > img").getAttribute("data-a-dynamic-image")
    End With
    
    With CreateObject("VBScript.RegExp")
        .Global = True
        .IgnoreCase = False
        .Pattern = """(.*?)"""
        .MultiLine = True
        Set Matches = .Execute(sImage)
        [D1] = Matches(2).submatches(0)
    End With
End Sub