Hallo zusammen,
hat jemand Erfahrung mit dem automatischen Import von Wettquoten in eine Exceltabelle?
Ich habe mir eine Datei gebastelt mit der ich - einfach gesagt - die angebotenen Wetten mit einigen Statistiken vergleiche. Geht dabei um Basketballwetten. zB Spieler X erzielt mehr als 17,5 Punkte im Spiel.
Die Statistiken importiere ich bereits vollautomatisch per PowerQuery. Was mir noch fehlt ist der automatische Import der „Lines“. Aktuell importiere ich die Lines per manuellem copy&paste vom bookie draftkings. Von welchem bookie die lines automatisch importiert werden wäre mir egal weil die Lines in den meisten Fällen sowieso die gleichen sind bei allen bookies. Bei draftkings funktioniert das copy&paste ganz gut. Daher hole ich mir die Daten aktuell dort her.
Kann da jemand helfen?
.
Jo, über Pinnacle wette ich und das mit der API habe ich auch schon gesehen. Allerdings reichen dafür meine Programmier/VBA Skills nicht ansatzweise aus.
Ohne programmieren wird das denke ich nicht gehen. Mit Python kann man in Excel schreiben z.B. mit openpyxl oder pandas. Auch eine automatische API Abfrage ist normalerweise nicht sehr kompliziert. Wenn du das Problem ein wenig genauer umschreibst kann ich mal schauen ob ich das in kurzer Zeit hinkriege, kann ich aber keine Garantie für geben.
Original von lokalmatador123
Ohne programmieren wird das denke ich nicht gehen. Mit Python kann man in Excel schreiben z.B. mit openpyxl oder pandas. Auch eine automatische API Abfrage ist normalerweise nicht sehr kompliziert. Wenn du das Problem ein wenig genauer umschreibst kann ich mal schauen ob ich das in kurzer Zeit hinkriege, kann ich aber keine Garantie für geben.
Ich werde Montag mal eine genauere Beschreibung inkl. Screenshots posten. Danke schonmal
Wenn die Seite keine API anbietet und PowerQuery kein table, dann muss man die Seite manuell einlesen.
Ich hatte dir @maniac0712 den Code dafür schon mal geschrieben und über´s Contool geschickt.
Hier noch mal die Vorgehensweise anhand der Seite https://primatips.com/tips
Hier die excel-Datei dazu: https://ripsn7kiul1aoy5k.myfritz.net:41271/nas/filelink.lua?id=3e1c3458e130ebed
Hier der VBA-Code:
Spoiler
Option Explicit
Private r As Long, c As Long
Private a() As Variant
Private Const MAXC& = 20
Sub DatenVonPrimatipsAbgreifen()
Dim doc As New HTMLDocument
Dim games As IHTMLElementCollection
Dim game As IHTMLElement6
Let r = 0
Let c = 0
Call Tabelle1.Range("A2:Z1000").ClearContents
With New WinHttp.WinHttpRequest
Call .Open("GET", " https://primatips.com/tips/" & Tabelle1.Range("A1") & "")
Call .send
Set doc = New HTMLDocument
Let doc.body.innerHTML = .responseText
Set games = doc.getElementById("games").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("tm"))
Call WriteColums(game.getElementsByClassName("cn"))
Call WriteColums(game.getElementsByClassName("nm"))
Call WriteColums(game.getElementsByClassName("o"))
Call WriteColums(game.getElementsByClassName("t"))
Call WriteColums(game.getElementsByClassName("tip"))
Call WriteColums(game.getElementsByClassName("odd"))
Call WriteColums(game.getElementsByClassName("r"))
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
@OP:
1. Ändere die url in dem Code,
2. Rufe deine Seite auf Draftkings auf, mach einen Rechtsklick und gehe ganz unten auf "Untersuchen". (Hier am Beispiel von primatips):
Spoiler

3. Suche dir jetzt auf der rechten Seite das Element aus, was ausschließlich deine zu importierenden Daten umfasst. Hier das Element mit der ID="games"
Spoiler

