In diesem Leitfaden erfahren Sie Folgendes:
- Was VBA ist.
- Ob ein benutzerdefiniertes VBA-Modul das Abrufen aus dem Web ermöglicht.
- Wie man mit Web Scraping in Excel umgeht, nachdem Internet Explorer den Support eingestellt hat.
- Wie schreibe ich VBA-Code für Web Scraping mit Selenium.
- Der alte Ansatz für den Online-Datenabruf in Excel.
Legen wir also los!
Was ist VBA?
VBA, kurz für Visual Basic for Applications, ist eine von Microsoft entwickelte Programmiersprache. Ziel ist es, Benutzern die Möglichkeit zu geben, Aufgaben zu automatisieren und benutzerdefinierte Funktionen in verschiedenen Microsoft Office-Anwendungen zu schreiben, einschließlich Excel, Word und Access.
In Excel kann VBA verwendet werden, um komplexe Makros zu definieren, die mit Daten in Tabellenzellen interagieren. Mit VBA können Sie die Produktivität verbessern, Arbeitsabläufe vereinfachen und die Funktionen von Excel über die integrierten Funktionen hinaus erweitern.
Ist es möglich, Excel-Web-Scraping mit VBA durchzuführen?
Ja, VBA öffnet die Türen zu Web Scraping direkt in Excel. Dank VBA können Sie benutzerdefinierte Module schreiben, die:
- Eine Verbindung zu einer Webseite in einem Browser herstellen.
- Den HTML-Inhalt analysieren.
- Daten daraus extrahieren.
- Die gescrapten Daten direkt in Excel-Zellen schreiben.
Darum geht es beim Web Scraping. Somit ist das Scraping in VBA nicht nur möglich, sondern auch effizient, da Daten direkt in Excel importiert werden. Erfahren Sie im Abschnitt mehr über die Vor- und Nachteile von Scraping in Excel!
Vor- und Nachteile von Excel-Web-Scraping
Bevor wir uns mit dem Schreiben von VBA-Code für Web Scraping befassen, wollen wir uns einige Vor- und Nachteile von Web Scraping in Excel mit VBA ansehen.
👍 Vorteile
- Zugriff auf Excel-Funktionen: Die gescrapten Daten werden direkt in Excel importiert, sodass Sie die leistungsstarken Funktionen von Excel zur Datenmanipulation und -analyse nutzen können.
- Einsatzbereit: Microsoft Office wird standardmäßig mit VBA-Support geliefert. Wenn nur Microsoft Office 365 auf Ihrem PC installiert ist, haben Sie alles, was Sie für Web Scraping benötigen.
- All-in-One-Automatisierung: Mit einem VBA-Web-Scraping-Skript können Sie eine komplette Datenerfassungsaufgabe automatisieren, vom Datenabruf bis zur Datendarstellung in Excel.
👎 Nachteile
- Einige Funktionen sind nur unter Windows verfügbar: VBA-Pakete für ActiveX-Steuerelemente und COM-Automatisierung sind nur unter Windows verfügbar und funktionieren nicht unter Office für Mac.
- VBA fühlt sich alt an: Visual Basic ist nicht die modernste Programmiersprache, die es gibt. Wenn Sie noch nie damit gearbeitet haben, könnte es Ihnen aufgrund der veralteten Syntax und des veralteten Ansatzes beim Programmieren schwer fallen.
- Internet Explorer ist jetzt veraltet: Die VBA-COM-Automatisierung zur Steuerung eines Webbrowsers basiert auf dem Internet Explorer, der jetzt veraltet ist.
Der letzte Fallstrick ist ziemlich schwerwiegend und verdient daher eine eingehendere Analyse.
Wie geht man mit der Veralterung des Internet Explorers beim VBA-Web-Scraping um?
Der bisherige Ansatz zum Schreiben von VBA-Code für Web Scraping basierte auf der COM-Automatisierungsschnittstelle, die mit dem InternetExplorer-Objekt geliefert wurde. Diese bot alles, was Sie brauchten, um eine Website im Internet Explorer zu besuchen, ihren HTML-Inhalt zu analysieren und Daten daraus zu extrahieren. Das Problem ist, dass Internet Explorer ab dem 15. Juni 2022 nicht mehr unterstützt wird.
Mit anderen Worten, die neuesten Versionen von Windows sind nicht einmal mit Internet Explorer ausgestattet. Daher führt die Verwendung des InternetExplorer-Objekts in einem VBA-Skript zu einem Fehler. Da Edge der Ersatz für Internet Explorer ist, denken Sie vielleicht darüber nach, das entsprechende Objekt in VBA zu verwenden. Edge ist jedoch nicht mit der COM-Automatisierungsschnittstelle ausgestattet. Daher können Sie ihn also nicht programmatisch steuern, wie Sie es beim Internet Explorer getan haben.
Stattdessen unterstützt Edge die Automatisierung über einen Webtreiber, der über Browser-Automatisierungstechnologien wie Selenium gesteuert werden kann. Die derzeit unterstützte Methode zum Ausführen von Excel-VBA-Web-Scraping ist die Verwendung der Selenium-Bindung für VBA. Auf diese Weise können Sie einen Browser wie Chrome, Edge oder Firefox steuern.
Im folgenden Abschnitt erstellen Sie ein Excel-Web-Scraping-Skript mit Selenium und Edge. Später werden Sie auch den Codeausschnitt des Legacy-Ansatzes sehen, der keine Abhängigkeiten von Dritten erfordert.
Wie schreibe ich VBA-Code für Web Scraping mit Selenium
In diesem Tutorial erfahren Sie, wie Sie mit SeleniumBasic, der Selenium-API-Bindung für VBA, Excel-Web-Scraping in VBA durchführen können.
Die Zielwebsite wird die Scrape This Site Country Sandbox sein, die eine Liste aller Länder der Welt enthält:
Das Ziel des VBA-Scrapers wird es sein, diese Daten automatisch abzurufen und in eine Excel-Tabelle zu schreiben.
Zeit, etwas VBA-Code zu schreiben!
Voraussetzungen
Stellen Sie sicher, dass Sie die neueste Version von Microsoft Office 365 auf Ihrem Computer installiert haben. Dieser Abschnitt bezieht sich auf Windows 11 und das Office 2024-Update. Gleichzeitig sind die folgenden Schritte für macOS und andere Versionen von Office gleich oder ähnlich.
Beachten Sie, dass Sie die Desktop-Version von Office benötigen, um dem Tutorial folgen zu können. Die kostenlose Microsoft 365-Webplattform unterstützt kein VBA-Skripting.
Schritt Nr. 1: Installieren Sie SeleniumBasic und richten Sie es ein.
Laden Sie das SeleniumBasic-Installationsprogramm von der Release-Seite des GitHub-Repositorys herunter:
Klicken Sie doppelt auf das EXE-Installationsprogramm und warten Sie, bis der Installationsvorgang abgeschlossen ist.
Wie die meisten VBA-Pakete hat auch SeleniumBasic seit Jahren kein Update mehr erhalten. Aus diesem Grund wird es mit Webtreibern ausgeliefert, die mit aktuellen Browsern nicht mehr funktionieren. Um dies zu beheben, müssen Sie die ausführbaren Dateien der Treiber im SeleniumBasic-Installationsordner manuell überschreiben.
Hier erfahren Sie, wie Sie den Edge-Webtreiber überschreiben, aber Sie können das gleiche Verfahren für Chrome und Firefox verwenden.
Laden Sie zunächst die neueste stabile Version von Microsoft Edge-Webtreiber herunter:
Die „x64“-Version sollte das sein, wonach Sie suchen.
Sie sollten jetzt eine Datei namens edgedriver_win64.zip haben. Entpacken Sie sie, gehen Sie in den entpackten Ordner und stellen Sie sicher, dass er eine ausführbare Datei namens msedgedriver.exe enthält. Das ist die ausführbare Edge-Webtreiber-Datei.
Benennen Sie sie in „edgedriver.exe“ um und machen Sie sich bereit, sie im richtigen Ordner abzulegen.
Öffnen Sie den SeleniumBasic-Installationsordner, den Sie unter folgendem Pfad finden sollten:
C:\Benutzer\
Legen Sie edgedriver.exe in diesem Ordner ab und überschreiben Sie damit die bereits vorhandene Edge-Webtreiber-Programmdatei.
Wunderbar! SeleniumBasic kann jetzt die neueste Version von Edge in Excel steuern.
Schritt Nr. 2: Starten Sie Excel.
Öffnen Sie das Windows-Startmenü, geben Sie „Excel“ ein und klicken Sie auf die App „Excel“. Wählen Sie die Option „Leere Arbeitsmappe“, um eine neue Tabelle zu erstellen:
Am Ende dieses Abschnitts finden Sie hier die gescrapten Daten.
Schritt Nr. 3: Aktivieren Sie die Entwickler-Registerkarte.
Wenn Sie sich die Registerkartenleiste oben ansehen, werden Sie keine Option zum Erstellen eines VBA-Skripts sehen. Das liegt daran, dass Sie das zuerst in den Excel-Konfigurationen aktivieren müssen.
Klicken Sie dazu oben links auf „Datei“:
Wählen Sie dann „Optionen“ wie folgt aus:
Gehen Sie im Popup-Fenster „Optionen“ zur Registerkarte „Benutzerdefiniertes Ribbon“ und aktivieren Sie die Option „Entwickler“ im Abschnitt „Hauptregisterkarten“:
Drücken Sie „OK“ und eine neue Registerkarte „Entwickler“ erscheint:
Schritt Nr. 4: Initialisieren Sie ein VBA-Web-Scraping-Modul
Klicken Sie auf die Registerkarte „Entwickler“ und dann auf die Schaltfläche „Visual Basic“:
Dadurch wird das folgende Fenster geöffnet:
Klicken Sie hier im Menü oben auf „Einfügen“ und dann auf „Module“, um Ihr VBA-Scraping-Modul zu initialisieren:
Sie sollten jetzt das sehen:
In das innere Fenster „Book1 – Module1 (Code)“ sollten Sie Ihren VBA-Code für das Web Scraping schreiben.
Schritt Nr. 5: Importieren Sie SeleniumBasic.
Klicken Sie im oberen Menü auf „Tools“ und dann auf „Referenzen …“
Suchen Sie im Popup-Fenster nach der „Selenium Type Library“ und überprüfen Sie sie:
Klicken Sie auf die Schaltfläche „OK“, und Sie können jetzt Selenium in Excel verwenden, um Web Scraping durchzuführen.
Schritt Nr. 6: Automatisieren Sie Edge, um die Zielwebsite zu öffnen:
Fügen Sie den folgenden Code in das VBA-Modulfenster ein:
Sub scrape_countries()
' initialize a Selenium WebDriver instance
Dim driver As New WebDriver
' open a new Edge window
driver.Start "Edge"
' navigate to the target page
driver.Get "https://www.scrapethissite.com/pages/simple/"
' wait 10 seconds before shutting down the application
Application.Wait Now + TimeValue("00:00:10")
' close the current driver window
driver.Quit
End Sub
Damit wird eine Selenium-Instanz initialisiert und Edge angewiesen, die Zielseite zu besuchen. Testen Sie den Code, indem Sie auf die Schaltfläche Ausführen klicken:
Dadurch wird das folgende Edge-Fenster geöffnet:
Beachten Sie die Meldung „Microsoft Edge wird von automatisierter Testsoftware gesteuert.“, die darüber informiert, dass Selenium wie gewünscht auf Edge ausgeführt wird.
Wenn Sie nicht möchten, dass Edge angezeigt wird, können Sie den Headless-Modus mit dieser Zeile aktivieren:
driver.SetCapability "ms:edgeOptions", "{""args"":[""--headless""]}"
Schritt Nr. 7: Prüfen Sie den HTML-Code der Seite
Beim Web Scraping werden HTML-Elemente auf einer Seite ausgewählt und Daten daraus gesammelt. CSS-Selektoren gehören zu den beliebtesten Methoden zur Auswahl von HTML-Knoten. Wenn Sie ein Webentwickler sind, sollten Sie bereits mit ihnen vertraut sein. Andernfalls schauen Sie sich die offizielle Dokumentation an.
Um effektive CSS-Selektoren zu definieren, müssen Sie sich zunächst mit dem HTML der Zielseite vertraut machen. Öffnen Sie also die Scrape This Site Country Sandbox im Browser, klicken Sie mit der rechten Maustaste auf ein Landelement und wählen Sie die Option „Inspect“:
Hier können Sie sehen, dass jedes Land-HTML-Element
.country
Bei gegebenem .country-HTML-Knoten sollten Sie Folgendes als Ziel angeben:
- Den Ländername im Element .country-name.
- Den Name den Hauptstadt im Element .country-capital.
- Die Bevölkerungsinformationen im Element .country-population.
- Die Fläche in km², die das Land im Element .country-area einnimmt.
Das sind alle CSS-Selektoren, die Sie benötigen, um die gewünschten HTML-Knoten auszuwählen und Daten aus ihnen zu extrahieren. Sehen Sie im nächsten Schritt, wie Sie sie verwenden können!
Schritt Nr. 8: Schreiben Sie die VBA-Web-Scraping-Logik
Verwenden Sie die Methode findElementsByCSS(), die vom Treiber bereitgestellt wird, um den .country-CSS-Selektor anzuwenden und alle Land-HTML-Knoten auf der Seite auszuwählen:
Dim countryHTMLElements As WebElements
Set countryHTMLElements = driver.FindElementsByCss(".country")
Then, define an integer counter to keep track of the current Excel row to write data in:
Dim currentRow As Integer
currentRow = 1
Als nächstes iterieren Sie über die Land-HTML-Knoten, extrahieren die gewünschten Daten daraus und schreiben sie mit der Funktion Cells() in Excel-Zellen:
For Each countryHTMLElement In countryHTMLElements
' where to store the scraped data
Dim name, capital, population, area As String
' data retrieval logic
name = countryHTMLElement.FindElementByCss(".country-name").Text
capital = countryHTMLElement.FindElementByCss(".country-capital").Text
population = countryHTMLElement.FindElementByCss(".country-population").Text
area = countryHTMLElement.FindElementByCss(".country-area").Text
' write the scraped data in Excel cells
Cells(currentRow, 1).Value = name
Cells(currentRow, 2).Value = capital
Cells(currentRow, 3).Value = population
Cells(currentRow, 4).Value = area
' increment the row counter
currentRow = currentRow + 1
Next countryHTMLElement
Fantastisch! Sie sind bereit, sich den endgültigen Excel-Web-Scraping-Code anzusehen.
Schritt Nr. 9: Fügen Sie alles zusammen.
Ihr VBA-Web-Scraping-Modul sollte jetzt enthalten:
Sub scrape_countries()
' initialize a Selenium WebDriver instance
Dim driver As New WebDriver
' enable the "headless" mode
driver.SetCapability "ms:edgeOptions", "{""args"":[""--headless""]}"
' open a new Edge window
driver.Start "Edge"
' navigate to the target page
driver.Get "https://www.scrapethissite.com/pages/simple/"
' select all country HTML nodes on the page
Dim countryHTMLElements As WebElements
Set countryHTMLElements = driver.FindElementsByCss(".country")
' counter to the current row
Dim currentRow As Integer
currentRow = 1
' iterate over each country HTML node and
' apply the Excel scraping logic
For Each countryHTMLElement In countryHTMLElements
' where to store the scraped data
Dim name, capital, population, area As String
' data retrieval logic
name = countryHTMLElement.FindElementByCss(".country-name").Text
capital = countryHTMLElement.FindElementByCss(".country-capital").Text
population = countryHTMLElement.FindElementByCss(".country-population").Text
area = countryHTMLElement.FindElementByCss(".country-area").Text
' write the scraped data in Excel cells
Cells(currentRow, 1).Value = name
Cells(currentRow, 2).Value = capital
Cells(currentRow, 3).Value = population
Cells(currentRow, 4).Value = area
' increment the row counter
currentRow = currentRow + 1
Next countryHTMLElement
' close the current driver window
driver.Quit
End Sub
Starten Sie es und warten Sie, bis die Modulausführung abgeschlossen ist. Am Ende des VBA-Skripts enthält die Excel-Tabelle:
Diese Datei enthält dieselben Daten wie die Zielwebsite, jedoch in einem halbstrukturierten Format. Das Analysieren und Filtern dieser Daten wird jetzt dank der von Excel angebotenen Funktionen viel einfacher.
Und voilà! In weniger als 100 VBA-Codezeilen haben Sie gerade Excel-Web-Scraping durchgeführt!
Weitere Informationen finden Sie in unserem Leitfaden zum Thema Wie Web Scraping in Excel funktioniert.
Legacy-Ansatz für Web Scraping in VBA mit Internet Explorer
Wenn Sie eine ältere Version von Windows verwenden, können Sie Web Scraping in VBA mit Internet Explorer durchführen.
Sie müssen lediglich die Referenzen „Microsoft HTML-Objektbibliothek“ und „Microsoft Internet-Steuerelemente“ aktivieren:
Beachten Sie, dass diese beiden Pakete in Excel integriert sind, sodass Sie dieses Mal keine zusätzlichen Bibliotheken installieren müssen.
Mit dem folgenden VBA-Code für Web Scraping können Sie dann dasselbe Ergebnis wie zuvor erzielen:
Sub scrape_countries()
' start Internet Explorer
Dim browser As InternetExplorer
Set browser = New InternetExplorer
' enable the "headless" mode
browser.Visible = False
'visit the target page
browser.navigate "https://www.scrapethissite.com/pages/simple/"
' wait for the browser to load the page
Do: DoEvents: Loop Until browser.readyState = 4
' get the current page
Dim page As HTMLDocument
Set page = browser.document
' retrieve all country HTML nodes on the page
Dim countryHTMLNodes As Object
Set countryHTMLElements = page.getElementsByClassName("country")
' counter to the current row
Dim currentRow As Integer
currentRow = 1
' iterate over each country HTML node and
' apply the Excel scraping logic
For Each countryHTMLElement In countryHTMLElements
' where to store the scraped data
Dim name, capital, population, area As String
' data retrieval logic
name = countryHTMLElement.getElementsByClassName("country-name")(0).innerText
capital = countryHTMLElement.getElementsByClassName("country-capital")(0).innerText
population = countryHTMLElement.getElementsByClassName("country-population")(0).innerText
area = countryHTMLElement.getElementsByClassName("country-area")(0).innerText
' write the scraped data in Excel cells
Cells(currentRow, 1).Value = name
Cells(currentRow, 2).Value = capital
Cells(currentRow, 3).Value = population
Cells(currentRow, 4).Value = area
' increment the row counter
currentRow = currentRow + 1
Next countryHTMLElement
' close the current Internext Explorer window
browser.Quit
End Sub
Führen Sie dieses VBA-Modul aus und Sie erhalten das gleiche Ergebnis wie zuvor. Fantastisch! Sie haben gerade Excel-Web-Scraping mit Internet Explorer durchgeführt.
Fazit
Mit diesem Leitfaden haben Sie gelernt, was VBA ist und warum Sie damit Web Scraping in Excel durchführen können. Das Problem ist, dass die VBA-Browser-Automatisierungsbibliothek auf den Internet Explorer angewiesen ist, der nicht mehr unterstützt wird. Hier haben Sie einen gleichwertigen Ansatz zur Automatisierung des Datenabrufs in Excel mit VBA unter Verwendung von Selenium erkundet. Außerdem haben Sie den Legacy-Ansatz für ältere Versionen von Windows gesehen.
Gleichzeitig sollten Sie bedenken, dass es bei der Extraktion von Daten aus dem Internet viele Herausforderungen zu berücksichtigen gibt. Insbesondere verwenden die meisten Websites Anti-Scraping- und Anti-Bot-Lösungen, die Ihr VBA-Web-Scraping-Skript erkennen und blockieren können. Vermeiden Sie sie dies alles mit unserer Scraping Browser-Lösung. Dieser Browser der nächsten Generation ist mit Selenium integriert und kann automatisch CAPTCHA-Auflösung, Browser-Fingerprinting, automatische Wiederholungsversuche und vieles mehr für Sie erledigen!
Sie möchten sich überhaupt nicht mit Web Scraping befassen, interessieren sich aber für Excel-Daten? Entdecken Sie unsere gebrauchsfertigen Datensätze. Sie sind sich nicht sicher, welche Datenlösung Sie wählen sollen? Kontaktieren Sie uns noch heute!
Keine Kreditkarte erforderlich