Как вытащить изображение и название продукта с сайта Amazon? - PullRequest
3 голосов
/ 02 июня 2019

Я пытаюсь составить список продуктов на основе уникальных кодов продуктов Amazon, например:

https://www.amazon.in/gp/product/B00F2GPN36

Где B00F2GPN36 - уникальный код.

Я хочу получить изображение и название продукта в список Excel под столбцами изображения продукта и название продукта.

Я много раз пытался использовать html.getElementsById("productTitle") и html.getElementsByTagName, но при запуске кода всегда возникает проблема, и я не могу ее решить, поэтому, пожалуйста, помогите.

У меня также есть сомнения относительно того, какую переменную описать для хранения вышеупомянутой информации, поскольку я пробовал объявление типов Object и HtmlHtmlElement.

Я попытался получить документ html и использовать его для поиска данных.

Код:

Enum READYSTATE
     READYSTATE_UNINITIALIZED = 0
     READYSTATE_LOADING = 1
     READYSTATE_LOADED = 2
     READYSTATE_INTERACTIVE = 3
     READYSTATE_COMPLETE = 4
End Enum

Sub parsehtml()

     Dim ie As InternetExplorer
     Dim topics As Object
     Dim html As HTMLDocument

     Set ie = New InternetExplorer
     ie.Visible = False
     ie.navigate "https://www.amazon.in/gp/product/B00F2GPN36"

     Do While ie.READYSTATE <> READYSTATE_COMPLETE
       Application.StatusBar = "Trying to go to Amazon.in...."
       DoEvents    
     Loop

     Application.StatusBar = ""
     Set html = ie.document
     Set topics = html.getElementsById("productTitle")
     Sheets(1).Cells(1, 1).Value = topics.innerText
     Set ie = Nothing

End Sub

Я ожидаю, что результат будет в ячейке A1: «Колба Milton Thermosteel Carafe Flask, 2 литра, серебро» должна отражать (без кавычек. Аналогично, нужно также вытянуть изображение.

Но всегда есть какая-то ошибка, например: 1. Ошибка времени выполнения «13»: Несоответствие типов при использовании «Dim themes As HTMLHtmlElement» 2. Ошибка времени выполнения «438»: Объект не поддерживает это свойство или метод

Примечание. Я уже добавил соответствующие ссылки из Инструменты> Ссылки , то есть необходимые библиотеки.

Ответы [ 2 ]

3 голосов
/ 02 июня 2019

В vba нет такой вещи, как html.getElementsById("productTitle").Идентификаторы всегда уникальны, поэтому они должны быть html.getElementById("productTitle").Запустите следующий скрипт, чтобы получить их:

Sub ParseHtml()
    Dim IE As New InternetExplorer, elem As Object
    Dim Html As HTMLDocument, imgs As Object

    With IE
        .Visible = False
        .navigate "https://www.amazon.in/gp/product/B00F2GPN36"
        While .Busy Or .readyState < 4: DoEvents: Wend
        Set Html = .document
    End With

    Set elem = Html.getElementById("productTitle")
    Set imgs = Html.getElementById("landingImage")

    Sheets(1).Cells(1, 1) = elem.innerText
    Sheets(1).Cells(1, 1).Offset(0, 1) = imgs.getAttribute("data-old-hires")
End Sub
1 голос
/ 02 июня 2019

Быстрее будет использовать xhr и избегать просмотра в браузере и записывать результаты из массива на лист

Option Explicit
Public Sub GetInfo()
    Dim html As HTMLDocument, results()
    Set html = New HTMLDocument
    With CreateObject("MSXML2.XMLHTTP")
        .Open "GET", "https://www.amazon.in/gp/product/B00F2GPN36", False
        .send
        html.body.innerHTML = .responseText
        With html
            results = Array(.querySelector("#productTitle").innerText, .querySelector("#landingImage").getAttribute("data-old-hires"))
        End With
    End With
    With ThisWorkbook.Worksheets("Sheet1")
        .Cells(1, 1) = results(0)
        Dim file As String
        file = DownloadFile("C:\Users\User\Desktop\", results(1))  'your path to download file
        With .Pictures.Insert(file)
            .Left = ThisWorkbook.Worksheets("Sheet1").Cells(1, 2).Left
            .Top = ThisWorkbook.Worksheets("Sheet1").Cells(1, 2).Top
            .Width = 75
            .Height = 100
            .Placement = 1
        End With
    End With
    Kill file
End Sub 
...