4. Öffne nun alle Unterelemente, die du benötigst und benenne sie im VBA-Code entsprechend um.
Somit bekommst du alle benötigten Daten in dein excel-sheet eingelesen.
Gruß rmsds
Spoiler
An meine Freunde aus dem Corona-Thread:
Nicht aufregen. Ich durfte nur diesen Beitrag hier verfassen, jetzt werde ich meine Strafe weiter fortsetzen.
Dank geht raus an zBender, SvenBe und spiike.
Im August sehen wir uns wieder.
Bleibt gesund.
Original von rmsds
Wenn die Seite keine API anbietet und PowerQuery kein table, dann muss man die Seite manuell einlesen.Ich hatte dir @maniac0712 den Code dafür schon mal geschrieben und über´s Contool geschickt.
Hier noch mal die Vorgehensweise anhand der Seite https://primatips.com/tips
Hier die excel-Datei dazu: https://ripsn7kiul1aoy5k.myfritz.net:41271/nas/filelink.lua?id=3e1c3458e130ebed
Hier der VBA-Code:
Spoiler
Option Explicit Private r As Long, c As Long Private a() As Variant Private Const MAXC& = 20 Sub DatenVonPrimatipsAbgreifen() Dim doc As New HTMLDocument Dim games As IHTMLElementCollection Dim game As IHTMLElement6 Let r = 0 Let c = 0 Call Tabelle1.Range("A2:Z1000").ClearContents With New WinHttp.WinHttpRequest Call .Open("GET", " https://primatips.com/tips/" & Tabelle1.Range("A1") & "") Call .send Set doc = New HTMLDocument Let doc.body.innerHTML = .responseText Set games = doc.getElementById("games").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("tm")) Call WriteColums(game.getElementsByClassName("cn")) Call WriteColums(game.getElementsByClassName("nm")) Call WriteColums(game.getElementsByClassName("o")) Call WriteColums(game.getElementsByClassName("t")) Call WriteColums(game.getElementsByClassName("tip")) Call WriteColums(game.getElementsByClassName("odd")) Call WriteColums(game.getElementsByClassName("r")) 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@OP:
1. Ändere die url in dem Code,
2. Rufe deine Seite auf Draftkings auf, mach einen Rechtsklick und gehe ganz unten auf "Untersuchen". (Hier am Beispiel von primatips):Spoiler
3. Suche dir jetzt auf der rechten Seite das Element aus, was ausschließlich deine zu importierenden Daten umfasst. Hier das Element mit der ID="games"
Spoiler
4. Öffne nun alle Unterelemente, die du benötigst und benenne sie im VBA-Code entsprechend um.
Somit bekommst du alle benötigten Daten in dein excel-sheet eingelesen.
Gruß rmsds
Spoiler
An meine Freunde aus dem Corona-Thread:
Nicht aufregen. Ich durfte nur diesen Beitrag hier verfassen, jetzt werde ich meine Strafe weiter fortsetzen.
Dank geht raus an zBender, SvenBe und spiike.
Im August sehen wir uns wieder.![]()
![]()
![]()
Bleibt gesund.
Wow. Vielen Dank. Ich werde es morgen mal ausprobieren.
Original von rmsds
Wenn die Seite keine API anbietet und PowerQuery kein table, dann muss man die Seite manuell einlesen.Ich hatte dir @maniac0712 den Code dafür schon mal geschrieben und über´s Contool geschickt.
Hier noch mal die Vorgehensweise anhand der Seite https://primatips.com/tips
Hier die excel-Datei dazu: https://ripsn7kiul1aoy5k.myfritz.net:41271/nas/filelink.lua?id=3e1c3458e130ebed
Hier der VBA-Code:
Spoiler
Option Explicit Private r As Long, c As Long Private a() As Variant Private Const MAXC& = 20 Sub DatenVonPrimatipsAbgreifen() Dim doc As New HTMLDocument Dim games As IHTMLElementCollection Dim game As IHTMLElement6 Let r = 0 Let c = 0 Call Tabelle1.Range("A2:Z1000").ClearContents With New WinHttp.WinHttpRequest Call .Open("GET", " https://primatips.com/tips/" & Tabelle1.Range("A1") & "") Call .send Set doc = New HTMLDocument Let doc.body.innerHTML = .responseText Set games = doc.getElementById("games").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("tm")) Call WriteColums(game.getElementsByClassName("cn")) Call WriteColums(game.getElementsByClassName("nm")) Call WriteColums(game.getElementsByClassName("o")) Call WriteColums(game.getElementsByClassName("t")) Call WriteColums(game.getElementsByClassName("tip")) Call WriteColums(game.getElementsByClassName("odd")) Call WriteColums(game.getElementsByClassName("r")) 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@OP:
1. Ändere die url in dem Code,
2. Rufe deine Seite auf Draftkings auf, mach einen Rechtsklick und gehe ganz unten auf "Untersuchen". (Hier am Beispiel von primatips):Spoiler
3. Suche dir jetzt auf der rechten Seite das Element aus, was ausschließlich deine zu importierenden Daten umfasst. Hier das Element mit der ID="games"
Spoiler
4. Öffne nun alle Unterelemente, die du benötigst und benenne sie im VBA-Code entsprechend um.
Somit bekommst du alle benötigten Daten in dein excel-sheet eingelesen.
Gruß rmsds
Spoiler
An meine Freunde aus dem Corona-Thread:
Nicht aufregen. Ich durfte nur diesen Beitrag hier verfassen, jetzt werde ich meine Strafe weiter fortsetzen.
Dank geht raus an zBender, SvenBe und spiike.
Im August sehen wir uns wieder.![]()
![]()
![]()
Bleibt gesund.
Vielen Dank für deine Mühe.
Habs nun mal versucht. Scheitere leider schon an deinem Beispiel. Habe den VBA code in eine neue leere Excel-Datei kopiert. Wenn ich das Makro starten will erscheint der Fehler: "Fehler beim Kompilieren: Benutzerdefinierter Typ nicht definiert". Er springt dann zu dieser Stelle im Code:
Private Sub WriteInnerTextToCell(p As IHTMLElement)
Der Link zu deiner Beispiel-Exceldatei scheint auch nicht zu funktionieren...kannst du die vielleicht woanders hochladen?
EDIT: Deine Beispieldatei konnte ich nun doch laden. Keine Ahnung woran das lag. Der Import der Tips on Primatips funtioniert auch. Wenn ich jedoch auf Draftkings umschreibe funktioniert nichts mehr. Debugging Fehler.
Importieren möchte ich die Daten von folgender Seite:
https://sportsbook.draftkings.com/leagues/basketball/88670846?category=player-props&subcategory=points
Ich benötige eigentlich nur die im Screenshot markierten Werte:

