#excel #vba #web-scraping
#excel #vba #очистка от веб-файлов
Вопрос:
Я пытаюсь очистить весь 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=enamp;SimDate=20190329amp;Area=amp;MeasType=amp;StartPub=amp;EndPub=amp;MeasText=amp;GoodsText=amp;op=amp;Taric=2103909010amp;search_text=goodsamp;textSearch=amp;LangDescr=plamp;OrderNum=amp;Regulation=amp;measStartDat=amp;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.
split(split(a1," width='100%'")(1)," src=")(0)
возможно, это способ поиска.2. Я не могу разделить данные в A1, поскольку нет полного исходного кода, только его часть (та часть, которая содержит максимальное количество символов, которые могут быть сохранены в ячейке)
3. Вместо A1 используйте текст ответа
Ответ №1:
Вы можете регулярно выражать требуемый 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=enamp;SimDate=20190329amp;Area=amp;MeasType=amp;StartPub=amp;EndPub=amp;MeasText=amp;GoodsText=amp;op=amp;Taric=2103909010amp;search_text=goodsamp;textSearch=amp;LangDescr=plamp;OrderNum=amp;Regulation=amp;measStartDat=amp;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" amp; .Execute(s)(0).SubMatches(0)
url = Replace$(url, "amp;amp;", "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
Попробуйте использовать регулярное выражение здесь
Ссылки:
- VBE > Инструменты > Ссылки > Библиотека объектов Microsoft HTML
Комментарии:
1. Это ответило на ваш вопрос?