Очистить данные, которых нет в исходном коде, используя VBA - PullRequest
0 голосов
/ 29 марта 2019

Я пытаюсь собрать весь div с одного сайта. Данные не видны в исходном коде, они изменяются в зависимости от переменной в URL ( ссылка ).

Я искал какое-либо решение, чтобы скопировать в лист Excel все, начиная с

<div id="div_measures_for_2103909010" class="measures_detail">

К сожалению, поскольку в прямом исходном коде нет данных, я нашел способ отображать только данные из приведенного выше элемента div Ссылка

Однако, чтобы получить эти данные, мне сначала нужно получить ссылку на прямые данные (ссылка находится в исходном коде).

У вас есть идеи, как с этим справиться наилучшим образом?

Я пытался загрузить исходный код, найти ссылку, открыть ссылку и скопировать все данные, но у меня возникают проблемы с загрузкой исходного кода (Excel загружает только часть из-за ограничений данных в ячейке). Вот мой текущий код:

Sub Open_Webpage()

Set objHTTP = CreateObject("MSXML2.ServerXMLHTTP")
URL = "https://ec.europa.eu/taxation_customs/dds2/taric/measures.jsp?Lang=en&SimDate=20190329&Area=&MeasType=&StartPub=&EndPub=&MeasText=&GoodsText=&op=&Taric=2103909010&search_text=goods&textSearch=&LangDescr=pl&OrderNum=&Regulation=&measStartDat=&measEndDat="
objHTTP.Open "GET", URL, False
objHTTP.setRequestHeader "User-Agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)"
objHTTP.send ("")
html = objHTTP.responseText
Range("A1").Value = html

End Sub

Если у меня есть полный код в одной ячейке, я могу найти ссылку в исходном коде и использовать ее:

=MID(LEFT(A1,FIND("' width='100%'",A1)-1),FIND("' src='",A1)+7,LEN(A1))

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

1 Ответ

1 голос
/ 29 марта 2019

Вы можете вывести нужный URL-адрес, сделать небольшую очистку и перейти к xhr. По какой-то причине я не смог просто использовать getAttribute("onclick"), поэтому пришлось использовать outerHTML (innerHTML также отлично) для элемента

Option Explicit
Public Sub GetInfo()
    Dim html As HTMLDocument, s As String, re As Object, url As String
    Set re = CreateObject("vbscript.regexp")
    Set html = New HTMLDocument                  '<  VBE > Tools > References > Microsoft Scripting Runtime
    With CreateObject("MSXML2.XMLHTTP")
        .Open "GET", "https://ec.europa.eu/taxation_customs/dds2/taric/measures.jsp?Lang=en&SimDate=20190329&Area=&MeasType=&StartPub=&EndPub=&MeasText=&GoodsText=&op=&Taric=2103909010&search_text=goods&textSearch=&LangDescr=pl&OrderNum=&Regulation=&measStartDat=&measEndDat=", False
        .send
        html.body.innerHTML = .responseText

        s = html.querySelector("[id$='_end_goods']").outerHTML
        With re
            .Global = True
            .MultiLine = True
            .IgnoreCase = True
            .Pattern = "measures_details\.jsp(.*)'\);"
            If .Test(s) Then
                url = "https://ec.europa.eu/taxation_customs/dds2/taric/measures_details.jsp" & .Execute(s)(0).SubMatches(0)
                url = Replace$(url, "&amp;", "&")
            End If
        End With
        If Len(url) > 0 Then
            .Open "GET", url, False
            .send
            html.body.innerHTML = .responseText                
            ActiveSheet.Cells(1, 1) = html.querySelector(".measures_detail").innerText
        End If
    End With
End Sub

Попробуйте регулярное выражение здесь


Ссылка:

  1. VBE> Инструменты> Ссылки> Библиотека объектов Microsoft HTML
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...