Aktuell sind nur die lines für einen Spieler draußen. Sobald die lines zu den weiteren Spielern rauskommen stehen die einfach untereinander in der gleichen Tabelle. Getrennt wird dann nur durch den Namen der beiden Teams die gegeneinader spielen und Datum+Uhrzeit von dem Spiel. Kannst du mir da irgendwie helfen?
@all:
Wer den VBA-Code in einer leeren Datei lädt, muss im VBA-Editor unter Extras > Verweise die folgenden beiden Elemente anwählen:
1. Microsoft HTML Object Library
2. Microsoft WinHTTP Services

@FlexiFitze:
Ich werde den Code morgen Abend auf deine Seite bezogen abändern. Ich will den ps-Support aber nicht unnötig mit dem permanenten an- und abschalten meiner Schreibrechte auf die Nerven gehen. Ich kann Dir auch keine persönlichen Nachrichten zukommen lassen, daher werde ich dir die Datei unter folgendem Link zur Verfügung stellen: FlexiFitze
Wenn Du anschließend dann noch Änderungswünsche hast, musst du die hier reinschreiben. Ich kümmere mich dann darum, auch wenn ich Dir nicht antworten kann. Der Link FlexiFitze bleibt also für alle Änderungen gleich.
Gruß rmsds
Spoiler
p.s. Vielen Dank nochmal an zBender, SvenBe und Spiike
Spoiler
pps Ihr könnt mich aber auch einfach freigeschalten lassen. Ich werde auch bis zum Ende meiner Strafe nirgends posten, außer wenn jemand Hilfe zu excel benötigt.
Tut mir Leid, ich hab alles probiert. Aber die Daten sind verscripted. Wie man das auslesen kann, damit hab ich mich noch nie befasst.
Also muss @lokalmatador123 mal sein Glück versuchen. Sollte mir aber noch die Erleuchtung kommen, lass ich es dich wissen. Ich bleib auf jeden Fall an dem Thema dran, weil es mich auch interessiert. Muss mich hier erstmal einlesen.
Wenn die Daten dynamisch mit Javascript geladen werden kann man das mit chromedriver + selenium auslesen. Auf jeden Fall machbar
Original von rmsds
@FlexiFitzeTut mir Leid, ich hab alles probiert. Aber die Daten sind verscripted. Wie man das auslesen kann, damit hab ich mich noch nie befasst.
Also muss @lokalmatador123 mal sein Glück versuchen. Sollte mir aber noch die Erleuchtung kommen, lass ich es dich wissen. Ich bleib auf jeden Fall an dem Thema dran, weil es mich auch interessiert. Muss mich hier erstmal einlesen.
Schade, trotzdem vielen Dank für deine Bemühungen.
Kannst du noch ein wenig zu der Seite schreiben? Ist das immer der selbe Link, oder immer die Quoten von einem speziellen Datum? Müsste schon den weg wissen, wie man auf die zu scrapende Seite kommt, sodass man den Link automatisch generieren kann.
Original von lokalmatador123
Kannst du noch ein wenig zu der Seite schreiben? Ist das immer der selbe Link, oder immer die Quoten von einem speziellen Datum? Müsste schon den weg wissen, wie man auf die zu scrapende Seite kommt, sodass man den Link automatisch generieren kann.
Also die Links sind immer die gleichen:
https://sportsbook.draftkings.com/leagues/basketball/88670846?category=player-props&subcategory=points
https://sportsbook.draftkings.com/leagues/basketball/88670846?category=player-props&subcategory=rebounds
https://sportsbook.draftkings.com/leagues/basketball/88670846?category=player-props&subcategory=assists
https://sportsbook.draftkings.com/leagues/basketball/88670846?category=player-props&subcategory=threes
https://sportsbook.draftkings.com/leagues/basketball/88670846?category=player-props&subcategory=turnovers
Da in der NBA ja eigentlich jeden Tag Spiele stattfinden werden die Seiten täglich aktualisiert. Manchmal auch mehrmals am Tag. Aktuell copy&paste ich diese 5 Seiten manuell in meine Excel datei. Das sieht dann so aus:

