Thema Datum  Von Nutzer Rating
Antwort
23.03.2023 10:08:06 Sebastian
NotSolved
Blau Excel VBA Daten von einer Website holen - falsche Daten werden abgeholt
23.03.2023 14:30:16 Zwenn
NotSolved
24.03.2023 14:05:46 Gast20803
NotSolved

Ansicht des Beitrags:
Von:
Zwenn
Datum:
23.03.2023 14:30:16
Views:
168
Rating: Antwort:
  Ja
Thema:
Excel VBA Daten von einer Website holen - falsche Daten werden abgeholt

Hallo Sebastian,

Du kommst so nicht an den gewünschten Wert, weil er zwar im responseText der xhr Antwort vom Web Server steht, aber nicht mehr im HTML Code, wenn der responseText an das HTML Objekt im Makro übergeben wurde. Ich gebe unten ein Makro an, mit dem Du das selber nachsehen kannst. Es werden zwei HTML Dateien gespeichert, die Du einfach im Browser öffnen kannst. Du musst nur den Laufwerksbuchstaben in beiden Pfadangaben ändern, falls Du kein Laufwerk D: hast. In der ersten Datei findest Du die Werte und sie werden auch im Browser angezeigt. In der zweiten Datei findest Du zwar die HTML Struktur zu den Tabellen, aber es stehen keine Werte drin.

Warum ist das so?

Aus meiner Erfahrung heraus mutmaße ich, das Parsen des HTML Quelltextes findet in einem Browser wesentlich toleranter statt, als im HTML Objekt, welches Du mit der Zeile Dim html As New HTMLDocument erzeugst und ich mit der Zeile Set doc = CreateObject("htmlFile"). Bei näherer Betrachtung weist der HTML Code, wie er vom Web Server über xhr über das Makro ausgeliefert wird nämlich Fehler im HTML Quellcode auf. Im Browser wird immer nur ein Tab zur Zeit angezeigt, im erhaltenen Dokument steht aber alles zusammen drin. Es finden sich aber auf jedem Tab mehrfache gleiche IDs, die ein HTML Element eideutig kennzeichnen. Das ist nach HTML Standard verboten. Jede ID darf nur ein einziges Mal in einem Dokument verwendet werden. Ich nehme nun an, beim Parsen zum DOM Baum für das HTML Objekt im Makro, werden diese Fehler nicht toleriert und der entsprechende Quelltext wird einfach weggelassen.

Willst Du also unbedingt die angegebene Seite verwenden, um an den Umrechnungswert zu kommen, kannst Du das entweder machen, wenn Du Dich über das Zerstückeln des responseTextes der xhr Antwort via String Operationen durchwühlst (mir ist da auf die Schnelle keine kurze Lösung eingefallen) oder Du verwendest SeleniumBasic und automatisierst den Chrome- oder Edge-Browser. Im einfachsten Fall verwendest Du eine andere Seite, die mit xhr funktioniert.

Hier das Makro zum Erzeugen der unterschiedlichen HTML Dateien. Witzigerweise belegt die Datei mit den fehlenden Tabellen etwas mehr Speicherplatz. Das finde ich insofern interessant, weil mir das noch nie aufgefallen ist.

Sub getRates7SpeicherTest()
  
  Const url As String = "https://www.bakai.kg/en/"
  Dim doc As Object
  
  Set doc = CreateObject("htmlFile")
  
  With CreateObject("MSXML2.XMLHTTP.6.0")
    .Open "GET", url, False
    .send
    doc.body.innerHTML = .responseText
    
    'Speichern des responseText als HTML Datei
    Close
    Open "D:\BakaiVorKonv.html" For Output As #1
    Print #1, .responseText
    Close
    
    'Speichern der HTML Datei nach konvertierung des responseText ins htmlFile Objekt
    Close
    Open "D:\BakaiNachKonv.html" For Output As #1
    Print #1, doc.getElementsByTagName("html")(0).outerHTML
    Close
  End With
End Sub

Hier noch ein Makro, mit dem Du im Direktfenster der VBA IDE (Strg+G) ausgeben lassen kannst, was im HTML Objekt von der gewünschten Tabellenstruktur übrig geblieben ist. Nur der Text, der nach den Währungskursen zur Erklärung angeführt wird, bleibt als Wert erhalten, der im Browser ausgegeben wird. Ansonsten bleibt Du nur die leere Tabellenstruktur übrig.

Sub getRates7()

  Const url As String = "https://www.bakai.kg/en/"
  Dim doc As Object
  Dim nodeNonCashTab As Object

  Set doc = CreateObject("htmlFile")

  With CreateObject("MSXML2.XMLHTTP.6.0")
    .Open "GET", url, False
    .send
    doc.body.innerHTML = .responseText

    Set nodeNonCashTab = doc.getElementByID("non_cash_tab")
    Debug.Print nodeNonCashTab.outerHTML
  End With
End Sub
 

Die ausgegebene Zeile kannst Du hier https://beautifier.io/ reinwerfen. Dann rechts Beautify HTML im Dropdown auswählen und auf Beautify Code darunter klicken. Dann wird der HTML Code so formatiert, dass Du auf einen Blick sehen kannst, was los ist.

Viele Grüße,

Zwenn


Ihre Antwort
  • Bitte beschreiben Sie Ihr Problem möglichst ausführlich. (Wichtige Info z.B.: Office Version, Betriebssystem, Wo genau kommen Sie nicht weiter)
  • Bitte helfen Sie ebenfalls wenn Ihnen geholfen werden konnte und markieren Sie Ihre Anfrage als erledigt (Klick auf Häckchen)
  • Bei Crossposting, entsprechende Links auf andere Forenbeiträge beifügen / nachtragen
  • Codeschnipsel am besten über den Code-Button im Text-Editor einfügen
  • Die Angabe der Emailadresse ist freiwillig und wird nur verwendet, um Sie bei Antworten auf Ihren Beitrag zu benachrichtigen
Thema: Name: Email:



  • Bitte beschreiben Sie Ihr Problem möglichst ausführlich. (Wichtige Info z.B.: Office Version, Betriebssystem, Wo genau kommen Sie nicht weiter)
  • Bitte helfen Sie ebenfalls wenn Ihnen geholfen werden konnte und markieren Sie Ihre Anfrage als erledigt (Klick auf Häckchen)
  • Bei Crossposting, entsprechende Links auf andere Forenbeiträge beifügen / nachtragen
  • Codeschnipsel am besten über den Code-Button im Text-Editor einfügen
  • Die Angabe der Emailadresse ist freiwillig und wird nur verwendet, um Sie bei Antworten auf Ihren Beitrag zu benachrichtigen

Thema Datum  Von Nutzer Rating
Antwort
23.03.2023 10:08:06 Sebastian
NotSolved
Blau Excel VBA Daten von einer Website holen - falsche Daten werden abgeholt
23.03.2023 14:30:16 Zwenn
NotSolved
24.03.2023 14:05:46 Gast20803
NotSolved