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; Hi Zusammen, ich benötige ein Sript, welches mir aus Instagram folgende Daten rausholt und diese in ein Excelblatt schiebt. Dazu habe ich mir... Dieses Thema im Forum "Microsoft Excel Hilfe" wurde erstellt von PascalKrautino, 6. Mai 2020.

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


    Hi Zusammen,

    ich benötige ein Sript, welches mir aus Instagram folgende Daten rausholt und diese in ein Excelblatt schiebt.
    Dazu habe ich mir folgendes Skript zurecht geschustert.
    Es werden: Name, Postanzahl, Follower, Followings und die Bio
    in Excel geschoben. basierend auf dem ersten Begriff in A2 (Instausername)
    Dieser wird auch für die Webadresse verwendet.
    Das Skript funktioniert einwandfrei!
    Nur brauch ich noch Likes und Kommentaranzahl der letzten 10 Posts (Variable fürs einstellen der Postanzahl item(0)/(1) etc.

    Ich bekomme es einfach nicht hin und zum selber schreiben fehlt mir scheinbar das Know How.
    Alle Klassen die ich ansprechen möchte werden nicht ausgelesen.
    Eine zweite Anfrage über den ie klappt, liefert aber keine Ergebnisse. Wobei zwei Anfragen auch nicht die gewünschte Lösung wäre aber halt besser als nichts.
    Da hier nichts ausgegeben wird, gehe ich davon aus, dass ich die Klassen falsch anspreche. Kann mir irgendjemand helfen?

    ```
    Option Explicit
    Public Sub GetInfo()
    Dim IE As New InternetExplorer, lastRow As Long, arr(), groupResults()

    Const BASE_URL As String = "Instagram"

    With ThisWorkbook.Worksheets("Tabelle1")
    lastRow = .Cells(.Rows.Count, "A").End(xlUp).Row
    Select Case lastRow
    Case 1
    Exit Sub
    Case 2
    ReDim arr(1, 1): arr(1, 1) = .Range("A2").Value
    Case Else
    arr = .Range("A2:A" & lastRow).Value
    End Select

    ReDim groupResults(0 To lastRow - 2)
    Dim results(0 To 4), counter As Long, i As Long
    With IE
    .Visible = True

    For i = LBound(arr, 1) To UBound(arr, 1)
    If Len(BASE_URL & arr(i, 1)) > Len(BASE_URL) Then
    .navigate BASE_URL & arr(i, 1)

    While .Busy Or .readyState < 4: DoEvents: Wend
    'Name, Followers, Following,Posts,Biography
    Dim aNodeList As Object, ele As Object, t As Date
    Const MAX_WAIT_SEC As Long = 5

    t = Timer

    Do
    DoEvents
    On Error Resume Next
    Set ele = .document.querySelector(".rhpdm")
    On Error GoTo 0
    If Timer - t > MAX_WAIT_SEC Then Exit Do
    Loop While ele Is Nothing

    ' Application.Wait Now + TimeSerial(0, 0, 2)
    results(0) = ele.innerText
    Set aNodeList = .document.querySelectorAll(".g47SY")
    results(1) = aNodeList.Item(0).innerText
    results(2) = aNodeList.Item(1).innerText
    results(3) = aNodeList.Item(2).innerText
    results(4) = .document.querySelector(".rhpdm ~ span").innerText
    Set aNodeList = Nothing: Set ele = Nothing
    groupResults(counter) = results
    counter = counter + 1
    End If
    Next
    .Quit '

    :)
     
    PascalKrautino, 6. Mai 2020
    #1
  2. Kann es sein, dass Du gezielt auf mehreren Hochzeiten tanzen möchtest?

    Falls ja, dann wäre es doch nett die Gesellschaft darüber in Kenntnis zu setzen.
     
    Mase, 8. Mai 2020
    #2
  3. Moin *Smilie

    Tanzen ist eigentlich gar nicht meins. Ich habe den Post noch in einem anderen Excelforum laufen aber meine Erfahrung zeigt nicht so viel Resultate. Also existiert das noch jetzt in 2 Foren. Ich würde aber die Ergebnisse auch in beiden teilen. Von daher gewinnbringend für alle *Smilie Den Thread im normalen VBA Forum sollte ich schließen, weil es nicht die richtige Thematik war. Also habe ihn auf erledigt gesetzt und mit dem Verbesserungsvorschlag des netten Users hier nochmal neu gestellt. Wenn es falsch war, bin ich immer offen für neue Wege *wink.gif*

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

    Hallo Pascal,

    bitte geben noch den Link für das Crossposting an, damit andere dem folgen können, was du übrigens auch im anderen Forum machen solltest. Keiner macht gerne doppelte Arbeit.

    Ulrich
     
    knobbi38, 8. Mai 2020
    #4
  5. PascalKrautino, 8. Mai 2020
    #5
  6. Hallo Pascal,

    könntest du deinen Code richtig strukturieren und dann in Code-Tags packen, so ist das eine Zumutung. Danke!

    Ich kann aus deinen Informationen nicht erkennen, wieso du im QuerySelector nach ".g47SY" selektierts. Diese Klasse kommt in deinem Auschnitt nicht vor.

    Ulrich
     
    knobbi38, 8. Mai 2020
    #6
  7. Klar, wird gemacht.
    Ich habe es hier leider nicht hinbekommen, weil der dauernd einen Code draus zaubert.
    Habe jetzt alles in eine txt geschrieben.

    Das eine ist die Bio, g47SY ist zum Beispiel die Kopfzeile aus der Follower, Followings und Beiträge geholt werden.

    Die Postzeilen haben ich darin jetzt auch ausgeschrieben.

    Eigentlich sollte es ja das gleiche Muster sein aber.. hätte, sollte, könnte *rolleyes.gif*
     
    PascalKrautino, 8. Mai 2020
    #7
  8. VBA-Daten aus HTML extrahieren, Skript unvollständig

    Hallo Pascal,
    wenn das die Klassen sind, könntest du auf "-V_eO" selektieren und dann die ChildsNodes analysieren.

    Ulrich
     
    knobbi38, 8. Mai 2020
    #8
  9. Moin Ulrich

    results(0) = ele.innerText
    Set aNodeList = .document.querySelectorAll(".g47SY")
    results(1) = aNodeList.Item(0).innerText
    results(2) = aNodeList.Item(1).innerText
    results(3) = aNodeList.Item(2).innerText
    results(4) = .document.querySelector(".rhpdm ~ span").innerText
    Set aNodeList = .document.querySelectorAll(".-V_eO")
    results(1) = aNodeList.Item(0).innerText
    results(2) = aNodeList.Item(1).innerText
    results(3) = aNodeList.Item(2).innerText
    Set aNodeList = Nothing: Set ele = Nothing
    groupResults(counter) = results
    counter = counter + 1


    Also so klappts nicht. Aber ich bin mir sicher dass es mir hier auch in der Syntax an Verständnis fehlt. Irgendwie habe ich Probleme damit die Logik vom funktionierenden Code zu übertragen.
    Der sagt dauernd dass ein Objekt fehlt.

    Also selbst wenn ich -V_eO mit der bisher ausgewählten klasse austausche, sagt der mir dass ein Objekt erforderlich ist.
     
    PascalKrautino, 8. Mai 2020
    #9
  10. Hallo Pascal,

    bitte alle Crosspostigs angeben und gerne auch in den anderen Foren:
    https://stackoverflow.com/questions/...-other-classes

    Ich hätte Dir fast auf Stackoverflow geantwortet, hatte nur keine Zeit, mich jetzt direkt mit dem Problem zu beschäftigen.

    Viele Grüße,

    Zwenn
     
    Zwenn, 9. Mai 2020
    #10
  11. Hi Zwenn,

    wenn ich darüber eine hilfreiche Antwort erhalten hätte, hätte ich das selbstverständlich auch hier gepostet. Jetzt ist der Crosspost link ja hier.
    Danke Dir dafür *Smilie

    bisher gab es leider weder hier noch dort hilfreiche Antworten (oder überhaupt Antworten) deswegen habe ich bisher auf Zusatztraffic verzichtet.

    Ich teste seit gester morgen alles was für mich logisch ist, jedoch ohne Erfolg. Er sagt immer es fehlt ein Objekt. Ich denke es liegt an der unterschiedlichen classenstruktur für likes und comments...

    Grüße Pascal
     
    PascalKrautino, 9. Mai 2020
    #11
  12. Das hier:

    Set aNodeList = .document.querySelectorAll(".-V_eO.li")
    results(1) = aNodeList.Item(0).innerText
    results(2) = aNodeList.Item(1).innerText
    results(3) = aNodeList.Item(2).innerText

    Set aNodeList = Nothing:
    groupResults(counter) = results
    counter = counter + 1

    klappt zum Beispiel mit class="g47SY aber nicht mit der neuen Class für likes und comments..
     
    PascalKrautino, 9. Mai 2020
    #12
  13. VBA-Daten aus HTML extrahieren, Skript unvollständig

    Hallo Pascal,

    fast hätte ich dir nicht mehr geantwortet, weil ich kein Freund von X-Posts bin und schon gar nicht, wenn es dem OP nicht schnell genug geht.

    Nahezu alle Helfer bieten ihre Hilfe hier im Rahmen ihrer Freizeit an und sind nicht an irgendwelche Responsezeiten gebunden und haben gelegentlich auch andere Verpflichtungen. Wenn dir das nicht schnell genug geht oder dir nicht paßt, kannst du auch gerne woanders professionelle Untersützung in Anspruch nehmen.

    Wie dem auch sei, hatte ich schon ein passenden Beispiel fertig und möchte dieses den Mitlesern nicht vorenthalten.

    Die HTML-Daten liegen als lokale Datei vor und müssen natürlich erst in als HTMLDocument geladen werden:
    Code:
    Ulrich
     
    knobbi38, 9. Mai 2020
    #13
  14. Moin Zusammen,

    Hi Ulrich,

    ich weiß nicht, ob meine Antwort gelöscht wurde oder irgendwas nicht übertragen wurde. Eigentlich habe ich bereits eine Stunde später geantwortet. Ich versuch es jetzt einfach nochmal und hoffe, dass es diesmal ankommt. Ich war in der Zeit auf jeden Fall nicht untätig und habe getestet und getestet bin aber keinen Schritt weitergekommen.

    Danke Dir erstmal für die ganzen Bemühung. Grundsätzlich gebe ich Dir vollkommen recht und kann dem nichts mehr hinzufügen.. ich würde das an deiner Stelle wahrscheinlich auch echt nerven...

    zu deinem Code habe ich leider ein paar Verständnisprobleme befürchte ich. Ich verstehe nicht ganz wieso etwas lokal gespeichert ist und eingelesen werden muss. Der anfängliche Code funktioniert prima für Follower, Followings, Beträge und Bio. Hier wird direkt aus dem html der site gelesen und auch in Excel gespeichert. Die andere Vorgehensweise für die Like Anzahl und die Kommentare verwirrt mich. Ich denke hier liegt auch die Fehlermeldung begründet die ich bei Ausführung deines Codes erhalte. Denn mir ist nicht ganz klar welche lokale html Datei eingelesen werden soll.

    Ich könnte mir vorstellen, dass der anfängliche Code funktioniert, weil die Klasse für Follower und Followings zum beispiel einen Namen haben und einen Wert beinhalten, der ausgelesen wird. Wenn ich das ganze auf die Klasse für die Likeanzahl anwende fehlt ein Objekt, weil die Klasse angesprochen wird, der Wert dazu aber in einer untergeordneten Span Klasse ohne eigenen Namen steht. Vielleicht ist es ja möglich meinen Code "einfach" um die Auslesung der -V_eO Klasse zu erweitern und daraus den Inhalt aus dem untergeordneten Span tag auszugeben. Das bekomme ich allerdings nicht hin.

    Kommen wir so vielleicht weiter?
    Leider kann ich deinen Code nicht auf eine Ausgabe testen, da ja schon eine Fehlermeldung während der Ausführung auftaucht. Das ist für mich aber verständlich, da die Seite www.instagram.com/kvandahlen gar nicht angesprochen wird. Und auch diese gebe ich im ersten Code nicht ein sondern genommen wird nur www.instagram.com und als variable wird /username aus dem Excelblatt gelesen aus A2.

    Liebe Grüße Pascal
     
    PascalKrautino, 10. Mai 2020
    #14
  15. Hallo Pascal,

    deine Beispieldaten habe ich als lokale Datei gespeichert und für die weiteren Tests verwendet, weil ich keine Onlinedaten verwende. Damit diese Testdaten in ein HTMLDocument geladen werden, ist der erste Teil notwendig. Im normalen Betrieb liegen die Daten dann ebenso als HTMLDocument vor.
    Das eigentliche Parsen wird dann in der Funktion "ExtractData()" ab der Stelle vorgenommen, ab dem ein HTML-Text im Document geladen ist.
    Was die Auswertung betrifft, ist es egal, wie die Elemente selektiert werden. In diesem Beispiel habe ich die einfache und unkomplizierte Methode getElementsByClassName() genommen und anschließend den Wert aus dem ersten ChildElement ausgelesen, weil dort der relevante Wert steht.
    Der Code macht also genau das, was er sollte, also verstehe ich jetzt nicht so ganz, was du meinst. Mit pauschalen Aussagen, daß ein Fehler aufgetreten ist, kann keiner etwas anfangen. Deshalb immer den Fehlertext angeben und in welcher Zeile er auftritt.

    Du musst eigentlich nur den relevanten Teil des Beispiels in deinen Code etwas anpassen und in deinen Code an entsprechender Stelle mit einbauen.

    Anbei nochmal die Testdaten, welche ich als lokale Datei verwendet habe. Im übrigen solltest du während der Testphase den Quelltext der Webseite abspeichern und so testen, dann kann man das ganz einfach im Debugger kontrollieren, ob die Selektoren auch wirklich greifen und das Ergebnis liefern, was beachsichtigt war.

    Ulrich
     
    knobbi38, 10. Mai 2020
    #15
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