Per SVerweis hole ich mir die "Line" (in diesem Beispiel beim ersten Spieler 26,5) in ein anderes Blatt in dem ich dann die Lines mit einigen Statistikwerten vergleiche.
Ist eine ganz schöne Drecksseite, ich schau mir das morgen früh mal genauer an. Wie rdms schon sagte, nur mit ner einfachen request kommt man an die Daten nicht dran, weil das dynamisch geladen wird. Geht aber bestimmt irgendwie über umwege.
Es muss ja nicht unbedingt von draftkings kommen. Ich gucke nachher mal nach Alternativen Seiten. Vielleicht gibt es andere Bookies die einem das exportieren einfacher machen…
Der Output sieht jetzt so aus, soll ich daran noch was ändern? Download dauert ~ 5 Sekunden, die anderen Kategorien kommen weiter unten:

Absoluter Traum. Genau so habe ich mir das vorgestellt. Wie wird der Download getriggert? Einfach durch starten eines Makros?
Ich hab das jetzt mit einem externen Python Script gelöst. Wenn die Daten in ein spezielles Sheet importiert werden sollen müsste ich die Struktur davon wissen / das Sheet kennen. Im Moment wird das so einfach in ein neues Excel Sheet geschrieben, wenn man das Script laufen lässt. Sollen wir den Rest über PN klären?
Ja, können wir gerne machen. Ich kann dir auch gerne meine Datei zuschicken. Adde dich mal…