Очистить данные из xmlhttp - PullRequest
       42

Очистить данные из xmlhttp

0 голосов
/ 28 января 2019

Я пытаюсь очистить элементы от xmlhttp.Я не так уж и плох с VBA, но относительно плохо разбираюсь в данных.Ранее я использовал то есть.

Я могу импортировать HTML в ячейку, но хотел бы импортировать, в частности, имя, идентификатор, цену и уровень запасов.

Код, который яиспользуется для импорта данных:

    Private Sub HTML_VBA_Excel()

    Dim oXMLHTTP    As Object
    Dim sPageHTML   As String
    Dim sURL        As String

        'Change the URL before executing the code
        sURL = "https://www.superdrug.com/Make-Up/Lips/Lip-Kits/Flower-Beauty-Mix-N%27-Matte-Lipstick-Duo-Tickled-Pink-687/p/769466"

        'Extract data from website to Excel using VBA
        Set oXMLHTTP = CreateObject("MSXML2.ServerXMLHTTP")
        oXMLHTTP.Open "GET", sURL, False
        oXMLHTTP.send
        sPageHTML = oXMLHTTP.responseText

        'Get webpage data into Excel
        sh02.Cells(1, 1) = sPageHTML

End Sub

Заранее благодарим за любую полученную помощь.

Ян

1 Ответ

0 голосов
/ 28 января 2019

Вы не можете надежно извлечь информацию из запроса xmlhttp, выданного на URL, который вы показываете, поскольку контент загружен в формате javascript и не будет работать.

Не уверен, насколько устойчив токен (кажется, ненезависимо от используемого значения), но вы можете присоединиться к productid, который является концом вашего URL, с токеном ajax, присутствующим на странице, и выпустить запрос xmlhttp с использованием параметров querystring и проанализировать ответ json для интересующих элементов.Я использую jsonconverter.bas .После загрузки и установки .bas вам нужно перейти на VBE > Tools > References и добавить ссылку на Microsoft Scripting Runtime.

Некоторое тестирование показывает, что после дефиса вместо токена можно добавить любое число, чтобы вы могли случайным образом сгенерировать число для использования.

Стоит отметить, что вы можете разделять запятыминесколько продуктов в строке запроса и, следовательно, сделать массовый запрос.Затем вам нужно будет выполнить цикл For Each для возвращенной коллекции словарей.

Option Explicit

Public Sub GetInfo()
    Const URL As String = "https://www.superdrug.com/micrositeProduct/bulk/769466-1548702898380"
    Dim json As Object, title As String, price As String, stocking As String, id As String
    With CreateObject("MSXML2.XMLHTTP")
        .Open "GET", URL, False
        .Send
        Set json = jsonconverter.ParseJson(.responsetext)(1)
    End With

    title = json("name")
    price = json("price")("formattedValue") 'json("price")("value")
    stocking = json("stockLevel")
    id = json("code")
End Sub

Если вы используете браузер, то в одном из тегов сценария присутствует строка json как .innerHTML, и вы можетелегко извлечь оттуда.

...