Web Scraping mit VBA-Leitfaden

Erschließen Sie das Potenzial von Excel für Web Scraping mit VBA, einer leistungsstarken Methode, um die Datenerfassung direkt in Ihren Tabellen zu automatisieren.
13 min read
Web Scraping with Excel VBA main blog image

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:

  1. Eine Verbindung zu einer Webseite in einem Browser herstellen.
  2. Den HTML-Inhalt analysieren.
  3. Daten daraus extrahieren.
  4. 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:

Seite von Scrape This Country Sandbox

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:

Download von SeleniumBasic

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 neueste stabile Version des Edge-Webtreibers wird heruntergeladen

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\\AppData\Local\SeleniumBasic

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:

Ein neues Blatt in Excel öffnen

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“:

Auf die Datei in der oberen Ecke klicken

Wählen Sie dann „Optionen“ wie folgt aus:

Optionen auswählen

Gehen Sie im Popup-Fenster „Optionen“ zur Registerkarte „Benutzerdefiniertes Ribbon“ und aktivieren Sie die Option „Entwickler“ im Abschnitt „Hauptregisterkarten“:

Überprüfung der Entwickleroption im benutzerdefinierten Ribbon

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“:

Auf der Registerkarte „Entwickler“ auf Visual Basic klicken

Dadurch wird das folgende Fenster geöffnet:

Das neu geöffnete Fenster mit grauem Hintergrund

Klicken Sie hier im Menü oben auf „Einfügen“ und dann auf „Module“, um Ihr VBA-Scraping-Modul zu initialisieren:

Auf Modul unter der Option Einfügen klicken

Sie sollten jetzt das sehen:

Das neue Modul geöffnet

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 …“

Unter Tools auf Referenzen klicken

Suchen Sie im Popup-Fenster nach der „Selenium Type Library“ und überprüfen Sie sie:

Überprüfung der Selenium Type Library aus den Optionen

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:

Klicken Sie auf die Schaltfläche Ausführen, um den Code zu testen

Dadurch wird das folgende Edge-Fenster geöffnet:

Das Edge-Fenster, das sich geöffnet hat

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“:

Verwendung der Option „Inspect“

Hier können Sie sehen, dass jedes Land-HTML-Element

ist Sie können mit dem folgenden CSS-Selektor auswählen:

.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:

Das Excel-Blatt mit den Daten

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:

Aktivierung der Microsoft HTML-Objektbibliothek und der Microsoft Internet-Steuerungselemente

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!