Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

html auslesen

Forumthread: html auslesen

html auslesen
21.07.2024 15:59:48
Fred
Hallo Excel Profis,
ich habe eine Frage, bzw. bitte um Erklärung des folgenden Makros:
Sub seite1()

Dim doc As New HTMLDocument
Dim games As IHTMLElementCollection
Dim game As IHTMLElement6
Dim ws As Worksheet
Dim endRow As Long

Set ws = ThisWorkbook.Sheets("Prediction")
endRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row

Let r = 0
Let c = 0
Call Tabelle1.Range("A5:P" & endRow).ClearContents
With New WinHttp.WinHttpRequest
Call .Open("GET", "https://primatips.com/facts/" & Tabelle1.Range("A1") & "")
Call .send
Set doc = New HTMLDocument
Let doc.body.innerHTML = .responseText
Set games = doc.getElementById("main").getElementsByTagName("a")
ReDim a(1 To games.Length, 1 To MAXC)
For Each game In games
Let c = 0
Let r = r + 1
Call WriteColums(game.getElementsByClassName("ht1"))
Call WriteColums(game.getElementsByClassName("at1"))
Call WriteColums(game.getElementsByClassName("res"))
Call WriteColums(game.getElementsByClassName("status"))
Call WriteColums(game.getElementsByClassName("xxx"))
Call WriteColums(game.getElementsByClassName("xxx"))
Call WriteColums(game.getElementsByClassName("xxx"))
Call WriteColums(game.getElementsByClassName("xxx"))
Next
Let Tabelle1.Range(Cells(5, 1), Cells(4 + r, UBound(a(), 2))) = a()
End With
End Sub

Private Sub WriteInnerTextToCell(p As IHTMLElement)

Let c = c + 1
If c = UBound(a(), 2) Then Let a(r, c) = p.innerText
End Sub

Private Sub WriteColums(p As IHTMLElementCollection)

Dim e As IHTMLElement
For Each e In p
Call WriteInnerTextToCell(e)
Next
End Sub

Das Makro ladet Daten von der Seite: https://primatips.com/facts
Im Grunde kommt mir dieser Code kürzer und eventuell einfacher vor, Daten zu laden. Vor allen, wenn dies über:
Daten / Aus dem Web
nicht so funktioniert.
Allerdings verstehe ich den Aufbau von zB HTML nicht und kann deshalb wohl auch nicht auf die für mich relevanten Daten zugreifen. Das wären in diesen Beispiel die "Fakten".
Kann mir ein Excel Profi bitte den Code dahin ändern und vor allen mir erklären, wie ich so etwas zB im Quellcode der html ausfindig mache,- um an gewünschtes Ergebnis zu gelangen? Gibt es eine Chrome Erweiterung,- die mir das einfacher machen würde?
https://www.herber.de/bbs/user/171150.xlsm

Gruss
Fred


Anzeige

13
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: html auslesen
21.07.2024 16:58:14
Eifeljoi 5
Hallo

Mit deiner Excel Version sehr leicht mit PQ zu lösen.
Es ist nur der der Grund gemacht den Rest überlasse ich dir.
https://www.herber.de/bbs/user/171154.xlsx
AW: html auslesen
22.07.2024 11:02:39
peter
Hallo

Mir ist nicht ganz klar welche Informationen Du gerne noch in Deiner Tabelle hättest. Mit "Fakten" kann ich leider nichts anfangen. Erstelle eine Tabelle auf Basis der aktuellen Webseite (Screenshot einfügen) und trage alle gewünschten Informationen händisch ein, dann kann ich Dir vielleicht helfen.

Peter
Anzeige
AW: html auslesen
22.07.2024 11:35:48
Fred
Hallo Peter,
anbei ein Beispiel, wie es ungefähr aussehen sollte (11:25h):
https://www.herber.de/bbs/user/171164.xlsm
Mit Daten / aus dem Web
gelange ich nicht daran.
Wie von Eifeljoi bemerkt, das es dort 3 Tabellen gibt, sehe ich nicht!
Userbild
Mein bisheriger Ansatz,- mit Makro funktioniert nur soweit, dass ich die Daten zu:
Clubname Heim, Clubname Gast, Ergebnis
scrapen kann.
Die Fakten zu jeden aufgeführten Spiel leider nicht.

