Очистка веб-страниц с помощью VBA для возврата данных при соответствующих условиях

Недавно я написал HTML-дезинфицирующее средство в Java. Он основан на смешанном подходе регулярных выражений и Java-коде. Лично я ненавижу регулярные выражения и его глупость (читаемость, ремонтопригодность и т. Д.), Но если вы уменьшите объем своих приложений, это может соответствовать вашим потребностям. Во всяком случае, мой дезинфицирующее средство использует белый список для тегов HTML и черный список для некоторых атрибутов стиля.

Для вашего удобства я создал игровое поле, чтобы вы могли проверить, соответствует ли код вашим требованиям: игровая площадка и код Java . Ваши отзывы будут оценены.

Существует небольшая статья, описывающая эту работу в моем блоге: http://roberto.open-lab.com

0
задан Pᴇʜ 17 January 2019 в 15:51
поделиться

1 ответ

Нет необходимости загружать весь браузер, чтобы получить HTML - вы можете обойтись без него.

Sub Test()

    '// References required:
    '// 1) Microsoft HTML Object Library
    '// 2) Microsoft XML, v6.0

    Dim req As MSXML2.XMLHTTP60
    Dim doc As MSHTML.HTMLDocument
    Dim tbl As MSHTML.HTMLTable
    Dim tblRow As MSHTML.HTMLTableRow
    Dim tblCell As MSHTML.HTMLTableCell
    Dim anch As MSHTML.HTMLAnchorElement
    Dim html$, url$, sText$, fecha$, valor$, j%

    Set req = New MSXML2.XMLHTTP60
    url = "http://www.bcra.gob.ar/PublicacionesEstadisticas/Principales_variables.asp"
    Set req = New MSXML2.XMLHTTP60
    req.Open "GET", url, False
    req.send
    html = req.responseText

    Set doc = New MSHTML.HTMLDocument
    doc.body.innerHTML = html

    Set tbl = doc.getElementsByClassName("table-BCRA")(, 0)
    For j = 1 To tbl.Rows.Length - 1
        With tbl.Rows(j)
            '// Skip cells without data.
            '// Assume correct data has three cells.
            If .Cells.Length = 3 Then
                Set anch = .Cells(0)
                sText = anch.textContent
                If sText = "Base Monetaria - Promedio acumulado del mes (MM de $)" Then
                    fecha = .Cells(1).innerText
                    valor = .Cells(2).innerText
                End If
            End If
        End With
    Next

End Sub
0
ответ дан JohnyL 17 January 2019 в 15:51
поделиться
Другие вопросы по тегам:

Похожие вопросы: