Live-Forum - Die aktuellen Beiträge
Datum
Titel
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
1860to1864
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Daten abrufen aus dem Web
01.01.2022 22:12:45
Elquakamole
Guten Abend,
und ein gesundes neues Jahr!
Ich möchte gern aus folgender Website https://www.dresden.gold/goldbarren-20-gramm-combibar-valcambi.html
den Kaufpreis (aktuell 1.106,76 €) in meine Excel kopiert und per Knopfdruck aktualisiert haben.
Mithilfe von "Daten abrufen aus dem Web" werden zwar ein paar mögliche Tabellen angezeigt, aber leider ohne den gewünschten Betrag.
Hat hier jemand eine Lösung, wie ich den Wert erhalte?
VG Elquakamole

10
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Daten abrufen aus dem Web
01.01.2022 23:01:27
volti
Hallo,
bei Nutzung des IEs hier eine Idee....
Code:

[Cc]

Private Sub GetWebWert() With CreateObject("InternetExplorer.Application") ' .Visible = True .Navigate "https://www.dresden.gold/goldbarren-20-gramm-combibar-valcambi.html " While Not .readyState = 4: DoEvents: Wend ' Warten bis Seite geladen ist On Error Resume Next ' Wert ' MsgBox .Document.getElementByID("product-price-14").getElementsByTagName("span")(0).outertext ' Oder Text MsgBox Split(.Document.getElementByID("product-price-14").outertext, "€")(0) & "€" .Quit ' IE schließen End With End Sub

_________________________
viele Grüße aus Freigericht 😊
Karl-Heinz

Anzeige
AW: Daten abrufen aus dem Web
02.01.2022 18:21:45
Elquakamole
Hallo,
super Sache, wieder was gelernt. Vielen Dank!
Nun möchte ich noch auf derselben Webseite den Ankaufspreis (aktuell 1.032,22€) haben.
Dazu habe ich im Firefox mit F12 die Entwicklerwerkzeuge geöffnet und geschaut, welche ID diese Zahl hat.
Leider habe ich keine Erfahrung HTML / Web API Referenz (?; Sorry, ich weiß noch nicht mal, wie das genau heißt).
Jedenfalls gibt es dort anscheinend keine ID, sodass der Befehl .Document.getElementByID nicht funktioniert. Korrekt?
Ich habe noch den Befehl .document.getElementsByClassName("price") entdeckt. Ist das ein guter Weg um zur Lösung zu kommen?
Ist gerade viel trial and error bei meinem Vorgehen...
Habt ihr Ideen, wie ich an den Ankaufspreis komme?
VG Elquakamole
Anzeige
AW: Daten abrufen aus dem Web
02.01.2022 18:44:25
volti
Hallo,
hier eine Idee....
Eine ID gibt es nur einmal, da sie eindeutig ist.
Bei Classname oder Tag-Name kann es mehrere Elemente geben, die man in einer Schleife abholen könnte.
In meinem Code habe ich den entsprechenden Index fest eingesetzt, nach dem ich ihn durch einen Blick auf den Web-Code ermittelt hatte.
Code:

[Cc]

Private Sub GetWebWert() With CreateObject("InternetExplorer.Application") ' .Visible = True .Navigate "https://www.dresden.gold/goldbarren-20-gramm-combibar-valcambi.html " While Not .readyState = 4: DoEvents: Wend ' Warten bis Seite geladen ist On Error Resume Next Debug.Print .Document.getElementsByClassname("price")(2).outertext Debug.Print Trim$(Split(.Document.getElementByID("product-price-14") _ .outertext, "€")(0) & "€") .Quit ' IE schließen End With End Sub

_________________________
viele Grüße aus Freigericht 😊
Karl-Heinz

Anzeige
AW: Daten abrufen aus dem Web
02.01.2022 20:31:38
Zwenn
Hallo Elquakamole und Karl-Heinz
Hier ist Deine Lösung umgeschrieben Karl-Heinz, damit der IE wegfallen kann. Die ganze Fehlerprüfung habe ich mir auch gespart und es weiterhin einfach gehalten. Ich lasse die ausgelesenen Werte als "echte" Zahlen ausgeben.

Private Sub GetWebWert()
Dim doc As Object
Dim url As String
url = "https://www.dresden.gold/goldbarren-20-gramm-combibar-valcambi.html"
Set doc = CreateObject("htmlFile")
With CreateObject("MSXML2.XMLHTTP.6.0")
.Open "GET", url, False
.Send
doc.body.innerHTML = .responseText
Debug.Print Trim(Split(doc.getElementsByClassname("price")(2).innerText, "€")(0)) * 1
Debug.Print Trim(Split(doc.getElementByID("product-price-14").innerText, "€")(0)) * 1
End With
End Sub
Viele Grüße,
Zwenn
Anzeige
AW: Daten abrufen aus dem Web
02.01.2022 23:07:39
Elquakamole
Guten Abend,
beide Lösungen gefallen mir gut. Ich probiere mal noch weiter herum.
Nutzt ihr auch die Entwicklerwerkzeuge eures Browsers um die HTML-Struktur zu erkennen oder nutzt ihr was anderes/besseres?
Habt ihr ein Schlagwort für mich nach dem ich googlen könnte, um besser in die Thematik einsteigen zu können?
VG Elquakamole
AW: Daten abrufen aus dem Web
02.01.2022 23:47:21
volti
Hallo,
ich bin noch immer Oldscool unterwegs und mache einfach RechtsClick - Text anzeigen. Wenn's umfangreicher wird, kopiere ich den Code in den Editor.
Ich kenne mich allerdings mit den HTML-Tags etwas aus und schreibe auch meinen HTML-Text für meine Bedürfnisse ohne Tools per Hand.
Gruß
Karl-Heinz
Anzeige
AW: Daten abrufen aus dem Web
03.01.2022 23:25:12
Elquakamole
Nabend!
Ich habe mich ein bisschen mehr ins Thema eingefuchst.
Dieses Mal habe ich aber wieder Fragezeichen bei einem neuen Beispiel:
Auf dieser Seite https://wertpapiere.ing.de/Investieren/Fonds/LU1781541179 wird mithilfe der Entwicklerkonsole beim Befehl document.getElementsByClassName("instrument-price")[0].innerText der Wert ausgegeben, der von mir gewollt wird. (Derzeit 14,5435 EUR)
Möchte ich das Ganze per VBA umsetzen mittels Befehl Debug.Print doc.getElementsByClassname("instrument-price")(0).innertext kommt eine Fehlermeldung.
Könnt ihr mir nochmals weiterhelfen?
Danke und VG,
Elquakamole
Anzeige
AW: Daten abrufen aus dem Web
04.01.2022 00:35:15
volti
Hallo,
bei meiner Version mit dem IE kommt (bei mir) kein Fehler, sondern der gewünschte Wert....
Debug.Print .Document.getElementsByClassname("instrument-price")(0).innertext
Bei Zwenns Version wird auch ein Objekt gefunden, die Ausgabe schlägt jedoch fehl. Vielleicht ein Null-Objekt.
Set oObj = doc.getElementsByClassname("instrument-price")
Vielleicht weiß Zwenn was dazu...
Gruß Karl-Heinz
AW: Daten abrufen aus dem Web
04.01.2022 17:21:06
Zwenn
Hallo zusammen
Also der Oberbegriff für die Recherche ist Web Scraping. Ein HTML-Dokument in Reinform ist nach dem DOM organisiert. Das steht für *Document Object Model*. Dazu zählen unter anderem die get()-Methoden, getElementByID(), getElementsByClassName(), getElementsByTagName() und , getElementsByName(). Auf dem DOM arbeitet man immer, wenn man es direkt mit einem HTML-Dokument zu tun hat. Das ist sowohl durch den Zugriff über die COM-Schnittstelle von VBA aus auf den IE der Fall, wie auch, wenn man xhr verwendet, und die Antwort (den responseText) in ein htmlFile Objekt schreibt.
Den IE sollte man nicht mehr verwenden, weil der seit einiger aktiv ausgemustert wird. Der soll also mit aller Macht weg. Da gehe ich jetzt nicht weiter drauf ein, aber vermeide ihn, wo möglich. Wenn der Zugriff nicht über xhr gelingt, kann man über SeleniumBasic, Chrome und dem Chrome WebDriver arbeiten. Da gibt es ähnliche Befehle, wie für das DOM, sie funktionieren nur etwas anders.
Mit xhr können nur statische Dokumente erreicht werden. Da gibt es keine dynamischen Inhalte oder weiterleitungen in irgend einer Form, weil JS nicht ausgeführt wird. Also alles, was der Browser ggf. automatisch übernimmt, um eine Seite richtig anzuzeigen, geht damit nicht. Das führt dann zu Problemen beim annehmen von Cookies, sich einloggen, usw. Trotzdem ist es ein mächtiges Werkzeug und es ist wesentlich schneller als die Arbeit mit dem Umweg über einen Browser.
Mit xhr kann man wie gesagt auf Dokumente auf einem WebServer zugreifen. Da Webseiten aus vielen Dokumenten bestehen und diese oft getrennt mit Grundgerüst und Daten arbeiten (und weiteren wie Bildern, Fonts, usw natürlich), kann man unter Umständen die reinen Daten aus dem Netzwerkverkehr fischen. Diese liegen oft als JSON vor. Auch dafür gibt es möglichkeiten der Verarbeitung, die Excel zwar nicht mitbringt, die aber eingebunden werden können.
Ich habe im Moment keine Zeit das alles weiter auszuführen oder Links zusammenzustellen. Aber dieses JSON dürfte den Wert enthalten, den Du mit Deinem zweiten Beispiel abgreifen möchtest. Das geht über ein JSON viel einfacher, weil es ein reines Datenaustauschformat ist, wie CSV oder XML.
https://component-api.wertpapiere.ing.de/api/v1/components/instrumentheader/LU1781541179
Der Link ruft das JSON auch im Browser auf, da es ein GET-Request ist. Post-Requests funktionieren auch, nur etwas aufwändiger und nicht direkt im Browser.
Ich hoffe das reicht erstmal als Einstieg ins Thema.
Viele Grüße,
Zwenn
Anzeige

198 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige