Eine gute Datenquelle, die mir immer wieder genannt wird, ist Ariva.de. Ariva bietet in der Tat eine Fülle an Fundamentaldaten, Bewertungskennzahlen etc., die eine gute Grundlage für unsere Aktienanalyse bzw. Unternehmensbewertung bilden können. Auch diese Daten lassen sich mit meinem vor einiger Zeit vorgestellten Ansatz zum Web Scraping mit ImportXML nach Google Sheets importieren und dort für unsere Analyse weiter verarbeiten.
Aufgrund der vielen Rückfragen zu diesem Ansatz möchte ich euch in diesem Artikel nochmal am Beispiel von Ariva.de erklären, wie ihr Finanzkennzahlen mithilfe von ImportXML in euer Google Spreadsheet reinbekommt.
Disclaimer
Texte und Bilder auf Ariva.de sind vom Copyright geschützt. Die Verwendung bedarf grundsätzlich der Zustimmung von Ariva.de. Das gilt vermutlich auch, wenn ihr die Daten nur für private Zwecke nutzen möchtet. Wenn ihr euch ein entsprechendes automatisiertes Download-Tool baut und nutzt, dann bewegt ihr euch also ggf. in einer rechtlichen Grauzone.
Daten auf Ariva.de
Ariva.de bietet eine ganze Reihe an fundamentalen Kennzahlen. Für die Bayer Aktie findet ihr diese Daten z.B. unter der folgenden URL:
https://www.ariva.de/bayer-aktie/bilanz-guv
Die Seite beinhaltet mehrere Tabellen mit folgenden Informationen für die letzten 6 Jahre:
- GuV (Gewinn- und Verlustrechnung) und Bilanz : Wesentliche Informationen aus dem Jahresabschluss
- Angaben je Aktie: Informationen zu EPS, Dividende, Anzahl ausstehender Aktien, Umsatz, Buchwert, Cash Flow
- Personal: Informationen zur Anzahl an Mitarbeitern, zu Personalkosten sowie ausgewählte KPIs je Mitarbeiter (Umsatz, Aufwand, Bruttoergebnis, Nettoergebnis)
- Bewertung: Wesentliche Bewertungskennziffern wie KGV, KUV, KBV, KCV, aber auch Kapitalrenditen, EK-Quote und Verschuldungsgrad, Arbeitsintensität etc.
Hier beispielhaft einmal die Tabelle mit den zur Verfügung stehenden Bewertungskennzahlen für die Bayer-Aktie:
Bewertungskennzahlen Bayer-Aktie; Quelle: Ariva.de
Für die Daten dieser Tabelle möchte ich euch gerne einmal den Import nach Google Sheets erläutern.
Web Scraping mit ImportXML
Die ImportXML Funktion, die von Google Sheets bereitgestellt wird, bietet eine sehr komfortable Lösung für den Import von Finanzdaten von einer beliebigen Webseite – in diesem Fall Ariva.de – direkt in ein Google Sheets Tabellenblatt.
Die Funktion ImportXML sieht folgendermaßen aus:
IMPORTXML(url, xpath_query)
Es gibt also zwei Variablen bzw. Argumente in dieser Funktion:
- einmal die URL, also die Webseite von der wir die Informationen importieren bzw. scrapen möchten
- und dann den XPATH, also die genaue Stelle auf der Seite, wo die Information (in unserem Fall eine ganz bestimmte Kennzahl wie z.B. das KGV des Jahres 2013) zu finden ist
Falls ihr euch zur Nutzung der Funktion bzw. zum Auffinden des XPATH noch etwas einlesen möchtet, dann empfehle ich euch die DIY Investor Artikel zum Web Scraping mit ImportXML sowie zur Erstellung eines einfachen Screeners in Google Sheets (alles was ich hier erläutere lässt sich natürlich gut damit kombinieren).
Nun möchte ich einmal etwas detaillierter auf das Auffinden der richtigen URL und beispielhaft des XPATH für den Import von Ariva.de eingehen.
Die richtige URL auf Ariva
Wenn wir uns die URLs zu den Fundamentaldaten verschiedener Aktien einmal etwas genauer ansehen, dann stellen wir fest, dass die URL die folgende Struktur hat (wie sich oben am Beispiel Bayer bereits angedeutet hat):
https://www.ariva.de/unternehmensname-aktie/bilanz-guv
Der erste Teil (“https://www.ariva.de/”) und der letzte Teil (“/bilanz-guv”) der URL sind immer gleich. Wir müssen also nur den mittleren Teil, nämlich den Namen der Aktie, mit einer Zelle in unserem Spreadsheet verlinken. Die Problematik liegt nun darin, dass wir die Schreibweise des einzelnen Unternehmens nicht immer genau kennen. Es könnte sein, dass manchmal noch ein “AG” hinter dem Namen zu finden ist, oder dass ein aus mehreren Teilen bestehender Unternehmensname manchmal mit und manchmal ohne Bindestrich geschrieben wird.
Einfacher ist es daher, wenn wir einfach die ISIN anstelle des Terms “unternehmensname-aktie” verwenden (vielen Dank an dieser Stelle nochmal an Hans-Jürgen von Covacoro für den Tipp):
https://www.ariva.de/ISIN/bilanz-guv
oder für Bayer
https://www.ariva.de/DE000BAY0017/bilanz-guv
Wie bereits in den oben genannten Artikeln erläutert, ergibt sich die URL dann in unserem Tabellenblatt folgendermaßen, wobei wir die ISIN unserer gesuchten Aktie in die Zelle B7 schreiben:
concatenate(“https://ariva.de/”,$B$7,“/bilanz-guv”)
Der richtige XPATH
Den richtigen XPATH können wir – wie in meinen anderen Artikeln zu diesem Thema beschrieben – mithilfe der “Untersuchen-Funktion” unseres Browsers ermitteln.
Dies ist z.B. offenbar der XPATH für das KGV des Jahres 2013 (bei Bedarf könnt ihr das gerne einmal auf der Seite nachvollziehen):
//*[@id=’CONTENT’]/div[3]/div[2]/div[7]/div[2]/table/tbody/tr[2]/td[2]
Wir gehen also von der ID “Content” aus und bewegen uns dann tiefer in die Struktur hinein. Von hier aus können wir im Wesentlichen alle relevanten Daten auf der Seite ansteuern:
- Die dritte “div”-Ebene in der Struktur definiert die entsprechende Tabelle, wobei die Nr. 3 zum Beispiel die GuV-Daten und die Nr. 7 die Bewertungsdaten enthält… wir wählen also für unser Beispiel die Nr. 7 aus (“div[7]”)
- Die Kennung “tr” definiert die Zeile in der Tabelle. Nach der Jahreszahl in der ersten Zeile befindet sich das KGV in der Zeile 2 (also “tr[2]”)
- Die Kennung “td” definiert die Spalte in der Tabelle. Nach der Bezeichnung der Kennzahl in Spalte 1 befindet sich das KGV für das Jahr 2013 in der Spalte 2 (also “td[2]”)
Nach der gleichen Logik müssten wir nun jede beliebige Kennzahl von Ariva.de direkt nach Google Sheets importieren können (habe ich allerdings nicht ausprobiert).
Zusammenfassend ergibt sich also folgende Funktion für den Import des KGV 2013:
IMPORTXML(concatenate(“https://ariva.de/”,$B$7,“/bilanz-guv”),//*[@id=’CONTENT’]/div[3]/div[2]/div[7]/div[2]/table/tbody/tr[2]/td[2])
Weil es hin und wieder einmal ein paar Probleme mit dem XPATH gab, würde ich empfehlen, diesen nochmal in eine separate Zelle zu schreiben und dann darauf zu verlinken.
Die richtigen Ländereinstellungen in Google Sheets
Wenn ihr das einmal ausprobiert, dann könnte es sein, dass das KGV von Google Sheets erstmal nicht als Zahl, sondern nur als Text importiert wird.
Der Grund hierfür ist ganz einfach: Ariva.de stellt die Daten in den verschiedenen Tabellen im deutschen Zahlenformat bereit wohingegen Google Sheets standardmäßig auf das englische Zahlenformat eingestellt ist.
Zur Info: Im englischen Zahlenformat wird das Komma als Punkt dargestellt. In den Formeln wird ein Komma anstelle eines Semikolons verwendet, um die einzelnen Formelbestandteile voneinander zu trennen.
Um diesen Fehler zu vermeiden, können wir einfach die Ländereinstellungen in Google Sheets unter “File” -> “Spreadsheet Settings” anpassen und auf deutsch umstellen.
Darüber hinaus hat Google Sheets außerdem ein Limit, was die importierten Datenpunkte angeht… und zwar über alle Spreadsheets in einem Account hinweg. Das führt dazu, dass ein Datenupdate ggf. recht lange dauert.
Fazit
Die ImportXML Funktion zum Import von Finanzdaten nach Google Sheets kann für jede beliebige Webseite – u.a. auch Ariva.de – angewendet werden.
Neben der URL zur entsprechenden Webseite benötigt die ImportXML Funktion nur den so genannten XPATH, also sozusagen einen Pfad zum spezifischen Datenpunkt, der importiert werden soll.
Bei einer größeren Anzahl an Datenpunkten kann die Aktualisierung bzw. der Download der Daten recht lange dauern. Darüber hinaus ist der erforderliche XPATH manchmal schwer zu identifizieren und natürlich komplett den Änderungen der Webseitenstruktur unterworfen.
9 Kommentare zu „Web Scraping: Finanzdaten von Ariva.de nach Google Sheets importieren“
Hallo Axel,
ich bin am verzweifeln. Ich habe nach langem studieren endlich geschafft den aktuellen Kurs eines ETF’s in mein Google sheet zu ein zu bauen.
=IMPORTXML(“” & E5 & “”,”//span[@itemprop=’price’][1]”) Funktioniert prima.
Jetzt will ich aber die prozentuale Veränderung zum Vortag von einer Webseite abrufen: https://www.morningstar.de/de/etf/snapshot/snapshot.aspx?id=0P0000MEHZ&InvestmentType=FE
In meinem Fall -0,42%
Diesen Wert würde ich jetzt gerne in mein Sheet übertragen. Leider gelingt es mir nicht.
Kannst du mir bitte helfen, oder gibt es ein Buch zu dem Thema?
Danke fürs Feedback.
Liebe Grüße
Martin
Hallo Martin Stehle!
Ich bin auf das gleiche Problem gestoßen und ich denke es hängt damit zusammen dass diese Tabellen bei Morning Star dynamisch geladen werden. Das scheint einen Zugriff mittels ImportXML zu verhindern. Eine Lösung konnte ich leider nicht finden.
Beste Grüße
René
Hallo super Beitrag,
ich hab das ganze auch schon umgesetzt.
2 Probleme habe ich noch.
– Bei den Daten steht ziemlich lange immer Loading
– gibt es eine Möglichkeit ähnlich wie bei Ariva die URL mit der ISIN zu ermitteln.
Bei Finanzen.net ist die URL z.B. so https://www.finanzen.net/aktien/apple-aktie
Aber apple ist ja kein Symbol oder so.
Danke für eine Antwort
Hallo Michael,
soweit ich weiß, hat Google Sheets irgendwo eine Limitation, was die Anzahl an Datenpunkten angeht, die man dort reinladen kann (oder der Anzahl an Formeln, die man dort nutzen kann). Ich schätze, dass die Verzögerung damit zu tun hat (hatte ich bei meinem Google Sheets Screener auch).
Mir scheint, dass bei Finanzen.net i.W. der eigentliche Unternehmensname als Bestandteil der URL genutzt wird. Insofern müsste man das vermutlich in Google Sheets dann entsprechend eingeben.
Viele Grüße,
Axel
Super Seite!
Ich habe nun lange (Tage lang :)) gekämpft und möchte daher nun meine Erfahrungen kurz teilen:
Bei vielen Seiten/Werten hat es irgendwie funktioniert, aber bspw. bei Ariva bekomme ich von der Hauptseite der Aktie, auf der die Dividende bereits steht, diese nicht ‘übertragen’. Ich habe nun wie hier im Beispiel die Bilanz-GUV Unterseite genutzt und da funktioniert es (nur gibt es dort nicht das Datum der nächsten Dividendenzahlung…). Warum? Keine Ahnung… Vielleicht auch das Thema dynamische Tabelle?
Nun hol ich dieses Datum über Yahoo, da funktioniert es für viele Aktien, aber nicht für alle obwohl der Seitenaufbau und XPaths aus meiner Sicht identisch sind. Nicht das schlimmste Problem, aber falls es mir jemand erklären kann, wäre super!
Für die URL hab ich herausgefunden, dass viele Seiten eine automatische Weiterleitung haben, wenn man statt dem Aktiennamen den Ticker, die WKN oder ISIN eingibt – so zum Beispiel bei Ariva, Yahoo, Börse Frankfurt…
Das dürfte das Problem mit der URL lösen solange man nicht auf Finanzen.net festgelegt ist.
Noch eine letzte Anmerkung: Ich hatte das Gefühl die Erklärung zu XPath verstanden zu haben, aber mir fehlte wohl der Teil, dass man bei div[1] die [1] weglassen kann/muss, wenn es nur ein div gibt. Bei Untersuchen, Rechtsklick auf Zeile, Kopieren, XPath (vielleicht Funktionsweise im Detail abhängig vom genutzten Browser) hat mir geholfen die “richtigen” XPaths zu finden oder zumindest meine Interpretation zu überprüfen 🙂
Vielleicht hilft es noch jemand anderem…
Viele Grüße
Maria
Hi Maria,
danke dir für den Input! 🙂
Viele Grüße,
Axel
Wäre es möglich mal ein Beispiel-File zu verlinken?
Vielen Dank!
Das Scraping von Daten von anderen Seiten ist rechtlich eine Grauzone würde ich sagen… deshalb ja auch der Disclaimer.
Mit der reinen Beschreibung des allgemeinen Vorgehens hier fühle ich mich noch ganz wohl, aber nicht so sehr mit dem Teilen eines entsprechenden Files. Ich möchte mich da ungern angreifbar machen.
Sorry, ich hoffe du verstehst das.
Super Beitrag und super verlinkte Seiten zu Scraping.
Bei vielen Werten hab ich es mit den Erklärungen geschafft, diese automatisch zu laden, aber bei der Dividende klappt es irgendwie nicht…
Sie ist bei eigentlich allen Seiten in einer Tabelle integriert und ich hab es hier mal am Beispiel LVMHF auf Ariva versucht.
Kann ich als Absprungspunkt jede Div ID nehmen oder nur bestimmte?
Ich hab es von Content:
//*[@id=”CONTENT”]/div[1]/div[2]/div[1]/div[3]/div[1]/div[1]/table/tbody/tr[2]/td[2]
und page 3 (und einigen hoffnungslosen Alternativen) in jeweils einer eigenen Hilfszelle (daher die doppelten “) versucht:
//*[@id=”page_3”]/div[1]/div[1]/table/tbody/tr[2]/td[2]
aber scheitere kläglich.
Kann mir jemand helfen oder erklären, was ich in der Logik vom XPath falsch verstanden habe?
Wäre super, weil ich bin hier nach mehreren Stunden Fehlversuche am verzweifeln… 🙁
Vielen DANK!