Quiero que cuando importe la URL de un sitio web de un producto, se mostrará 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 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 = "talla-grande-producto-título-palabra-salto"

Descripción del producto: The Resistance: Avalon es un juego independiente y, aunque no es necesario que The Resistance juegue; los juegos son compatibles y se pueden combinar
Para 5 a 10 jugadores
Tarda 30 minutos en jugar
(Todo en clase = "a-list-item" pero diferentes secciones)

Precio: $ 17.12
id = "priceblock_ourprice"
class = "a-talla-mediana a-color-price priceBlockBuyingPriceString"

URL de la imagen: https: //images-na.ssl -images-amazon.com/images/I/91JhcC33dTL._AC_SY879_.jpg
img alt = "The Resistance: Avalon Social Deduction Game"

1
Tania Allegra 30 ago. 2020 a las 13:38

1 respuesta

La mejor respuesta

Puede usar xhr en lugar de IE para obtener los campos mencionados anteriormente. Definitivamente hará que la ejecución sea más rápida y le ahorrará mucho tiempo. Usé expresiones regulares solo para aislar el enlace de la imagen deseada. Asegúrese de agregar Microsoft HTML Object Library a 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
1
SIM 30 ago. 2020 a las 14:19