Importar datos web con Excel VBA
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
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