Gruss
Fred

Anzeige
AW: html auslesen
22.07.2024 13:41:46
peter
Hallo

Probier mal



Private r As Long, c As Long
Private a() As Variant

Private Const MAXC& = 10

Sub seite1()
Dim doc As New HTMLDocument
Dim games As IHTMLElementCollection
Dim game As IHTMLElement6
Dim ws As Worksheet
Dim endRow As Long

Set ws = ThisWorkbook.Sheets("Prediction")
endRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row

Let r = 0
Let c = 0
Call Tabelle1.Range("A5:P" & endRow).ClearContents
With New WinHttp.WinHttpRequest
Call .Open("GET", "https://primatips.com/facts/date-2024-07-22/" & Tabelle1.Range("A1") & "")
Call .send
Set doc = New HTMLDocument
Let doc.body.innerHTML = .responseText

Set games = doc.getElementById("main").getElementsByTagName("a")
ReDim a(1 To games.Length, 1 To MAXC)
For Each game In games
Let c = 0
Let r = r + 1

Call WriteColums(game.getElementsByClassName("ht1"))
Call WriteColums(game.getElementsByClassName("at1"))
Call WriteColums(game.getElementsByClassName("res"))
Call WriteColums(game.getElementsByClassName("status"))
Next
Let Tabelle1.Range(Cells(5, 1), Cells(4 + r, UBound(a(), 2))) = a()

' Facts
Let c = 0
Let r = 0
Set games = doc.getElementById("main").getElementsByClassName("fact")
ReDim a(1 To games.Length, 1 To MAXC)
For Each game In games
Let c = 0
Let r = r + 1
Call WriteColums(game.getElementsByTagName("p"))
Next
Let Tabelle1.Range(Cells(8, 5), Cells(7 + r, 5 + UBound(a(), 2))) = a()

End With

End Sub


Der Rest bleibt gleich.
Peter
Anzeige
AW: html auslesen
22.07.2024 13:51:51
Fred
Hallo Peter
Bestens!!
und mit dem "de." zuvor, bekomme ich die "Fakten" auch in deutsch.
https://de.primatips.com/facts/date-2024-07-22
Vielen Dank!!
Ich habe den Code noch nicht auseinander genommen,- werde ich aber auf jedenfall machen.
Ich gehe immer wieder auf ähnliche Seiten und komme mit
Daten / aus dem Web
nicht an die Daten ran ....
Ich melde mich eventuell heute Abend nochmals.

Vielen Dank!

Gruss
Fred

Anzeige
AW: html auslesen
22.07.2024 16:11:00
Fred
Hallo Peter,
nun habe ich doch schon früher mit dem "analysieren" der zwei Versionen begonnen.

MAXC ist auf 10 gesetzt.

Zuvor hat sich ja mein Makro auf die Extraktion von bestimmten Spielinformationen aus verschiedenen Klassen konzentriert,
während deine Version diese Funktionalität durch das Hinzufügen einer zweiten Extraktionsrunde für Fakten erweitert, und diese in einem anderen Bereich der Tabelle abspeichert.
Meine Ursprungs-Version konzentriert sich auf die Extraktion von Daten aus vier spezifischen CSS-Klassen ("ht1", "at1", "res", "status")
Deine Version extrahiert Daten aus denselben vier spezifischen Klassen wie meine. Zusätzlich fügt es eine zweite Extraktionsrunde hinzu, in der es Daten aus der Klasse "fact" und deren

-Tags extrahiert.
Der zusätzliche Durchlauf (Daten aus Elementen der Klasse "fact", Inhalte der

-Tags) werden in einem anderen Bereich der Tabelle (ab Zelle "E8") eingefügt
Naja, analysieren und selber schreiben ist aber nach wie vor ein großer Unterschied .......
Allerdings kann ich wohl das Makro sehr gut als "Muster" für vieleicht andere Webseiten weiter gebrauchen ....
Letztlich noch eine Frage:
Ich habe "ID", "CSS-Klassen", "

