Могу ли я взять внутренние значения моих тегов div и преобразовать их в таблицу (предпочтительно Excel) - PullRequest
0 голосов
/ 03 марта 2020

Я пытаюсь получить информацию с этого веб-сайта, которую использует моя компания, у меня есть файл html и теги div, которые они используют вместе со всей информацией id. Я хочу получить разные идентификаторы, чтобы моя компания могла использовать одни и те же идентификаторы при идентификации разных поставщиков.

<div id="Vend_Sel_372129" style="overflow:hidden;" class="Sel_Disp" data_sel="0" data_value="Supplierxx" data_id="372129" data_codec="729" data_prefix="0183011" data_content="" onclick="Test_Init_Supplier_Change(this,0);">
<a class="s" title="Suplierxx" href="javascript:void(0)">Suplierxx</a>

У меня есть большой объем этих данных, и я хочу иметь возможность вытащить id , data_id и data_value и поместить все это в таблицу. Желательно не делать все по одному, потому что у меня около тысячи тегов div, подобных этим.

Ответы [ 2 ]

1 голос
/ 03 марта 2020

В зависимости от того, насколько хорошо сформирован файл html, это может работать. См. Учебник XPath для дополнительных параметров поиска. Разбор 10000 тегов занял у меня 1 секунду.

Option Explicit
Sub extract()

    Const HTML_FILE = "C:\temp\test10000.html"

    Dim obj, ws As Worksheet, iRow As Long, tags As Variant, t0 As Single
    tags = Array("id", "data_id", "data_value")

    ' set up results sheet
    t0 = Timer
    Set ws = ThisWorkbook.Sheets("Sheet1")
    ws.Cells.Clear
    ws.Range("A1:C1") = Array("id", "data_id", "data_value")
    iRow = 1

    ' create xml parser
    Set obj = CreateObject("MSXML2.DOMDocument.6.0")
    With obj
        .setProperty "SelectionLanguage", "XPath"
        .validateOnParse = True
        .Load HTML_FILE
    End With

    ' tags to search for
    Dim xpath As String
    xpath = "//div[@class ='Sel_Disp']"

    ' search
    Dim nodes As Object, node As Object, i As Long
    Set nodes = obj.SelectNodes(xpath)

    ' output to sheet1
    For Each node In nodes
        iRow = iRow + 1
        'Debug.Print iRow, node.XML
        For i = 0 To UBound(tags)
           ws.Cells(iRow, i + 1) = node.getAttribute(tags(i))
        Next
    Next

    ' end
    MsgBox iRow - 1 & " rows written", vbInformation, "Completed in " & Int(Timer - t0) & " secs"
End Sub
0 голосов
/ 03 марта 2020

С помощью Javascript вы можете l oop по всему набору данных, извлекая данные с помощью element.getAttribute(attributeName). Затем вы можете вывести его в формате CSV, который Excel может прочитать.

Подробнее:

РЕДАКТИРОВАТЬ: я только что увидел, что данные приходят не из таблицы, а вместо этого много делений. Вот еще одна ссылка, которая поможет

...