Как скопировать исходный код сайтов в электронную таблицу / извлечь данные из исходного кода сайтов - PullRequest
0 голосов
/ 18 октября 2019

Я пытаюсь найти способ скопировать данные из исходного кода веб-сайтов и вставить их в 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 млн. Евро".

Это код, который я написал до сих пор. :

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 Ответ

1 голос
/ 18 октября 2019

Посмотрите на использование 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...