Zum Forum springen
Benachrichtigungen
Alles löschen

Excel Import von Wettquoten

20 Beiträge
5 Benutzer
0 Reactions
3,067 Ansichten
FlexiFitze
Beigetreten: 22.12.2006
Poker Player

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?


Antwort
Zitat
19 Antworten
FlexiFitze Themenstarter
FlexiFitze
Beigetreten: 22.12.2006
Poker Player

.

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.


Antwort
Zitat
lokalmatador123
Beigetreten: 26.10.2008
PokerStrategist

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.


Antwort
Zitat
FlexiFitze Themenstarter
FlexiFitze
Beigetreten: 22.12.2006
Poker Player

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


Antwort
Zitat
rmsds
Beigetreten: 29.08.2018
Legacy Member

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. :f_love: :f_drink: :f_tongue:

Bleibt gesund.


Antwort
Zitat
FlexiFitze Themenstarter
FlexiFitze
Beigetreten: 22.12.2006
Poker Player

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. :f_love: :f_drink: :f_tongue:

Bleibt gesund.

Wow. Vielen Dank. Ich werde es morgen mal ausprobieren.


Antwort
Zitat
FlexiFitze Themenstarter
FlexiFitze
Beigetreten: 22.12.2006
Poker Player

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. :f_love: :f_drink: :f_tongue:

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?


Antwort
Zitat
rmsds
Beigetreten: 29.08.2018
Legacy Member

@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.


Antwort
Zitat
rmsds
Beigetreten: 29.08.2018
Legacy Member

@FlexiFitze

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.


Antwort
Zitat
lokalmatador123
Beigetreten: 26.10.2008
PokerStrategist

Wenn die Daten dynamisch mit Javascript geladen werden kann man das mit chromedriver + selenium auslesen. Auf jeden Fall machbar ;)


Antwort
Zitat
FlexiFitze Themenstarter
FlexiFitze
Beigetreten: 22.12.2006
Poker Player

Original von rmsds
@FlexiFitze

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.

Schade, trotzdem vielen Dank für deine Bemühungen.


Antwort
Zitat
lokalmatador123
Beigetreten: 26.10.2008
PokerStrategist

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.


Antwort
Zitat
FlexiFitze Themenstarter
FlexiFitze
Beigetreten: 22.12.2006
Poker Player

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.


Antwort
Zitat
lokalmatador123
Beigetreten: 26.10.2008
PokerStrategist

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.


Antwort
Zitat
FlexiFitze Themenstarter
FlexiFitze
Beigetreten: 22.12.2006
Poker Player

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…


Antwort
Zitat
lokalmatador123
Beigetreten: 26.10.2008
PokerStrategist

Der Output sieht jetzt so aus, soll ich daran noch was ändern? Download dauert ~ 5 Sekunden, die anderen Kategorien kommen weiter unten:


Antwort
Zitat
FlexiFitze Themenstarter
FlexiFitze
Beigetreten: 22.12.2006
Poker Player

Absoluter Traum. Genau so habe ich mir das vorgestellt. Wie wird der Download getriggert? Einfach durch starten eines Makros?


Antwort
Zitat
lokalmatador123
Beigetreten: 26.10.2008
PokerStrategist

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?


Antwort
Zitat
FlexiFitze Themenstarter
FlexiFitze
Beigetreten: 22.12.2006
Poker Player

Ja, können wir gerne machen. Ich kann dir auch gerne meine Datei zuschicken. Adde dich mal…


Antwort
Zitat
Markwarz357
Beigetreten: 24.09.2024
Legacy Member

Könntest du mir auch bei einer excel Datei bitte helfen?


Antwort
Zitat
Teilen: