如何将网站源代码复制到电子表格/从网站源代码提取数据

时间:2019-10-18 11:25:06

标签: excel vba web-scraping

我正试图找到一种方法来从网站源代码复制数据并将其粘贴到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函数中)

1 个答案:

答案 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