Tags" usw. durch Chrome / Untersuchen nachvollziehen können.
Gibt es eine Chrome Erweiterung, die mir eventuell gewünschtes noch besser darstellt??

Gruss
Fred





Anzeige
AW: html auslesen
22.07.2024 16:31:05
peter
Hallo

Ich weis nicht wie Du Chrome benutzt um die Seiten zu analysieren. Mein Weg:

* öffnen der gewünschten Seite
* F12
* Symbol "Rechteck mit Pfeil rechts unten" klicken (wird dann blau bei mir)
* jetzt kannst Du durch die Webseite navigieren (der HTML Code geht mit)
* Bei Klick auf die gewünschte Information springt das System wieder in HTML Code
* Zeigt der kleine Pfeil nach rechts, einfach draufklicken und Du bekommst weitere Informationen angezeigt
* um nochmals zu analysieren wieder auf das Rechteck klicken

Der Vorteil gegenüber STRG-U (Seitenquelltext): Die Struktur ist besser ersichtlich

Peter
Anzeige
AW: html auslesen
22.07.2024 17:20:51
Fred
Bestens, Peter,
die "Auswahl" - " Symbol "Rechteck mit Pfeil rechts unten" klicken (wird dann blau bei mir)"
hatte ich noch nie beachtet :-)
Vielen Dank für die Rückmeldung!

Gruss
Fred

AW: html auslesen
21.07.2024 17:19:39
Fred
Hallo Eifeljoi,
das ich mit einer Excel-PQ-Abfrage an die Daten gelange, ist ja schon sehr erfreulich.
Allerdings erhalte ich beim aktualisieren:
Der Import "HTML-Table" entspricht keinem Export. Möglicherweise fehlender Modulverweis
Ich habe derzeit an Verweisen:
Microsoft HTML Object Library
Microsoft WinHTTP Servicrs, version 5.1
aktiviert,- wenn es daran liegt, was fehlt noch?

Gruss
Fred

Anzeige
AW: html auslesen
21.07.2024 18:02:39
Eifeljoi 5
Hallo
Hmm, kann ich nicht nach vollziehen.
Habe gerade nochmals diese Datei geöffnet und auf Aktualisieren geklickt, bei mir kommt keine Fehlermeldung.
Hast du beim ersten öffnen oberhalb der eigentlichen Tabelle erst alle gelben Balken bestätigt vor dem Aktualisieren?
Oder
Kopiere deine Web-Adresse und füge sie doch mal ein in Daten aus Web und befolge die Schritte und wähle Tabelle1 aus.
Anzeige
AW: html auslesen
21.07.2024 18:12:40
Fred
Hallo Eifeljoi,
ich glaube wir reden aneinander vorbei ...
Ich weis nicht, was du mit: "eigentlichen Tabelle erst alle gelben Balken bestätigt vor dem Aktualisieren?"
.. und wenn ich mit:
Daten / aus dem Web
die Adresse aufrufe, wird eben keine Tabelle angezeigt (nur Dokument)
AW: html auslesen
21.07.2024 18:26:57
Eifeljoi 5
Hallo

Bei mir werden 3 Tabellen angezeigt, ich habe einmal Tabelle1 und einmal Tabelle2 ausgewählt.
Da ich nie Excel 2019 genutzt habe, kann mir aber nicht vorstellen das es dort nicht funktioniert.
Habe nur Excel 2016 gehabt und mittlerweile nutze ich nur noch Microsoft 365 Abo im Beta Kanal.
Anzeige
AW: html auslesen
21.07.2024 18:32:47
Fred
OK Eifeljoi,
wie gesagt, es werden bei mir nur "Dokument" angezeigt (keine 3 Tabellen)
Ich glaube ich muß wieder auf den "Ursprungs-Beitrag" zurück kommen und nach einer Lösung im Forum fragen.
Vielen Dank für deine Mühe und Aufmerksamkeit!


Gruss
Fred

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige