Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1836to1840
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
Inhaltsverzeichnis

PQ Editor / Webabfrage

PQ Editor / Webabfrage
05.07.2021 17:50:11
Fred
Hallo VBA,- PQ,- Excel Experten,
ich bin bei meiner Anfrage nicht sehr zuversichtlich,- probiere es aber dennoch mal.
Ich möchte gerne die Qualität von Predictions (Vorhersagen) einer Webseite feststellen.
Auf der Webseite https://www.totalcorner.com/match/today/ended
werden beendete Fußballspiele des Tages angezeigt.
Jedes Spiel hat auf der gleichen Zeile rechts u.a. einen Button "C"
Klickt man auf diesen Button "C" wird eine weitere Seite aufgerufen, die Detail-Infos zu entsprechenden Spiel anzeigt.
Meine Frage:
Ist es mit PQ-Editor, VBA etc. möglich, Infos von der einen und anderen (detaillierteren) Webseite in eine Tabelle aufzurufen?
Eine Verbindung zur oben genannten Site habe ich bereits:
https://www.herber.de/bbs/user/146960.xlsb
Kann ein Experte mal bitte drauf schaun und mir sagen, ob es da eine Möglichkeit gibt?
Gruss
Fred

15
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: PQ Editor / Webabfrage
05.07.2021 18:01:27
Yal
Hallo Fred,
ja, und zwar relativ leicht. Es nicht nicht immer so.
Reiter Daten, "neue Abfrage", "Aus anderen Quellen", "aus dem Web" auswählen,
Die gegebene Adresse reinpasten, Ok drücken,
"Tabelle 0" selektieren,
laden drücken.
Danach auf diese Liste mit Rechtsklick auf "Aktualisiseren" oder Alt+F5.
VG
Yal
AW: PQ Editor / Webabfrage
05.07.2021 18:20:42
Fred
Hallo Yal,
so wie du es beschrieben hast, habe ich meine "erste Tabelle" von der Seite mit den Endergebnissen erstellt.
Ich dachte an eine Verbindung, die mir zu jedem Spiel aus der Tabelle, entsprechende Detail-Infos der anderen Tabelle (von Detail-Seite) zusammenstellt.
Ich finde zB nicht die Webadresse (zu Detail-Infos) in meiner schon erstellten Abfrage,- bzw. im Editor für diese Tabelle .......
Es soll ja für jedes Spiel diese "Detail-Infos" abgerufen werden.
Also eine einzelne Tabelle (bzw. dessen Daten) bekomme ich gebacken,- allerdings nicht die Verbindung zwischen den Seiten (Tabellen) ...
Gruss
Fred
Anzeige
AW: PQ Editor / abfrage aus Quellcode
06.07.2021 15:06:39
Fred
Hallo PQ,- Excel Experten,
ich verschlinge gerade auf youtube mit Begeisterung einige Videos zum Thema "PQ" um evt. selbst einen Lösungsansatz für ein Vorhaben zu finden. Aber .....
Ich habe eine PQ-Abfrage zu der Seite / Tabelle https://www.totalcorner.com/match/today
Auf der Webseite selbst (es werden Fußball Matches angezeigt) gibt es u.a. einen Button "C"
Klickt man auf den Button "C", wird eine weitere Seite "_blank" geöffnet,- mit Detail-Infos
Ich möchte nun diese Detail-Infos teilweise in einer Excel Tabelle angezeigt bekommen.
Das Problem:
Von einer einzelnen "Detail-Info-Seite" ist das mit dem PQ Editor für mich kein Problem (ich kopiere den Link und mach es mit dem PQ-Editor)
Aber
ich möchte zu allen Spielen, die die Seite https://www.totalcorner.com/match/today anzeigt, die Detail-Infos nach Excel.
Im Schnitt werden am Tag über 100 Spiele dort gezeigt,- würde also
100 x
Link kopieren
Abfrage erstellen
bedeuten.
Meine Frage;
Gibt es die Möglichkeit, aus dem Quelltext die "Adressen" der Detail-Info-Seiten,- bzw. deren Tabellen "zu sammeln" und dann entsprechende Detail-Infos in einer Abfrage anzuzeigen?
Die Link's zu den "Datail-Infos setzen sich aus der Webadresse und einer ID zusammen (die dem Spiel zugeordnet ist)
Webadresse = "https://www.totalcorner.com/match/corner-stats/ + ID"
Die Spiel-ID's sind im Quelltext zu finden unter: data-match_id="xxxxxxxxxxx"
Eine Beispiel-Adresse von heute: https://www.totalcorner.com/match/corner-stats/104890155
Kann mir da geholfen werden?
https://www.herber.de/bbs/user/146979.xlsb
Gruss
Fred
Anzeige
VBA - html quellcode auslesen
07.07.2021 16:11:39
Fred
Hallo Excel Experten,
ich möchte nach wie vor Daten von einer Webseite abfragen und in weiteren verlinkten websites entsprechend weitere abfragen zufügen.
mein Vorhaben; mit dem pq-editor entsprechende abfragen zu erstellen lege ich mal (kurz) auf's eis und verfolge einen "neuen ansatz".
Darum geht es:
Ich möchte feststellen, welche qualität eine webseite mit ihren predictions (vorhersagen) hat.
Basis sind die Fußballspiele der seite https://www.totalcorner.com/match/today
mit dem pq-editor die daten abrufen ist ja keine große sache. allerdings möchte ich noch weitere daten von jedem angegebenen spiel erhalten. an diese daten kommt man allerdings nur dran, wenn man eine weitere seite öffnet. mit dem pq-editor schaffe ich es leider nicht, diese "detail-infos" eines spiels abzufragen,- deshalb
ein neuer ansatz
ich möchte das mit vba erreichen.
makro1
sammelt Link' s von der Seite https://www.totalcorner.com/match/today die zu diesen "Detail-Info-Seiten" führen

