我正试图找到一种方法来从网站源代码复制数据并将其粘贴到excel中。 数据如下:
`<p>
<span class="highlight">Mitarbeiter:</span> 120 in Deutschland<br/>
<span style="display: "><span class="highlight">Umsatzklasse:</span> 10 - 50 Mio. Euro<br/></span>
<span style="display: none"><span class="highlight">Filialen:</span> <br/></span>
<span style="display: inline"><span class="highlight">Gegründet:</span> 1925</span>
</p`
我在这里寻找的值是“ 10-50 Mio. Euro”。
这是我到目前为止编写的代码:
Sub Sample() Dim IE As Object
Set IE = CreateObject("InternetExplorer.Application")
With IE
.Visible = False
.Navigate "https://www.wer-zu-wem.de/firma/steinel-normalien.html"
Do While .Busy And .readyState <> 4: DoEvents: Loop
Application.Wait Now + TimeValue("0:00:06")
Sheets("Dummy").Range("A1").Value = .document.body.outerHTML
.Quit
End With
End Sub
我在这里的方法是先将整个HTML源代码复制到电子表格中,然后继续使用InStr函数。 但是,上面的解决方案只是给我摘录了完整的源代码,其中不包含我要查找的数据。
有人知道我在做什么错吗? 有没有更好的方法,也许可以直接从网站上获取我正在寻找的数据,而无需中间的任何步骤?
在此先感谢大家对我的问题的兴趣
编辑:尝试实现Nathan_Sav的输入。结束了以下
Public Sub IE_Automation()
Dim IE As InternetExplorer
Dim HTMLdoc As HTMLDocument
Dim d As MSHTML.HTMLDocument
Dim y As MSHTML.IHTMLElementCollection
Dim x As MSHTML.IHTMLSpanElement
Set IE = New InternetExplorer
With IE
.Visible = False
.Navigate "https://www.wer-zu-wem.de/firma/steinel-normalien.html"
While .Busy Or .readyState <> READYSTATE_COMPLETE: DoEvents: Wend
Set d = .document
Set y = d.getElementsByTagName("Span")
For Each x In y
If (x = ) Then
Else
End If
Next x
End With
End Sub
应该提到我只对VBA有一个基本的了解,所以我不确定如何继续。我意识到我现在正在遍历从网站收到的对象。我到底该如何比较这些对象以获取所需的数据? (在我假设的if函数中)
答案 0 :(得分:1)
看看使用HTML Object Library
,然后可以使用以下内容
Dim d As MSHTML.HTMLDocument
Dim y As MSHTML.IHTMLElementCollection
Dim x As MSHTML.IHTMLSpanElement
Set y = d.getElementsByTagName("Span")
For Each x In y
Next x
Something like this
With IE
.Visible = True
.navigate "https://www.wer-zu-wem.de/firma/steinel-normalien.html"
While .Busy Or .readyState <> READYSTATE_COMPLETE: DoEvents: Wend
Set d = .document
Set y = d.getElementsByClassName("highlight")
For Each x In y
If x.className = "highlight" Then
If x.innerHTML = "Umsatzklasse:" Then
Debug.Print x.ID, x.innerHTML, x.innerText, x.NextSibling.NodeValue
End If
End If
Next x
End With