Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

Automatisches Einbinden mehrerer hundert Webquellen
#1
Moin Excelforum!

Ich bin gerade dabei, meine Tabelle zu überarbeiten und brauche dafür die historischen Kursdaten von (allen) Kryptowährungen auf coinmarketcap.com.
Wie sich herausgestellt hat kann man diese leider nur einzeln abrufen, eine umfassende Seite mit allen Daten existiert nicht.

Bisher habe ich manuell 35 Datensätze eingebunden, was pro Datensatz jedoch einen Aufwand von annähernd 5min bedeutet.
Ich wäre bereit, die Top100 Währungen manuell einzubinden, rein theoretisch ginge es aber um weit über 1000 existierende Währungen - plus diejenigen, die quasi jeden Tag neu hinzukommen.
Das wäre von Hand eine ziemliche Herausforderung und würde tägliche Arbeit bedeuten...

Mein Vorgehen für jeden Datensatz ist:
1. Die Seite mit den historischen Daten der jeweiligen hinzuzufügenden Währung aufrufen (z.B. https://coinmarketcap.com/currencies/maidsafecoin/historical-data)
2. Die Ansicht von einem Monat auf "All Time" umstellen um alle Daten seit dem ersten Eintrag anzuzeigen, dies ergibt eine statische URL (https://coinmarketcap.com/currencies/maidsafecoin/historical-data/?start=20130428&end=20171114)
3. Zum Ende der Auflistung scrollen und das erste Datum in der URL korrigieren (.../?start=20130428 -> .../?start=20140428), das Enddatum wird auf "today" gesetzt um die URL dynamisch zu machen (wird zum Glück akzeptiert)
4. Die nun abgeänderte URL kopieren und über "Daten" -> "Aus dem Web" in Excel importieren
5. Im folgenden Dialog "Tabelle 0" auswählen und per "Bearbeiten" den Abfrage-Editor starten
6. Den letzten automatisch erstellten Eintrag unter "Angewendete Schritte" entfernen, da er die Daten unbrauchbar macht
7. Den Namen der Abfrage nach dem immer gleichen Muster anpassen (Coinmarketcap Historisch MAID)
8. Zu "Transformieren" wechseln, die Datumsspalte auswählen und in den Typ Datum umwandeln (amerikanisches Datum in Textformat -> deutsches Datum in Datumsformat)
9. Alle weiteren Spalten markieren, zunächst die Kommas per "Werte ersetzen" entfernen, dann die Punkte in Kommas umwandeln, schließlich alles in das Dezimalzahlformat umwandeln
10. Die Abfrage per "Schließen & laden" in ein neues Tabellenblatt importieren und dieses nach dem immer gleichen Muster umbenennen (src_cmc_hist_maid) und das Blatt anschließend ausblenden
11. Eine Vorlage (Blatt data_hist_btc), in der die Rohdaten für die weitere Verwendung bearbeitet werden, kopieren und entsprechend der neuen Währung umbenennen (data_hist_maid)
12. Das ganze Blatt markieren und die Formeln in der zweiten Zeile (Livedaten aus einer anderen Quelle für den jeweils heutigen Tag) per "Ersetzen" anpassen (Bitcoin -> MaidSafeCoin)
13. Die Formeln in den übrigen Zeilen, die auf den importierten historischen Daten basieren, entsprechend per "Ersetzen" anpassen (btc -> maid)
14. Das Blatt ausblenden

Blinksmiley

Hier nochmal das ganze Trauerspiel in Videoform (Vorsicht, Boxen nicht zu laut stellen, 
irgendwann kommen zwei Windows-BINGs wenn die Ersetzen-Vorgänge abgeschlossen sind)

/edit
Aus irgendeinem Grund wird das Video bei mir nur abgespielt, wenn man per Überschrift/Link
direkt auf Youtube geht...

https://youtu.be/L4S_AK_zBts

Da es in dem ganzen Prozess nur ganz wenige Variablen gibt (oben fett markiert) dachte ich mir, es müsste doch einen Weg geben, das alles automatisiert geschehen zu lassen. Ich habe sogar ein Tabellenblatt, das die Livedaten abruft und sämtliche >1000 Kürzel und volle Namen aller geführten Währungen enthält, die man zu diesem Zweck evtl. auslesen könnte. Mir fällt nur kein Weg ein das Ganze auch nur ansatzweise zu realisieren. Vielleicht gibt es auch einfach keinen. :39:

Aber auch wenn eine Automatisierung unmöglich sein sollte muss es doch irgendwelche Wege geben den Prozess zu vereinfachen. Ich will mir einfach keine ganzen Serienstaffeln nebenher anschauen nur um von Hand hunderte Datensätze nach dem immer gleichen Muster einzufügen.

Für jede Hilfe wäre ich sehr dankbar  :69:


Edit Mod:

Aus Urheberrechtsgründen eingebettetes Video entfernt; Video kann über den Link aufgerufen werden.
Antworten Top
#2
Hallo,

das ist doch mal eine interessante Anfrage.

In Einzelfällen habe ich Webseiten ausgelesen, daher vermute ich, dass Excel recht gut geeignet ist, insbesondere da die Daten der Webseite gleich gut strukturiert ins Sheet übergeben werden können.

Bei meinem Kenntnisstand erscheint das viel, zu viel Arbeit. Abere ich möchte dich ermuntern, "am Ball zu bleiben", eventuell (nach ein paar Tagen) auch in anderen Foren zu fragen. (crossposting wird nicht gerne gesehen, da ist es besser gleich zu verlinken)

M$ bietet relativ gute Tool, Wbseiten auszulösen, aber ohne Erfahrung/Übung geht da wenig.

mfg
[-] Folgende(r) 1 Nutzer sagt Danke an Fennek für diesen Beitrag:
  • o_o_o
Antworten Top
#3
Hallo,

erschreckend, wie schlecht mein Archiv in einigen Fällen ist.

Der folgende Code liest aus der genannten Webseite alle 998 Typen aus:

Code:
Sub iBitcoins()
'Verweis:   MS XML v6, MS htlm object
Dim XMLReq As New MSXML2.XMLHTTP60
Dim HTMLDoc As New MSHTML.HTMLDocument
Dim HTMLLinks As MSHTML.IHTMLElementCollection
Dim HTMLLink As MSHTML.IHTMLElement
Dim Hy As Hyperlink

iPath = ThisWorkbook.Path & "\"
iFile = "Bitcoins.txt"
iURL = iPath & iFile

XMLReq.Open "Get", iURL, False
XMLReq.send
HTMLDoc.body.innerHTML = XMLReq.responseText

For Each HTMLLink In HTMLDoc.getElementsByTagName("a")
       'Debug.Print HTMLLink.innerText, HTMLLink.outerText
Next HTMLLink
For Each HTMLLink In HTMLDoc.getElementsByClassName("currency-name-container")
       Debug.Print HTMLLink.innerText, HTMLLink.outerText
       r = r + 1
       Cells(r, 1) = HTMLLink.innerHTML
Next HTMLLink

End Sub

Zum Testen habe ich den Quell-Text der Webseite in eine txt-Datei kopiert, sollte aber auch mit der URL klappen.

Ein kleiner Schritt, aber mit diesen Namen kann man alle Unterseiten mit den historischen Daten zusammensetzen.

mfg
[-] Folgende(r) 1 Nutzer sagt Danke an Fennek für diesen Beitrag:
  • o_o_o
Antworten Top
#4
Servus o_o_o,

mein Ansatz ist ähnlich, wie der von Fennek. (Leider bekomme ich Fenneks Code bei mir nicht zum Laufen)

Mein Vorgehen:
  • Aufbau der URL aus Start- und Enddatum
  • Erzeugen eines IE Webbrowsers (Hintergrund)
  • Konvertieren und Übertragen der historischen Daten
Könnte meine anhängende Mappe für Dich interessant sein?

LG Gerd


Angehängte Dateien
.xlsm   Webbrowser.xlsm (Größe: 52,53 KB / Downloads: 8)
[-] Folgende(r) 1 Nutzer sagt Danke an Bamberg für diesen Beitrag:
  • o_o_o
Antworten Top
#5
Vielen Dank, eure Antworten sehen nach viel Mühe aus!

Habe mir die Codes eben schonmal durchgeschaut und mehr oder weniger nachvollzogen.
Da ich auf dem Gebiet VBA aber exakt null Ahnung habe (daher ist meine Tabelle bisher xlsx und nicht xlsm und viele Formeln sicher "unnötig" kompliziert) muss ich mir das morgen/übermorgen erstmal in Ruhe anschauen. Die Funktionsweise kann ich mit meinen Minimalkenntnissen (keine Untertreibung) in Java und Batch schon herauslesen, jedoch fehlt mir die Syntax komplett.

Bin momentan ziemlich platt durch Erkältung und habe mich daher heute im Wesentlichen darauf beschränkt meine Tabelle mal gründlich aufzuräumen, meine persönlichen Daten (Transaktionen, Wallets, Portfolio etc) und einige mittlerweile überflüssig gewordenen Blätter zu entfernen/auszulagern, ein paar Formeln sauberer zu machen und ein paar bedingte Formatierungen zusammenzufassen/zu entfernen.

So kann ich die Tage mal die komplette Tabelle, evtl. auch gleich mit einer ersten angepassten Version des VBA Codes (sofern ich da durchsteigen sollte) hochladen, das macht die ganze Geschichte vielleicht einfacher. 
Im momentanen Zustand mit 77 MB Dateigröße und abenteuerlichen Abfragezeiten  :26: wollte ich das nämlich niemandem zumuten...
Antworten Top
#6
Hallo o_o_o,

hast du mal versucht mit Parametern in Power-Query zu arbeiten?

Parameter kann man sich als Platzhalter vorstellen.

In Power-Query kannst du dir eine Abfrage erstellen und dann anschließend mit diesen Parameter die Abfrage ausführen.
Du brauchst dann nur noch eine Tabelle mit den verschiedenen Währungsnamen und gibst über weitere Abfragen das Start- und Enddatum dazu.

Mit einer Abfrage lassen sich somit alle Daten abrufen und stehen dir dann einem großen Datensatz zur Verfügung.
 
Hier habe ich dir mal ein Video dazu hochgeladen.

https://youtu.be/OxMSXQeMuNk

Viele Grüße 
Daniel
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste