Office: VBA-Daten aus HTML extrahieren, Skript unvollständig

Helfe beim Thema VBA-Daten aus HTML extrahieren, Skript unvollständig in Microsoft Excel Hilfe um das Problem gemeinsam zu lösen; Moin Ulrich, ich glaube dann haben wir das Problem gefunden und nach meiner "Nachtschicht" bin ich mir nicht mehr sicher, ob es überhaupt auf diesem... Dieses Thema im Forum "Microsoft Excel Hilfe" wurde erstellt von PascalKrautino, 6. Mai 2020.

  1. VBA-Daten aus HTML extrahieren, Skript unvollständig


    Moin Ulrich,

    ich glaube dann haben wir das Problem gefunden und nach meiner "Nachtschicht" bin ich mir nicht mehr sicher, ob es überhaupt auf diesem Weg möglich ist. Wenn ich das richtig sehe, dürfte das Problem an der anzusprechenden class -V_eO. Ich denke diese wird innerhalb der Abfrage im web nicht gefunden. Wenn du motiviert bist, kannst du ja eventell mal sehen, ob dein Code auch im Netz funktioniert. Die Class bekomme ich egal mit welchem Skript (auch den Allereinfachsten, nur zum Testen) nicht angesprochen.
    Und wenn ich das richtig sehe, schmeißt er mit leider mit deinem auch nichts aus.

    Der angesprochene Fehler lag im ersten Skript und kam dadurch zu Stande, dass ich nicht wusste welche Datei ich einlesen soll. Das haben wir ja jetzt geklärt.

    LG Pascal
     
    PascalKrautino, 10. Mai 2020
    #16
  2. Hallo zusammen,

    Deinen Umgang mit Crosspostings solltest Du noch einmal überdenken Pascal. Ich mache das jetzt mal ganz anschaulich und Antworte hier, weil ich weiß, dass Du das gleiche Thema auch in diesem Forum gepostet hast. Ansonsten hätte ich auf Stackoverflow geantwortet. Ich antworte allerdings vor allem, damit Ulrich sich nicht weiter den Kopf zerbricht.

    Ich zeige jetzt, warum die bisherigen Bemühungen bei Zugriff auf Instagram direkt nicht funktionieren. Damit zeige ich auch einen Lösungsweg auf, aber ich habe nicht getestet, ob das wirklich funktioniert, weil mir zum Programmieren gerade die Zeit fehlt. Allerdings bin ich mir sicher, wenn nicht so, dann gar nicht.

    Zum Thema
    Die Informationen zu Likes und Kommentaren erscheinen auf einem Bild, sobald man mit der Maus drüber fährt. Genau dann, wird auch erst der HTML-Code generiert, an den man ran muss, um diese Informationen auszulesen. Verlässt der Mauszeiger ein Bild wieder, wird auch der HTML-Code wieder aus dem Dokument entfernt. Mit anderen Worten, man muss sinngemäß dafür sorgen, "dass der Mauszeiger über einem Bild steht".

    Dafür kann man das gleiche verwenden, was Instagram auch verwendet:
    Ein HTML-Event. Man muss nur rausfinden welches auf welchem HTML-Tag und man muss es auslösen. Dann wird der gewünschte Code generiert und kann abgegriffen werden.

    Kurz zum HTML-Code
    Klickt man sich im DOM-Baum des Code-Inspektors durch (F12 im FireFox), kommt man automatisch zum HTML-Codeabschnitt, für genau ein Posting:
    Code:
    Fährt man mit der Maus über das entsprechende Bild, sieht man im Code Inspektor, wie weiterer Code in genau dem Element auftaucht. Genau den wollen wir haben.

    Der vollständige HTML-Code für ein Bild sieht dann so aus:
    Code:
    Zu HTML-Events
    Wie wir sehen, sind weitere Zeilen im a-Tag hinzu gekommen. In denen steht drin, was wir haben wollen. Da die Zeilen im a-Tag generiert wurden, ist naheliegend, dass genau dieses a-Tag auch das auszulösende HTML-Event enthält und genau so ist es auch.


    VBA-Daten aus HTML extrahieren, Skript unvollständig instagramhtmlevents7ijwo.jpg


    Wie man sieht, wird das JS Framework React verwendet. Das auszulösende Event muss logischerweise onMouseEnter sein. Das ist der Teil, von dem ich nicht weiß, ob er funktioniert, weil ich es nicht ausprobiert habe. Ich weiß allerdings, dass das JS Framework jQuery mich regelmäßig nervt.

    Man kann ein HTML-Event mit folgender Prozedur auslösen. (FireEvent funktioniert auf modernen Seiten in der Regel nicht mehr.) Sie basiert auf einer Idee von Anton, den ich vor allem aus dem Herber Forum kenne:
    Code:
    Um das gewünschte Event auszulösen, verwendet man sinngemäß folgende Zeile:
    Code:
    Um auszuprobieren, ob das geht, würde ich erstmal versuchen genau ein Bild anzusprechen. Es kann auch sein, dass weitere Events ausgelöst werden müssen. Z.B. onFocus. Dann kommt es auch auf die Reihenfolge des Auslösens an.

    Ich würde hier zunächst onMouseEnter auslösen, dann den HTML-Code abgreifen und nur prüfen, ob der vollständig ist. Das kann man entweder im Direktfenster mit Debug.Print machen oder über outerHTML in eine Zelle ausgeben lassen. Je nach Geschmack.

    Viele Grüße,

    Zwenn
     
    Zwenn, 11. Mai 2020
    #17
  3. \@Zwenn:

    Hallo,

    Das ist nett von dir. Danke für deine Unterstützung und auch für die interessanten Hintergrundinformationen. *cool.gif* *top

    So weit war ich jedoch noch gar nicht. Mir ging es erstmal nur darum, aufzuzeigen, wie der Wert aus dem Beispiel (statischer HTML Code) extrahiert werden kann.
    Das Web Scraping bei dynamischen Seiten noch andere Hürden bereithalten kann, ist sicherlich klar, vor allem, wenn die Betreiber der Webseiten das nicht gerne sehen und Gegenmaßnahmen treffen. Ist ja auch immer ein rechtliches Problem.

    Aber nach dem ungeduldigem Crossposting habe ich keine Veranlassung mehr gesehen, noch tiefer einzusteigen und habe nur der Vollständigkeit halber die Testdaten hier eingestellt und kurz angerissen, was der Code macht.

    Grüße Ulrich
     
    knobbi38, 11. Mai 2020
    #18
  4. VBA-Daten aus HTML extrahieren, Skript unvollständig

    Hallo @Ulrich, Hallo Zwenn,

    Danke Zwenn für deinen Beitrag und die Informationen! Die Logik verstehe ich und ich versuche mich mal da rein zu fuchsen. Im Grunde sind die Daten für jeden (ob eingeloggt oder nicht) frei zugänglich und auch im site Code zu finden. Deswegen dachte ich, dass es einfacher zugänglich ist aber mit deiner Analyse hast du definitiv recht und jetzt weiß ich ( ihr auch ) wo der Fehler liegt. Leider habe ich damit null Erfahrung. Trotzdem weiß ich ja jetzt wonach ich weiter googlen kann *wink.gif* Auf jeden Fall habe ich in der kurzen Zeit jetzt schon mehr mitgenommen als in allen Schulungen bei IT.NRW zusammen..

    Kurzer Einschub: Ich habe mittlerweile verstanden, dass es ein Fehler war mehrfach zu posten. Ich kann sowohl den Ärger darüber als auch "da habe ich jetzt auch keinen bock mehr dem zu helfen" verstehen. ich möchte mich dafür auch nochmal an dieser Stelle entschuldigen. Auch habe ich verstanden, dass mittlerweile nicht mehr hauptsächlich mit dem Willen "mir" zu helfen, sondern als Support für die anderen Helfer geantwortet wird. Definitiv wird mir dieses Foreneintrag auch bei meinem nächsten in Erinnerung bleiben.
    Auch mit der Möglichkeit hier von euch keinen Support, aufgrund meines Fehlverhaltens, mehr zu bekommen, muss ich noch folgendes los werden. Ich würde mich freuen, wenn wir gemeinsam eine Lösung erarbeiten und ich versuche auch im Rahmen meiner Kenntnisse zu helfen wo es geht. So habe nicht nur ich, sondern vielleicht auch andere noch einen Mehrwert davon (wenn nicht gewünscht, habe ich das auch zu akzeptieren) Aber dann mein Vorschlag: das "Crossposting" Thema auch abzuhaken, denn ich glaube mittlerweile hat jeder mehr Zeit mit dem Antworten auf dieses Thema verbracht, als die Antworten nochmal in jeden Foreneintrag von mir zu schreiben.
    Auf "weitermachen" würde ich mich freuen, wenn nicht gewünscht danke ich aber auch jetzt schonmal euch beiden für eure Unterstützung.

    Bleib gesund!

    Liebe Grüße Pascal
     
    PascalKrautino, 11. Mai 2020
    #19
  5. Hallo zusammen,

    @Ulrich
    Das Thema Recht hatten wir beide hier schon einmal am Wickel *Smilie Insgesamt bin ich da ziemlich entspannt unterwegs. In diesem Fall sehe ich da aber keine Probleme, weil Pascal offensichtlich auf sein eigenes Instagram Profil zugreift.

    Statische Seiten gibt es immer seltener. Deshalb verwende ich aus Excel heraus in der Regel den IE. MSXML ist ansich schön, weil es wesentlich schneller ist. Aber es hat einige Nachteile. Man kann keine dynamischen Inhalte verarbeiten und man kann sowas wie hasAttribute oder Elementzugriffe über CSS nicht ausführen, weil die Methoden für MSXML nicht implementiert sind. Wozu auch, XML ist ja wohlgeformt. HTML aber nicht. Mitunter ziemlich nervig.

    @Pascal
    Ich war jetzt neugierig. Es funktioniert genau so, wie ich es beschrieben habe. Ich habe den IE auf sichtbar gesetzt und schließe ihn im Beispielcode auch nicht. Du kannst also einfach mal runterscrollen, um das erste Bild sichtbar zu machen. Wie Du sehen kannst, wurde das onMouseEnter-Event ausgeführt. Der Rest ergibt sich aus den Kommentaren. Du solltest Deinen Code entsprechend anpassen können.
    Code:
    Code:
    Noch ein Hinweis. Ich habe mir Deinen Code aus dem Ausgangsposting jetzt mal angesehen. Du solltest Dir angewöhnen, Code übersichtlicher zu gestalten. Ganz 0815 gehören Konstanten immer ganz nach oben, darunter die Variablendeklarationen, dann alle notwendigen Initialisierungen und dann der eigentliche Code. Deinen Quelltext kann man quasi kaum lesen.

    So wie von mir geschrieben, sieht Dein Quellcode etwa so aus (zur Qualität schreibe ich nix, habe nur ein paar Zeilen sortiert):
    Code:
     
    Zwenn, 11. Mai 2020
    #20
  6. \@Zwenn:
    Zum Thema Recht:
    es ging allg. um Web Scraping an sich. Was in diesem kokreten Fall rechtlich gilt, müßte man ggf. in den Bedingungen von Instagram nachlesen.

    MSXML:
    ist in meinem Beispiel nur ein Hilfsmittel zum laden der statischen HTML-Seite gewesen. Für das Parsen selber ist dann MSHTML verwendet worden.

    @Pascal:
    entsprechend deinem Vorschlag spielt das Thema "Crossposting" nach deinem Einsehen hier, auch für mich keine Rolle mehr. In dem Sinne ...

    Gruß Ulrich
     
    knobbi38, 11. Mai 2020
    #21
  7. \@Zwenn

    Es klappt!!! Die Ausgabe funktioniert! Das ist ja wohl mal richtig stark!
    Und auch an der Stelle ein heftiges Danke für deine Ausformulierung! Genau so brauche ich das momentan perfekt! Als ich das heute morgen gelesen habe, was das besser als der erste Kaffee *wink.gif* Und auch dafür, dass Du meinen Code umgebaut hast. Jetzt macht er für mich auch etwas Sinn... Ich war vorher einfach nur froh, dass er irgendwie funktioniert. Das war der allererste, den ich überhaupt "gebaut" bzw. zusammengeschustert habe.

    Ich gucke mal als nächsten Schritt, dass ich alle Bilder bekomme. Ich denke dafür kann man den Vorgang nacheinander für jedes Bild wiederholen?!
    Für mich würde das dann so oder so ähnlich aussehen:

    Code:
    Von der Logik her, hat er ja alle Bilder ausgelesen (ich teste das auch mit erneutem auslesen) dann geht er aufs erste a-tag, um das anzusprechen. Dann das Event auslösen, um den Code zu generieren, erneutes auslesen und ab da ist der Code wieder identisch, weil ich ja eigentlich nur das zweite a-tag brauche und darin befindet sich wieder nur ein li.

    Am Ende alles auf Nothing setzen und dann an der nächsten Stelle direkt neu vergeben für das Nächste Bild.

    Klappt noch nicht so ganz aber von der Logik her? Wenn ich komplett daneben liege, gebt mir bitte kurz bescheid. Bis dahin bastel ich hier rum, habe ja jetzt dank Zwenn erstmal genug Stoff zum Üben *wink.gif*

    LG Pascal
     
    PascalKrautino, 11. Mai 2020
    #22
  8. VBA-Daten aus HTML extrahieren, Skript unvollständig

    Ich weiß nicht, ob euch das weiterhilft (hilft / interessant ist), aber hier mal der Code mit Ausgabe, kombiniert mit dem ersten für Follower, Followings, Beiträge, Bio mit dem Code von Zwenn für likes, Comments Post1

    Code:
     
    PascalKrautino, 11. Mai 2020
    #23
Thema:

VBA-Daten aus HTML extrahieren, Skript unvollständig

Die Seite wird geladen...
  1. VBA-Daten aus HTML extrahieren, Skript unvollständig - Similar Threads - VBA Daten HTML

  2. VBA Makro Daten kopieren

    in Microsoft Excel Hilfe
    VBA Makro Daten kopieren: Hi zusammen, ich bräuchte eure Hilfe denn aktuell bin ich am verzweifeln: Ich brauche ein Makro für das deutsche Excel. Es gibt 2 verschiedene Arbeitsmappen mit jeweils einem aktiven...
  3. VBA Diagramm-Daten aktualisieren

    in Microsoft Excel Hilfe
    VBA Diagramm-Daten aktualisieren: Hallo, ich habe folgendes Problem. Ich habe eine Tabelle, die sich jeden Tag um eine Zeile automatisch erweitern soll mit dem aktuellen Datum und aktuellen Werten. Das funktioniert auch soweit....
  4. [Excel, VBA] Daten aus Excel-Bereich in Word Tabelle einfügen

    in Microsoft Excel Hilfe
    [Excel, VBA] Daten aus Excel-Bereich in Word Tabelle einfügen: Hallo zusammen, ich stehe im Augenblick vor folgendem Problem. Habe in einem Excelsheet einen Bereich (5 Spalten, 2 Zeilen) mit Daten, dessen Inhalt ich gerne in ein Word-Dokument in eine...
  5. [VBA] Daten auf Grund von Variable auf anderes Tabellenblatt kopieren

    in Microsoft Excel Hilfe
    [VBA] Daten auf Grund von Variable auf anderes Tabellenblatt kopieren: Hallo zusammen, vorab großes Lob an das Forum, ich konnte schon einige Dinge sinnvoll für mich nutzen, meine VBA Skills beschränken sich sonst eher auf das Anpassen von aufgezeichneten Makros...
  6. Excel VBA / Daten kopieren wenn Liste auf x steht.

    in Microsoft Excel Hilfe
    Excel VBA / Daten kopieren wenn Liste auf x steht.: Hallo zusammen, ich habe ein PowerQuery, welches ich ca. 2 mal im Monat aktualisiere. Aus dem Query möchte ich gerne die Daten per Makro in ein anderes Arbeitsblatt kopieren. Dabei möchte ich...
  7. CSV-Daten per Makro einbinden - manuelle Wahl der Quelldatei

    in Microsoft Excel Hilfe
    CSV-Daten per Makro einbinden - manuelle Wahl der Quelldatei: Liebe Excel-Gemeinde, ich möchte CSV-Daten in eine bereits geöffnete Arbeitsmappe laden. Sie sollen nach jedem Laden eines Datensatzes auf einem anderen Arbeitsblatt dargestellt werden, das den...
  8. Excel VBA Daten aus HTML Website laden ohne CreateObject("InternetExplorer.Applicatio

    in Microsoft Excel Hilfe
    Excel VBA Daten aus HTML Website laden ohne CreateObject("InternetExplorer.Applicatio: Hi, versuche Daten aus einer HTML Website zu laden. Leider kann ich diese nicht im Internet Explorer laden. Nun such ich ein Makro was die Daten ohne Internet Explorer laden kann....
  1. Diese Seite verwendet Cookies, um Inhalte zu personalisieren, diese deiner Erfahrung anzupassen und dich nach der Registrierung angemeldet zu halten.
    Auf dieser Website werden Cookies für die Zugriffsanalyse und Anzeigenmessung verwendet.
    Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden