我正在尝试从一个网站抓取整个div。数据在源代码中不可见,它会根据URL(link)中的变量进行更改。
我正在寻找将
中的所有内容复制到excel工作表的任何解决方案<div id="div_measures_for_2103909010" class="measures_detail">
不幸的是,由于直接源代码中没有数据,因此我找到了一种只显示Link上提供的div中数据的方法。
但是,要获取此数据,我首先需要获取指向直接数据的链接(该链接位于源代码中)。
您是否知道如何最好地处理它?</ p>
我试图下载源代码,搜索链接,打开链接并复制所有数据,但是我在下载源代码时遇到了麻烦(由于单元数据的限制,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的了解不是那么熟练...
答案 0 :(得分:1)
您可以将所需的网址进行正则表达式,进行一些清洁,然后传递给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, "&", "&")
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
尝试使用正则表达式here
参考: