Извлечь атрибут - PullRequest
       0

Извлечь атрибут

0 голосов
/ 08 января 2020

Я хочу извлечь данные с веб-сайта , используя VBA. Мне удалось извлечь некоторую часть вывода, но это не полный. Я хочу выбрать атрибут со значением data-division-id:

<div class="ui-product-card" comparison-checked="false"
shopping-list-checked="false" data-product-web-saleable="true"
data-product-url="/product/tryapka-dlya-pola-grifon-50h70-sm-93724162/"
data-product-category-id="meshki-stroitelnye-201709_Opus_Family" 
data-product-price="35.90" data-sub-category-id="10" data-category-id="40"
data-product-material="Хлопок" data-product-gamma="A" data-unit="NIU" 
data-division-id="11" data-source="Pim" data-product-color="белый" 
data-product-stock-value="11185" data-product-has-linked-how-tos="0"
data-product-location="SearchPage" data-product-id="93724162" 
data-product-dimension65="STD" data-product-weight="0.1" 
data-rel="js-cat-product-item" data-product-brand="Grifon" data-place="plp"
data-element-id="ui-product-card" data-ga-root="data-ga-root"
data-sub-division-id="1150" data-product-name="Тряпка для пола Grifon 50х70 см">

Я не могу найти элемент и выбрать его. Я попробовал несколько подходов, о которых мне известно, но мои последние попытки приведены ниже:

 Sub test()
    Dim http As New XMLHTTP60, html As New HTMLDocument
    Dim topic As HTMLHtmlElement
    With http
        .Open "GET", "https://voronezh.leroymerlin.ru/catalogue/meshki-stroitelnye/?display=90&sortby=1", False
         Do: DoEvents: Loop Until .readyState = 4
        html.body.innerHTML = .responseText
    End With
    For Each topic In html.getElementsByClassName("ui-product-card")
        With topic.getElementsByClassName("product-name")
            If .Length Then x = x + 1: Cells(x, 2) = .item(0).innerText
        End With
        With topic.getElementsByClassName("price-section-inner")
            If .Length Then Cells(x, 3) = .item(0).innerText
        End With
        '??? With topic.getElementsByTagName("[data-category-id]") 
           '??? If .Length Then Cells(x, 1) = .item(0).innerText
        End With
    Next topic
End Sub

Мне нужна помощь в этом. Спасибо

1 Ответ

1 голос
/ 08 января 2020

Пожалуйста, используйте Option Explicit в заголовке каждого модуля кода и посмотрите мои комментарии:

Sub test()
    Dim http As New XMLHTTP60
    Dim html As New HTMLDocument
    Dim topic As HTMLHtmlElement
    Dim x As Long

    With http
        .Open "GET", "https://voronezh.leroymerlin.ru/catalogue/meshki-stroitelnye/?display=90&sortby=1", False
        .send 'You need this line
        'Do: DoEvents: Loop Until .readyState = 4 'This works only with Internet Explorer
        html.body.innerHTML = .responseText
    End With
    For Each topic In html.getElementsByClassName("ui-product-card")
        With topic.getElementsByClassName("product-name")
            If .Length Then x = x + 1: Cells(x, 2) = .Item(0).innerText
        End With
        With topic.getElementsByClassName("price-section-inner")
            If .Length Then Cells(x, 3) = .Item(0).innerText
        End With

        'Get an attribute like this
        Cells(x, 1) = topic.getAttribute("data-division-id")
    Next topic
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...