Scraping, Import oder Datenanalyse
Wenn du HTML-Inhalte aus einer Datei oder Datenbank per VBA verarbeiten möchtest â z.âŻB. von lokal gespeicherten Webseiten oder API-Antworten â brauchst du keinen Browser oder WebRequest. Mit dem htmlfile
-Objekt aus der Microsoft HTML Object Library (MSHTML) kannst du Seiten direkt aus einem String parsen und mit den bekannten DOM-Methoden durchlaufen.
Im folgenden Beitrag zeige ich dir, wie du Schritt fĂŒr Schritt HTML zerlegst und Informationen extrahierst â ganz ohne Webbrowser-Steuerung oder externe Bibliotheken.
đŠ 1. Vorbereitung â HTML laden mit htmlfile
Dim doc As Object
Set doc = CreateObject("htmlfile")
Dim html As String
html = "<html><body><h1>Beispiel</h1><p class='info'>Test</p><span databranche='branche'>Musterbranche</span></body></html>"
doc.body.innerHTML = html
Nun kannst du mit doc.getElementsByTagName
, getElementById
, getElementsByClassName
(ĂŒber Umwege) oder querySelector
arbeiten.
đ§© 2. Zugriff auf bestimmte Tags
Dim h1Text As String
h1Text = doc.getElementsByTagName("h1")(0).innerText
Debug.Print "Ăberschrift: " & h1Text
đŻ 3. Zugriff ĂŒber className
(z.âŻB. <p class="info">
)
Dim pElem As Object
For Each pElem In doc.getElementsByTagName("p")
If pElem.className = "info" Then
Debug.Print "Info-Text: " & pElem.innerText
End If
Next
Tipp:
getAttribute("class")
funktioniert in MSHTML oft nicht zuverlĂ€ssig â besser mit.className
arbeiten!
đ§· 4. Zugriff ĂŒber Attribute
Dim spanElem As Object
For Each spanElem In doc.getElementsByTagName("span")
If spanElem.getAttribute("databranche") = "branche" Then
Debug.Print "Branche: " & spanElem.innerText
End If
Next
đŻ 5. CSS-Selektoren mit querySelector
Du kannst auch gezielt ein bestimmtes Element auswÀhlen:
Dim elem As Object
Set elem = doc.querySelector("div.mod-head__sel span")
If Not elem Is Nothing Then Debug.Print elem.innerText
querySelectorAll
ist in MSHTML nicht verfĂŒgbar â fĂŒr mehrere Treffer bitte weitergetElementsByTagName
+ Schleife nutzen.
đ 6. Links und Telefonnummern extrahieren
Dim aElem As Object
For Each aElem In doc.getElementsByTagName("a")
If Left(aElem.getAttribute("href"), 4) = "tel:" Then
Debug.Print "Telefonnummer: " & aElem.innerText
ElseIf InStr(aElem.innerText, "Webseite") > 0 Then
Debug.Print "Webseite: " & aElem.getAttribute("href")
End If
Next
â Fazit
Mit htmlfile
und etwas DOM-Wissen kannst du auch ohne Browser oder Internetzugriff HTML-Daten komfortabel verarbeiten â ideal fĂŒr Scraping aus lokal gespeicherten Dateien, Zwischenspeichern von Webdaten oder API-Antworten im HTML-Format.
Wenn du mehr willst: Im nĂ€chsten Teil zeige ich, wie du ganze Tabellen oder Listen aus HTML in Excel oder Access importierst â inklusive verschachtelter Strukturen.
đĄ Bonus-Tipp
Wenn du auf Nummer sicher gehen willst, aktiviere in deinem VBA-Editor unter Extras > Verweise
die „Microsoft HTML Object Library“ â das gibt dir IntelliSense fĂŒr HTMLDocument
, IHTMLElementCollection
, getAttribute
, innerText
usw.
đ Du willst HTML professionell auswerten oder fĂŒr die Weiterverarbeitung in Access/Excel aufbereiten? Dann schreib mir â ich helfe dir gern weiter.
No responses yet