Web scraping mit Power Query – Daten aus mehreren Webseiten einlesen
Nachdem wir die verschiedenen Möglichkeiten zum massenhaften Auslesen von Dateien auf lokalen Speichern schon zu Beginn des Jahres umfangreich und ausführlich für Sie beschrieben haben, ist heute das stapelweise Einlesen von Inhalten aus dem Internet dran – das sogenannte web scraping. Dazu haben wir ein praktisches Tutorial vorbereitet, das Ihnen die Arbeit mit Power Query künftig hoffentlich ein kleines bisschen erleichtert. Bei konkreten Fragen können Sie uns jederzeit einen Kommentar hinterlassen.
Tabellen finden sich auf den unterschiedlichsten Websites, so z.B. diese Bilanzen hier:
Wenn man nun Daten verschiedener Unternehmen auswerten möchte, um sie zum Beispiel miteinander zu vergleichen (wie diesem Bericht), dann wäre es doch nicht schlecht, wenn man all diese Schritte auch automatisieren könnte.
Fangen wir mit dem Kopieren der URL an und starten dann in Power Query eine Web-Abfrage:
So sieht das Ergebnis aus:
Nun möchten wir aber die Daten mehrerer Firmen auslesen. Dafür erstellen wir eine Tabelle, die die entsprechenden Firmen auflistet: Man braucht in der ersten Spalten nur den Code einzugeben, die URL-Adresse erstellt sich dann automatisch:
Um einen Vorgang für mehrere Objekte auszuführen, erstellt man eine Funktion. Darin ist definiert, was man machen will. Dann ordnet man diese Funktion den Objekten zu, für die sie ausgeführt werden sollen – in unserem Fall, den Zeilen unserer Liste.
Ausgangspunkt für die Definition unserer Funktion ist unsere Abfrage für die Webinhalte. Um diese nun der Liste zuordnen zu können, muss man eine Verknüpfung finden. Das geht über ein Schlüsselelement, welches in beiden zu finden ist, z.B. die URL-Adresse.
Dies wird in dem äußeren Kontext der Funktion festgelegt:
Nun haben wir das definiert, was ausgeführt werden soll. Als nächstes definieren wir, in welchem Kontext, wofür das also ausgeführt werden soll: Für alle Zeilen der Liste. Die laden wir in eine neue PQ Abfrage.
Um nun die Funktion für jede Zeile dieser Liste auszuführen, fügen wir eine neue benutzerdefinierte Spalte hinzu (1). Statt dort jedoch einen festen Wert oder Bezug auf eine andere Spalte einzutragen, tragen wir hier den Bezug zu unserer Funktion ein oder anders gesagt, wir rufen darin die Funktion auf (2). Dazu schreiben wir erst den Namen der Funktion und dahinter in Klammern das Verbindungselement, über welches beides verknüpft werden soll. Das muss immer eine Spalte der Tabelle sein, hier „URL“. Dieser Wert wird jetzt also beim Aufrufen in dieser Zeile an die Funktion übergeben. Wenn man nun erweitert (3), erhält man eine Tabelle, in der alle importieren Tabellen untereinander angeordnet sind.
Das ist schon beeindruckend, reicht uns aber nicht. Wir möchten ja diese Informationen strukturiert und sinnvoll weiterverarbeiten und streben daher eine Form an, die mit Datenbanken bzw. Power Pivot weiterverarbeitet werden kann.
Hier zeigen sich die weiteren Stärken von Power Query: Durch „Spalten-Entpivotisieren“ werden all die Spalten untereinander geschrieben, die die Werte enthalten, die uns interessieren. Die Zahlen sind links angeordnet, was heißt, dass sie als Text erkannt wurden.
Das liegt vermutlich an den Kommas. Die entfernen wir mit „Werte ersetzen“.
Dann ändern wir das Format auf „Dezimalzahl“.
Dies hat einige Fehlermeldungen zur Folge, die wir uns zunutze machen können. Die sind ja in den Zeilen, die Überschriften und Leerzeilen enthalten. Die wollen wir ja sowieso loswerden: Fehler entfernen.
Zum Schluss noch eine Spalte mit einem neuen Schlüssel einfügen und diese Abfrage ist abgeschlossen. Auf ähnliche Art und Weise erstellen wir dann noch die Stammdaten-Tabellen: Alle vorhandenen Konten/Zeilencodes und die verwendeten Perioden. Wie wir uns die DimDate holen, können sie kurz hier nachlesen.
Dann noch ein paar measures und man kann nach Herzenslust auswerten – stay queryious! :-)
Weitere Tutorials?
Natürlich haben wir noch mehr wertvolle Tipps rund um Micosoft BI für Sie!