Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: VBA web scraping

VBA web scraping
10.04.2019 12:54:18
Torsten
Hallo,
ich möchte per VBA automatisch Daten von einer Website rausziehen und dann in ein Tabellenblatt eintragen.
Folgende Seite soll als Bsp. dienen.
https://trainingslager.onlineliga.de/player/overview?playerId=1668
Ich hätte hier gerne den Fitness und Konditionswert gescraped, steht etwas weiter unten auf der Seite. Hat jemand eine Lösung? Ich mochte das mit dem Chrome-Browser machen.
Anzeige

2
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA web scraping
11.04.2019 11:52:16
Zwenn
Hallo Torsten,
bei Seiten die als Beispiel dienen sollen bin ich ja immer skeptisch. Ich gehe aber davon aus, dass andere Seiten, die Du auslesen möchtest, den gleichen Aufbau haben, also auch Spielerseiten sind. Wenn nicht, klappt nicht, was Du vor hast.
Was auf keinen Fall geht, ist die Verwendung des Chrome Browsers. Man muss den Internet Explorer nehmen, weil das der Einzige ist, den man über die sogenannte COM-Schnittstelle direkt aus Excel ansprechen kann. Alle anderen Browser haben keine COM-Schnittstelle. Solltest Du auf einem Mac arbeiten, funktioniert das folgende Makro also nicht, da es dort keinen Internet Explorer gibt.
Die Ausgabe der Ergebnisse musst Du Dir anpassen. Ich sammel die einfach in einem String und gebe den am Ende aus.

Sub WerteAuslesen()
'Variablen für den Internetzugriff und das DOM-Handling
Dim url As String
Dim browser As Object
Dim knotenStamm As Object
Dim knotenAst As Object
Dim knotenZweig As Object
Dim textAusFaehigkeit As String
Dim faehigkeitGefunden As Boolean
Dim ergebnis As String
'Adresse der auszulesenden Seite
url = "https://trainingslager.onlineliga.de/player/overview?playerId=1668"
'Internet Explorer initialisieren, Sichtbarkeit festlegen,
'URL aufrufen und warten bis Seite vollständig geladen wurde
Set browser = CreateObject("internetexplorer.application")
browser.Visible = False
browser.Navigate url
Do Until browser.ReadyState = 4: DoEvents: Loop
'Alle Spieler-Fähigkeiten in eine Node Collection einsammeln
Set knotenStamm = browser.document.getElementsByClassName("row ol-playerabilitys-table-row")
If Not knotenStamm Is Nothing Then
'Wenn Spieler-Fähigkeiten vorhanden sind,
'alle durchgehen und die gewünschten Werte auslesen
For Each knotenAst In knotenStamm
'Den Text des grade bearbeiteten Wertes auslesen
textAusFaehigkeit = knotenAst.innertext
'Wenn gewünschter Fähigkeiten-Name enthalten, Wert auslesen
If InStr(1, textAusFaehigkeit, "Fitness") > 0 Or _
InStr(1, textAusFaehigkeit, "Kondition") > 0 Then
faehigkeitGefunden = True
End If
Select Case faehigkeitGefunden
Case True
Set knotenZweig = knotenAst.getElementsByClassName _
("ol-value-bar-small-label-value")(0)
If Not knotenZweig Is Nothing Then
'Wenn der Wert vorhanden ist, speichern
'Der Wert kann auch direkt in einer Tabelle abgelegt werden
'Die Reihenfolge der Augabe entspricht der Reihenfolge der
'Werte auf der Internetseite
ergebnis = ergebnis & Trim(knotenZweig.innertext) & Chr(13)
End If
End Select
'Gefunden-Status zurücksetzen
faehigkeitGefunden = False
Next knotenAst
Else
'Wenn keine Spieler-Fähigkeiten ausgelesen werden konnten,
'Hinweis als Ergebnis speichern
ergebnis = "Es wurden keine Spieler-Fähigkeiten gefunden."
End If
'Ergebnis ausgeben
MsgBox ergebnis
'Aufräumen
browser.Quit
Set browser = Nothing
Set knotenStamm = Nothing
Set knotenAst = Nothing
Set knotenZweig = Nothing
End Sub

Viele Grüße,
Zwenn
Anzeige
AW: VBA web scraping
12.04.2019 12:20:39
Torsten
Super!
Vielen Dank für Deine Mühe Zwenn.
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

VBA Web Scraping mit Excel


Schritt-für-Schritt-Anleitung

Um mit Excel VBA Daten von einer Website zu scrapen, folge diesen Schritten:

  1. Öffne Excel und drücke ALT + F11, um den Visual Basic for Applications (VBA) Editor zu öffnen.

  2. Füge ein neues Modul hinzu: Klicke mit der rechten Maustaste auf "VBAProject (DeinWorkbookName)", wähle "Einfügen" und dann "Modul".

  3. Kopiere den folgenden VBA-Code in das Modul:

    Sub WerteAuslesen()
        Dim url As String
        Dim browser As Object
        Dim knotenStamm As Object
        Dim knotenAst As Object
        Dim knotenZweig As Object
        Dim textAusFaehigkeit As String
        Dim faehigkeitGefunden As Boolean
        Dim ergebnis As String
    
        url = "https://trainingslager.onlineliga.de/player/overview?playerId=1668"
        Set browser = CreateObject("internetexplorer.application")
        browser.Visible = False
        browser.Navigate url
        Do Until browser.ReadyState = 4: DoEvents: Loop
    
        Set knotenStamm = browser.document.getElementsByClassName("row ol-playerabilitys-table-row")
        If Not knotenStamm Is Nothing Then
            For Each knotenAst In knotenStamm
                textAusFaehigkeit = knotenAst.innertext
                If InStr(1, textAusFaehigkeit, "Fitness") > 0 Or InStr(1, textAusFaehigkeit, "Kondition") > 0 Then
                    faehigkeitGefunden = True
                End If
                Select Case faehigkeitGefunden
                    Case True
                        Set knotenZweig = knotenAst.getElementsByClassName("ol-value-bar-small-label-value")(0)
                        If Not knotenZweig Is Nothing Then
                            ergebnis = ergebnis & Trim(knotenZweig.innertext) & Chr(13)
                        End If
                End Select
                faehigkeitGefunden = False
            Next knotenAst
        Else
            ergebnis = "Es wurden keine Spieler-Fähigkeiten gefunden."
        End If
    
        MsgBox ergebnis
        browser.Quit
        Set browser = Nothing
        Set knotenStamm = Nothing
        Set knotenAst = Nothing
        Set knotenZweig = Nothing
    End Sub
  4. Führe das Makro aus, indem du F5 drückst oder im Menü "Run" wählst. Die gescrapten Werte werden in einem MessageBox-Fenster angezeigt.


Häufige Fehler und Lösungen

  • Fehler: "Seite konnte nicht geladen werden."

    • Lösung: Stelle sicher, dass die URL korrekt ist und dass der Internet Explorer installiert ist, da andere Browser wie Chrome nicht über die COM-Schnittstelle angesprochen werden können.
  • Fehler: Keine Spieler-Fähigkeiten gefunden.

    • Lösung: Prüfe, ob die Struktur der Website geändert wurde. Möglicherweise sind die gesuchten Elemente nicht mehr unter den angegebenen Klassennamen zu finden.

Alternative Methoden

Wenn du nicht mit VBA arbeiten möchtest, kannst du auch Tools wie Power Query in Excel verwenden, um Daten von Webseiten zu importieren. Dies ist jedoch weniger flexibel als das Scraping mit VBA, da es keine Programmierung erfordert.


Praktische Beispiele

Hier ist ein Beispiel, wie du den Code anpassen kannst, um andere Werte zu scrapen. Angenommen, du möchtest auch den "Alter" des Spielers scrapen:

  1. Füge eine neue Bedingung im Code hinzu, um nach "Alter" zu suchen.

    If InStr(1, textAusFaehigkeit, "Alter") > 0 Then
        faehigkeitGefunden = True
    End If
  2. Stelle sicher, dass du den richtigen Klassennamen für den Alterswert verwendest, der auf der Website zu finden ist.


Tipps für Profis

  • Verwende Fehlerbehandlung: Implementiere On Error Resume Next für eine robustere Fehlerbehandlung.
  • Optimiere deine Abfragen: Wenn du mehrere Werte scrapen möchtest, versuche, die Abfragen in einer Schleife zu bündeln, um die Effizienz zu steigern.
  • Testen in kleineren Schritten: Teste deinen Code regelmäßig, um sicherzustellen, dass alles wie gewünscht funktioniert, besonders wenn du die Struktur der Zielseite änderst.

FAQ: Häufige Fragen

1. Kann ich mit VBA auch Daten von anderen Websites scrapen? Ja, du kannst mit dem bereitgestellten VBA-Code Daten von jeder Website scrapen, solange du die Struktur der Seite verstehst und die richtigen Klassennamen verwendest.

2. Funktioniert das Scraping auch auf einem Mac? Nein, der bereitgestellte Code funktioniert nur auf Windows, da der Internet Explorer verwendet wird, der auf Mac nicht verfügbar ist. Du müsstest alternative Methoden wie Power Query in Betracht ziehen.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige