Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Scraping

Browser-Setup

  • WebDriver: thirtyfour 0.35
  • ChromeDriver: localhost:9515 (systemd Service)
  • Modus: Headless (konfigurierbar via HEADLESS env)
  • Navigation: 4 Versuche mit exponentiellem Backoff
  • HTML-Parsing: driver.source() + scraper crate (eval_js gibt null zurueck!)

Neobet

URL: https://neobet.de/de/Sportwetten/Heute+Morgen/Fussball/Alle

Ablauf:

  1. Seite laden, bis zu 30s auf Rendering warten
  2. HTML-Source holen
  3. Liga-Links parsen: a[href*="/Fussball/"]
  4. Land + Liga aus Breadcrumbs extrahieren

Ergebnis: Vec<NeobetLeague> mit Land, Liga, Spielanzahl

Einzelne Liga-Matches: URL Sportwetten/{Heute|Morgen}/Fussball/{Land}/{Liga}

  • Team-Paare aus Match-Containern extrahieren

Flashscore

Base URL: https://www.flashscore.com/

Match-Liste

Date Picker Navigation (URL-Param ?d= wird von der SPA ignoriert!):

  1. Flashscore laden, Cookies wegklicken
  2. Tage-Differenz berechnen (Heute = 0)
  3. Overlay-iFrames verstecken (display:none)
  4. Pfeil-Button klicken: button[data-day-picker-arrow="next"] oder "prev"
  5. 1.5s Pause nach jedem Klick
  6. Validierung: button[data-testid="wcl-dayPickerButton"] Text pruefen (Format “DD/MM Tag”)

Match-Extraktion aus HTML:

  • Laender-Header: div.event__header mit span.event__title--type
  • Match-Rows: div.event__match
  • Match-ID: id="g_1_{matchId}"
  • Team-IDs: a.event__participant → href /team/{name}/{teamId}/
  • Zeiten: div.event__time
  • Scores (beendete Spiele): span.event__score

H2H (3 Seiten pro Match)

URL-Schema: /match/football/{homeId}/{awayId}/h2h/{tab}/?mid={matchId}

TabWas
homeNur Heimspiele des Heimteams + Auswaertsspiele des Auswaertsteams
awayUmgekehrt
overallAlle Spiele beider Teams

Ablauf pro Seite:

  1. Navigieren, 3s warten
  2. “Show more” Buttons in allen Sektionen klicken
  3. HTML-Source holen
  4. Score-Elemente: span.h2h__result > span > span (2 Child-Spans!)
  5. Letzte 15 Ergebnisse pro Team extrahieren

Berechnungen aus Ergebnissen:

  • Durchschnitte: avg_scored, avg_conceded (Tore erzielt/kassiert)
  • Intervalle: Spiele zwischen Events fuer o1.5, o2.5, o3.5, o4.5, u0.5, u1.5, BTS, 1TS
  • Streaks: Aktuelle Serie seit letztem Event

Odds (7 Seiten pro Match)

URL-Schema: Aus h2h_url die Match-Base ableiten, dann /odds/{suffix}/

SeiteURL-SuffixSpalten
O/U Full Timeodds/over-under/full-time/2 + Threshold
O/U 1st Halfodds/over-under/1st-half/2 + Threshold
O/U 2nd Halfodds/over-under/2nd-half/2 + Threshold
BTTSodds/both-teams-to-score/2
1X2odds/1x2-odds/full-time/3
Double Chanceodds/double-chance/3
Draw No Betodds/draw-no-bet/2

HTML-Selektoren:

  • Zeile: .ui-table__row
  • Buchmacher: img[class*="logoImage"] → alt
  • Schwellwert (O/U): [class*="oddsValue"] → Text
  • Quoten: .oddsCell__odd → Text

Averaging: Alle Buchmacher-Quoten pro Schwellwert gemittelt.

Error Handling: Graceful - Fehler bei einer Odds-Seite = warn-Log, Match wird ohne diese Quoten gespeichert.