Sub such_links()
Dim IEApp As Object, allX As Object
Dim zeile As Long
Dim sText As String
' dies makro sammelt alle Links, die in der class "text-center td_analysis" an erster stelle stehen !!
zeile = 10
Set IEApp = CreateObject("InternetExplorer.Application")
IEApp.Visible = False
IEApp.Navigate "https://www.totalcorner.com/match/today/" 'anpassen
Do: Loop Until IEApp.Busy = False
Do: Loop Until IEApp.document.ReadyState = "complete"
For Each allX In IEApp.document.all
If allX.classname = "text-center td_analysis" Then
With Tabelle1
sText = Split(Split(allX.outerHTML, "href=""")(1), """")(0)
.Hyperlinks.Add Anchor:=.Cells(zeile, 1), Address:="https://www.totalcorner.com/" & sText, _
TextToDisplay:=Replace(Mid(sText, 200), ".html", "")
End With
zeile = zeile + 1
End If
Next
IEApp.Quit
Set IEApp = Nothing
MsgBox "Fertig"
End Sub
Das Makro läuft wie gewünscht
Makro 2
soll auf den "Detail-Info-Seiten" bestimmt(e) Text(e) finden

Sub such_Prediction()
Dim IEApp As Object
Dim textsuche As Object
Dim zeile As Long
Dim spalte As Integer
zeile = 10
spalte = 2
Set IEApp = CreateObject("InternetExplorer.Application")
IEApp.Visible = True
IEApp.Navigate ("https://www.totalcorner.com/match/corner-stats/104830269/England-vs-Denmark") 'Daten Seite
Do: Loop Until IEApp.ReadyState = 4 'Geladen
Set textsuche = IEApp.document.getElementsByClassName("match-facts-pred")(0)
If Not textsuche Is Nothing Then
Tabelle1.Cells(zeile, spalte) = textsuche.innertext
Else
MsgBox "Wert nicht vorhanden"
End If
IEApp.Quit
MsgBox ("Fertig")
End Sub
Dies Makro findet was es soll,- allerdings für nur eine (vorgegebene Adresse)
Was ich bräuchte:
Ein Makro, was die Link's von "Makro 1" nacheinander aufruft und gewünschten Text findet und mir in Tabelle schreibt,- in entsprechende Zeile.
Das was ich in dieser Hinsicht bisher habe,- https://www.herber.de/bbs/user/147003.xlsb
Kann evt. ein Guru mal draufschaun und evt. Lösungsansatz zeigen?
Gruss
Fred
Anzeige
Schleife-150 Zeilen- über 1/2 Std. - bitte Hilfe
08.07.2021 12:56:38
Fred
Hallo Excel und VBA Experten,
ich bin mit meinem Vorhaben auf der Zielgerade.
Ein Makro, welches die Link's einer Spalte abruft und in entsprechender Zeile einen Text kopiert, welcher der erste Text der Klasse "match-facts-pred" auf jeweiliger html-Seite ist.
Das Makro:

Sub Text_finden()
Dim IEApp As Object
Dim gesuchterText As Object
Dim t As Double ' Zeitmessung
t = Timer
Dim wksBlatt As Worksheet
Dim lngLastRow As Long
Dim lngC As Long
Application.ScreenUpdating = False
Set wksBlatt = ActiveSheet
With wksBlatt
lngLastRow = .Cells(.Rows.Count, 13).End(xlUp).Row
For lngC = 10 To lngLastRow
' text von Detail-Info-Seiten holen  !!!!!!!!!!!!!!!!!!!!!!!!
Set IEApp = CreateObject("InternetExplorer.Application")
IEApp.Visible = True
IEApp.Navigate (Sheets("Aktuell").Cells(lngC, 13)) 'Daten Seite
Do: Loop Until IEApp.ReadyState = 4 'Geladen
'Erstes Array Element aller HTML Elemente mit der zugewiesenen Klasse "match-facts-pred"
Set gesuchterText = IEApp.document.getElementsByClassName("match-facts-pred")(0)
'Prüfen, ob das Objekt erzeugt werden konnte und entsprechend weiter verfahren
If Not gesuchterText Is Nothing Then
'Objekt konnte erzeugt werden und wird nun in die Tabelle geschrieben
Sheets("Aktuell").Cells(lngC, 14) = gesuchterText.innertext
Else
'Objekt konnte nicht erzeugt werden, weil es kein HTML Element
'mit der zugewiesenen CSS Klasse "text-center td_analysis" gibt
MsgBox "Wert nicht vorhanden"
End If
IEApp.Quit
' text geholt !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Next lngC
End With
Application.ScreenUpdating = True
MsgBox Timer - t & " sec", , "Makrolaufzeit" ' Zeitmessung
End Sub
Also, es funzt, was ja schon mal super ist.
Aber
Bevor ich mir ein "optimales Makro zusammenschraube", wird wohl eher meine Mutter das Internet löschen :-)
sprich: Das Makro brauch bei dem abfragen von ca. 150 Zeilen / Adressen über 1/2 Std. für den Ablauf. Zudem ist danach mein Laptop "dicht",- absolut schwerfällig mit dem ausführen (zB Programme starten, Chrome aufrufen usw.). Runterfahren und neu Starten ist dann angesagt.
Kann ein Experte bitte mal draufschaun und mir Optimierungsvorschläge machen?!
https://www.herber.de/bbs/user/147011.xlsb
Gruss
Fred
Anzeige
AW: Schleife-150 Zeilen- über 1/2 Std. - bitte Hilfe
08.07.2021 13:19:02
Daniel
Hi
Musst du den Internetexplorer für jedes Abfrage neu erstellen ?
Reicht es nicht, den einmalig vor der Schleife zu erstellen?
Also das "Set IEApp = ..." vor dem "For" und das "IEApp.Quitt" nach dem "Next"
Außerdem würde ich in der Schleife keine Messagebox verwenden, denn wenn die Messagbox kommt, musst du die erst bestätigen, damit das Makro weiter läuft, im schlimmsten Fall 150x.
Hier sollte es reichen, wenn du die Meldung in die Zelle schreibt, dann kannst du das hinterher anschauen.
Gruß Daniel
AW: Schleife-150 Zeilen- über 1/2 Std. - bitte Hilfe
08.07.2021 13:24:20
Fred
Hallo Daniel,
ich werde das mal wie von dir vorgeschlagene machen ; das "Set IEApp = ..." vor dem "For" und das "IEApp.Quitt" nach dem "Next"
Melde mich in spätestens 40 Min. wieder :-)
Gruss
Fred
Anzeige
AW: Schleife-150 Zeilen- über 1/2 Std. - bitte Hilfe
08.07.2021 13:48:50
Fred
Hallo Daniel,
der Tipp, den IE einmalig zu erstellen, sprich: den vor der Schleife zu erstellen, ist ein "Volltreffer". Mein Laptop ist nach Ausführung nicht dicht und das Abarbeiten von 135 Zeilen dauert "nur noch" 8 Min. auf meinem Laptop.
8 Minuten für das Aufrufen von 135 Internetseiten und der verbundenen Suche nach dem Text klingt eigentlich akzeptabel. Ich lasse mal den Beitrag bis Freitag, den 09.07.'21 offen,- vielleicht hat jemand noch einen Vorschlag, wie ich die Prozedur noch schneller ausführen kann.
Vielen Dank für den Tipp, Daniel!
Gruss
Fed
AW: Schleife-150 Zeilen- über 1/2 Std. - bitte Hilfe
08.07.2021 13:41:03
Tobias
Hallo Fred,
ich würde vermuten du wirfst dir den speicher mit IE.Applications voll, da du jede Schleife ein neues Objekt erstellst, warum nicht einfach nur zur nächsten Seite navigieren? Und wenn wir schon dabei sind, benötigst du den IE eigentlich überhaupt nicht:

Sub test()
Const url = "https://www.totalcorner.com/match/corner-stats/104830269/England-vs-Denmark"
Dim html As XMLHTTP60
Dim htmldoc As HTMLDocument
Dim converter As New ADODB.stream
Set html = New XMLHTTP60
Set htmldoc = New HTMLDocument
html.Open "GET", url, False
html.send
' bytes in HTML umwandeln
converter.Open
converter.Type = adTypeBinary
converter.Write html.responseBody
converter.Position = 0
converter.Type = adTypeText
converter.Charset = "Windows-1251"
'HTML Dokument befüllen
htmldoc.body.innerHTML = converter.ReadText
converter.Close
Debug.Print htmldoc.getElementsByClassName("match-facts-pred")(0).innerText
Set converter = Nothing
Set htmldoc = Nothing
Set html = Nothing
End Sub
Damit rufst du die Webseite direkt ab und holst dir das Ergebnis ohne jedesmal die Seite komplett laden zu müssen.
Benötigt Verweise Microsoft XML, v6.0 / HTML Object Library / ActiveX Data Objects 6.1 Library.
Müsstest du dann dementsprechend in deine Schleife einbinden. Auch hier dann wieder schauen wann du die Elemente erstellen und wieder freigeben kannst.
Generell würde ich immer Elemente die per Set gefüllt werden auch wieder mit Set = Nothing freigeben.
Schöne Grüße
Tobias
Anzeige
AW: Schleife-150 Zeilen- über 1/2 Std. - bitte Hilfe
08.07.2021 14:32:37
Fred
Hallo Tobias,
den IE gar nicht benötigen klingt sehr gut:
Ich habe nun zum test die Verweise "Microsoft XML, v6.0 / HTML Object Library / ActiveX Data Objects 6.1 Library" aktiviert.
Wie bekomme ich nun aber die Ergebnisse (Texte) nach

Sheets("Aktuell").Cells(lngC, 14)
Gruss
Fred
AW: Schleife-150 Zeilen- über 1/2 Std. - bitte Hilfe
08.07.2021 15:39:18
Tobias
Hallo Fred,

Debug.Print htmldoc.getElementsByClassName("match-facts-pred")(0).innerText
da einfach statt dem Debug.print deine Zelle mit dem Inhalt füllen wie in deinem vorherigen Makro auch.

Sheets("Aktuell").Cells(lngC, 14) = htmldoc.getElementsByClassName("match-facts-pred")(0).innerText
Schöne Grüße
Tobias
Anzeige
AW: Schleife-150 Zeilen- über 1/2 Std. - bitte Hilfe
08.07.2021 17:37:08
Fred
Hallo Tobias,
Mit Daniel's "Zeitersparnis" war ich ja schon zufrieden (von >30 Min. auf Dein Makro für das finden und kopieren des Textes auf den Webseiten ist im Zeitablauf der Hammer! Nun werden nur noch ca. 40 Sek. mit meinem Laptop (bei 145 Adressen) benötigt,- ein gewaltiger Unterschied!!
Dabei (durch das viele Ändern, Probieren und nervigen Umfeld) ist mein gesamtes Makro noch nicht optimal (im Moment weis ich gar nicht mehr, wo oben und unten ist :-)
Weil ich im Moment nicht weis, wie ich die einzelnen Linkadressen in deiner Version erreiche, werden diese beim abarbeiten der Zeilen immer nach "N1" kopiert.

For lngC = 10 To lngLastRow
.Cells(lngC, 13).Copy .Cells(1, 14)
so kann ich dann mit

url = Sheets("Aktuell").Range("N1")
drauf zugreifen.
Ein bischen umständlich,- aber das kann ich spätestens morgen in ruhe auch noch selbst optimieren.
Vielen Dank für deine Aufmerksamkeit und Unterstützung, Tobias!!
Gruss
Fred
Anzeige
AW: VBA - html quellcode auslesen
08.07.2021 18:12:51
Anton
Hallo Fred,
probier es hiermit:

Option Explicit
Sub b()
  Dim objXMLHTTP As Object, html As Object, html1 As Object  
  Dim link As Object, div As Object  
  Dim iRow As Long, start As Single, slink As String    
 
  iRow = 1
  start = Timer
  Set html = CreateObject("htmlfile")  
  Set html1 = CreateObject("htmlfile")  
  Set objXMLHTTP = CreateObject("MSXML2.XMLHTTP")  
  objXMLHTTP.Open "GET", "https://www.totalcorner.com/match/today/", False  
  objXMLHTTP.send
  If objXMLHTTP.Status = 200 Then  
    html.body.innerhtml = objXMLHTTP.Responsetext
    With ActiveSheet
      .Cells.Clear
      For Each link In html.getElementsBytagName("a")  
        If InStr(1, link.href, "/match/corner-stats") <> 0 Then  
          slink = Replace(link.href, "about:", "https://www.totalcorner.com")
          .Hyperlinks.Add Anchor:=.Cells(iRow, 1), _
                          Address:=slink, _
                          TextToDisplay:=link.nameProp
          objXMLHTTP.Open "GET", slink, False  
          objXMLHTTP.send
          If objXMLHTTP.Status = 200 Then  
            html1.body.innerhtml = objXMLHTTP.Responsetext
            For Each div In html1.getElementsBytagName("div")  
              If div.classname = "match-facts-pred" Then  
                .Cells(iRow, 2) = div.innertext
              End If  
            Next
          End If  
          iRow = iRow + 1
        End If  
      Next
      .Columns.AutoFit
    End With  
  End If  
  Set objXMLHTTP = Nothing  
  Set html = Nothing  
  Set html1 = Nothing  
  MsgBox (Timer - start) & " sec."
End Sub  

mfg Anton
Anzeige
AW: VBA - html quellcode auslesen
08.07.2021 20:05:57
Fred
Hallo Anton,
nach meinem 1/2 Std. Makro, der Verbesserung auf 7 Min. von Daniel, dem Neuaufbau von Tobias (40 Sek. Laufzeit) nun dein VBA-Wunder mit einer Laufzeit von 14 Sekunden (gesamt, mit Link's finden).
Ich bin zwar nun absolut neben der Spur und brauch für den rest des Tages Abstand, wollte mich für deine Mühe unbedingt bedanken.
Ich werde am Wochenende das Makro Schritt für Schritt durchgehen (auf den ersten Blick ist dein Makro für mich verständlicher als das zB von Tobias). Das Ergebnis ist der Hammer :-)
Vielen Dank für deine kompetente Arbeit!
Gruss
Fred

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige