Soccerdata Versions Save

⛏⚽ Scrape soccer data from Club Elo, ESPN, FBref, FiveThirtyEight, Football-Data.co.uk, FotMob, Sofascore, SoFIFA, Understat and WhoScored.

v1.6.1

1 month ago

Changes

:beetle: Fixes

  • [SoFIFA] Always use desktop user agent (#519) @probberechts
  • [SoFIFA] Bypass Cloudflare's anti-bot page (#517) @probberechts

:books: Documentation

  • Rename FIFA --> EA Sports FC (#516) @txz808

:package: Dependencies

  • chore(deps): update dependency pytest-mock to v3.14.0 - autoclosed (#521) @renovate
  • chore(deps): update actions/cache action to v4.0.2 (#520) @renovate
  • chore(deps): update dependency black to v24.3.0 (#518) @renovate
  • chore(deps): update dependency nox to v2024 (#506) @renovate
  • chore(deps): update dependency time-machine to v2.14.0 (#507) @renovate
  • chore(deps): update dependency mypy to v1.9.0 (#511) @renovate
  • chore(deps): update dependency pytest to v8.1.1 (#512) @renovate
  • chore(deps): update pypa/gh-action-pypi-publish action to v1.8.14 (#510) @renovate
  • chore(deps): update dependency coverage to v7.4.4 (#515) @renovate
  • chore(deps): update dependency poetry to v1.8.2 (#504) @renovate
  • chore(deps): update actions/cache action to v4.0.1 (#503) @renovate
  • fix(deps): update dependency rich to v13.7.1 (#502) @renovate
  • chore(deps): update dependency poetry to v1.8.1 (#498) @renovate
  • chore(deps): update codecov/codecov-action action to v4.1.0 (#499) @renovate
  • chore(deps): update pypa/gh-action-pypi-publish action to v1.8.12 (#501) @renovate
  • chore(deps): update dependency pytest to v8.0.2 (#497) @renovate
  • chore(deps): update dependency pylint to v3.0.4 (#496) @renovate
  • chore(deps): update codecov/codecov-action action to v4.0.2 (#495) @renovate
  • chore(deps): update dependency virtualenv to v20.25.1 (#494) @renovate
  • chore(deps): update dependency coverage to v7.4.2 (#493) @renovate

v1.6.0

2 months ago

This version adds support for scraping FotMob and Understat.

:rocket: Features

  • Add support for scraping Understat (#480) @JanVanHaaren
  • Add support for scraping FotMob (#461) @marcjbaron

:beetle: Fixes

  • [ESPN] Allow new roster format (#490) @probberechts

:package: Dependencies

  • chore(deps): update dependency pre-commit to v3.6.2 (#487) @renovate
  • chore(deps): update dependency pytest to v8.0.1 (#488) @renovate
  • fix(deps): update dependency undetected-chromedriver to v3.5.5 (#489) @renovate
  • chore(deps): update dependency black to v24.2.0 (#486) @renovate
  • chore(deps): update dependency pre-commit to v3.6.1 (#484) @renovate
  • [Nox] Replace tilde with Path.home() (#481) @JanVanHaaren
  • Update dependency sphinx-autobuild to v2024 (#478) @renovate
  • Update dependency pip to v24 (#477) @renovate
  • Update release-drafter/release-drafter action to v6 (#476) @renovate
  • Update codecov/codecov-action action to v4.0.1 (#475) @renovate
  • Update codecov/codecov-action action to v4 (#474) @renovate
  • Update dependency black to v24 (#473) @probberechts
  • Update codecov/codecov-action action to v3.1.6 (#472) @renovate
  • Update dependency pytest to v8 (#470) @renovate
  • Update dependency furo to v2024 (#471) @renovate
  • Update dependency coverage to v7.4.1 (#469) @renovate
  • Update codecov/codecov-action action to v3.1.5 (#467) @renovate
  • Update actions/cache action to v4 (#464) @renovate
  • Update dependency flake8-bugbear to v24 (#465) @renovate
  • Update dependency flake8 to v7 (#459) @renovate
  • Update actions/cache action to v3.3.3 (#463) @renovate
  • Update dependency Unidecode to v1.3.8 (#462) @renovate
  • Update dependency lxml to v5.0.1 (#460) @renovate

v1.5.3

4 months ago

Changes

:rocket: Features

  • Add option to configure caching max-age via env (#453) @probberechts
  • [WhoScored] Ignore cached events file if empty (#420) @shufinskiy

:beetle: Fixes

  • [SoFIFA] Adjust to new HTML structure (#452) @probberechts
  • [SoFIFA] Fix team xpath selector (#414) @probberechts

:rotating_light: Testing

  • [Test] Add appdata/config + refactor (#457) @probberechts
  • [CI] Run SoFIFA tests (#456) @probberechts

:construction_worker: Continuous Integration

  • [CI] Run SoFIFA tests (#456) @probberechts
  • [CI] Keep cached data across test runs (#454) @probberechts

:package: Dependencies

  • Update dependency mypy to v1.8.0 (#429) @renovate
  • Update dependency lxml to v5 (#455) @renovate
  • Update dependency coverage to v7.4.0 (#451) @renovate
  • Update dependency pytest to v7.4.4 (#450) @renovate
  • Update actions/setup-python action to v5 (#439) @renovate
  • Update dependency lxml to v4.9.4 (#448) @renovate
  • Update dependency virtualenv to v20.25.0 (#438) @renovate
  • Update dependency pre-commit to v3.6.0 (#441) @renovate
  • Update dependency black to v23.12.1 (#443) @renovate
  • Update dependency pip to v23.3.2 (#447) @renovate
  • Update dependency coverage to v7.3.3 (#444) @renovate
  • Update dependency pylint to v3.0.3 (#442) @renovate
  • Update pypa/gh-action-pypi-publish action to v1.8.11 (#437) @renovate
  • Update actions/setup-python action to v4.8.0 (#436) @renovate
  • Update dependency flake8-bugbear to v23.11.26 (#435) @renovate
  • Update dependency rich to v13.7.0 (#431) @renovate
  • Update dependency Pygments to v2.17.2 (#433) @renovate
  • Update dependency virtualenv to v20.24.7 (#434) @renovate
  • Update dependency undetected-chromedriver to v3.5.4 (#430) @renovate
  • Update dependency poetry to v1.7.1 (#432) @renovate
  • Update dependency black to v23.11.0 (#427) @renovate
  • Update dependency poetry to v1.7.0 (#428) @renovate
  • Update dependency pytest-mock to v3.12.0 (#421) @renovate
  • Update dependency pytest to v7.4.3 (#426) @renovate
  • Update dependency virtualenv to v20.24.6 (#425) @renovate
  • Update dependency pylint to v3.0.2 (#423) @renovate
  • Update dependency pip to v23.3.1 (#422) @renovate
  • Update dependency pip to v23.3 (#415) @renovate
  • Update release-drafter/release-drafter action to v5.25.0 - autoclosed (#416) @renovate
  • Update dependency black to v23.10.0 (#418) @renovate
  • Update dependency mypy to v1.6.1 (#419) @renovate
  • Update actions/checkout action to v4.1.1 (#417) @renovate

v1.5.2

6 months ago

Changes

:rocket: Features

  • [FBref] exception if opponent stats not available (#379) @probberechts

:beetle: Fixes

  • Handle Selenium 4.13 no longer supporting headless (#412) @probberechts
  • [FBref] Fix read_team_match_stats to deal with missing time (#406) @probberechts
  • [FBref] Update read_team_match_stats to deal with latest season (#384) @mhd0528
  • [SoFIFA] Fix read_leagues (#318) @probberechts

:construction_worker: Continuous Integration

  • Update RTD config (#393) @probberechts

:books: Documentation

  • Improve docs (#321) @probberechts

:package: Dependencies

  • Drop Python 3.8 support (#411) @probberechts
  • Update dependency Sphinx to v7.2.6 (#407) @renovate
  • Update dependency mypy to v1.6.0 (#408) @renovate
  • Update dependency pre-commit-hooks to v4.5.0 (#409) @renovate
  • Update dependency Sphinx to v7.2.6 (#405) @renovate
  • Update dependency Sphinx to v7.2.6 (#404) @renovate
  • Update dependency Sphinx to v7.2.6 (#401) @renovate
  • Update dependency pylint to v3 (#403) @renovate
  • Update dependency coverage to v7.3.2 (#402) @renovate
  • Update dependency Sphinx to v7.2.6 (#399) @renovate
  • Update dependency rich to v13.6.0 (#400) @renovate
  • Update dependency Sphinx to v7.2.6 (#397) @renovate
  • Update dependency Sphinx to v7.2.6 (#394) @renovate
  • Update dependency Unidecode to v1.3.7 (#392) @renovate
  • Update dependency pylint to v2.17.6 (#391) @renovate
  • Update actions/checkout action to v4.1.0 (#387) @renovate
  • Update dependency Sphinx to v7.2.6 (#388) @renovate
  • Update actions/setup-python action to v4.7.1 (#390) @renovate
  • Update dependency time-machine to v2.13.0 (#383) @renovate
  • Update dependency Sphinx to v7.2.6 (#380) @renovate
  • Update dependency rich to v13.5.3 (#381) @renovate
  • Update dependency Sphinx to v7.2.6 (#376) @renovate
  • Update dependency flake8-bugbear to v23.9.16 (#378) @renovate
  • Update dependency sphinx to v7.2.6 (#377) @renovate
  • Update dependency Sphinx to v7.2.5 (#363) @renovate
  • Update actions/checkout action to v4 (#364) @renovate
  • Update dependency black to v23.9.1 (#371) @renovate
  • Update crazy-max/ghaction-github-labeler action to v5 (#373) @renovate
  • Update dependency furo to v2023.9.10 (#374) @renovate
  • Update dependency furo to v2023.9.10 (#375) @renovate
  • Update actions/cache action to v3.3.2 (#368) @renovate
  • Update dependency virtualenv to v20.24.5 (#369) @renovate
  • Update actions/upload-artifact action to v3.1.3 (#367) @renovate
  • Update dependency coverage to v7.3.1 (#365) @renovate
  • Update dependency Sphinx to v7.2.5 (#362) @renovate
  • Update dependency Sphinx to v7.2.5 (#355) @renovate
  • Update crazy-max/ghaction-github-labeler action to v4.2.0 (#358) @renovate
  • Update dependency pytest to v7.4.1 (#360) @renovate
  • Update dependency pre-commit to v3.4.0 (#361) @renovate
  • Update dependency sphinx to v7.2.5 (#356) @renovate
  • Update dependency virtualenv to v20.24.4 (#352) @renovate
  • Update dependency Sphinx to v7.2.4 (#350) @renovate
  • Update dependency sphinx to v7.2.4 (#353) @renovate
  • Update dependency sphinx to v7.2.3 (#351) @renovate
  • Update dependency Sphinx to v7.2.2 (#349) @renovate
  • Update dependency nbsphinx to v0.9.3 (#344) @renovate
  • Update dependency nbsphinx to v0.9.3 - autoclosed (#345) @renovate
  • Update dependency Sphinx to v7.2.2 (#348) @renovate
  • Update dependency Sphinx to v7.2.2 (#347) @renovate
  • Update actions/checkout action to v3.6.0 (#346) @renovate
  • Update dependency Sphinx to v7.2.2 (#341) @renovate
  • Update dependency sphinx to v7.2.2 (#335) @renovate
  • Update dependency poetry to v1.6.1 (#339) @renovate
  • Update dependency undetected-chromedriver to v3.5.3 (#343) @renovate
  • Update dependency furo to v2023.8.19 (#338) @renovate
  • Update dependency furo to v2023.8.17 (#336) @renovate
  • Update dependency time-machine to v2.12.0 (#334) @renovate
  • Update dependency furo to v2023.8.17 (#337) @renovate
  • Update dependency Pygments to v2.16.1 (#326) @renovate
  • Update dependency mypy to v1.5.0 (#329) @renovate
  • Update dependency virtualenv to v20.24.3 (#331) @renovate
  • Update dependency coverage to v7.3.0 (#333) @renovate
  • Update pypa/gh-action-pypi-publish action to v1.8.10 (#330) @renovate
  • Update dependency sphinx to v7.1.2 (#325) @renovate
  • Update dependency Sphinx to v7.1.2 (#324) @renovate
  • Update dependency undetected-chromedriver to v3.5.1 (#327) @renovate
  • Update dependency rich to v13.5.2 (#323) @renovate
  • Update dependency rich to v13.5.1 (#320) @renovate
  • Update dependency flake8 to v6.1.0 (#319) @renovate

v1.5.1

9 months ago

Changes

:beetle: Fixes

  • [FBref] Handle missing Scores & Fixtures page on the Big 5 European Leagues Stats page (#284) @lorenzodb1
  • [FBref] Handle canceled / forfeited games (#309) @lorenzodb1
  • [FBref] Handle teammates with identical name (#306) @probberechts

:construction_worker: Continuous Integration

  • Add 'dependencies' label to renovate PRs (#312) @probberechts

:books: Documentation

  • [FBref] Update API docs (#307) @probberechts

:package: Dependencies

  • Update dependency virtualenv to v20.24.1 (#308) @renovate
  • Update dependency sphinx to v7.1.1 (#316) @renovate
  • Update dependency furo to v2023.7.26 (#315) @renovate
  • Update dependency virtualenv to v20.24.2 (#314) @renovate
  • Update dependency pip to v23.2.1 (#313) @renovate
  • Update dependency undected-chromedriver to v3.5.0 (#311) @probberechts

v1.5.0

9 months ago

Changes

:rocket: Features

  • [FBref] Informative errors when merge fails (#303) @probberechts
  • Add support for Women's World Cup (#302) @probberechts
  • [MatchHistory] Drop empty cols (#264) @probberechts

:beetle: Fixes

  • [FBref] Remove non-data rows from output dataframe (#289) @probberechts
  • [FBref] filter leagues in read_team_match_stats (#290) @probberechts
  • [FBref] Handle missing flag icon in Squad or Nation column (#285) @lorenzodb1
  • [FBref] Fix invalid cache filenames in read_team_season_stats (#283) @lorenzodb1
  • [MatchHistory] Fix date format bug (#263) @probberechts

:package: Dependencies

  • Update dependency pandas to v2 (#208) @renovate
  • Update dependency pip to v23.2 (#301) @renovate
  • Update dependency virtualenv to v20.24.0 (#300) @renovate
  • Update actions/setup-python action to v4.7.0 (#298) @renovate
  • Update pypa/gh-action-pypi-publish action to v1.8.8 (#297) @renovate
  • Update dependency black to v23.7.0 (#296) @renovate
  • Update dependency time-machine to v2.11.0 (#295) @renovate
  • Update dependency flake8-bugbear to v23.7.10 (#294) @renovate
  • Update dependency nox-poetry to v1.0.3 (#293) @renovate
  • Update dependency lxml to v4.9.3 (#291) @renovate
  • Update dependency pandas to v2.0.3 (#287) @renovate
  • Update release-drafter/release-drafter action to v5.24.0 (#280) @renovate
  • Update pypa/gh-action-pypi-publish action to v1.8.7 (#279) @renovate
  • Update dependency time-machine to v2.10.0 (#275) @renovate
  • Update dependency pytest to v7.4.0 (#278) @renovate
  • Update dependency mypy to v1.4.0 (#274) @renovate
  • Update dependency undetected-chromedriver to v3.5.0 (#267) @renovate
  • Update dependency pytest-mock to v3.11.1 (#272) @renovate
  • Update dependency virtualenv to v20.23.1 (#273) @renovate
  • Update dependency rich to v13.4.2 (#268) @renovate
  • Update dependency pre-commit to v3.3.3 (#270) @renovate
  • Update dependency pytest to v7.3.2 (#266) @renovate
  • Update actions/checkout action to v3.5.3 (#265) @renovate
  • Update dependency selenium to v4.10.0 (#262) @renovate
  • Update dependency flake8-bugbear to v23.6.5 (#261) @renovate
  • Update dependency poetry to v1.5.1 (#257) @renovate
  • Update dependency rich to v13.4.1 (#258) @renovate
  • Update dependency coverage to v7.2.7 (#256) @renovate
  • Update dependency poetry to v1.5.0 (#147) @renovate
  • Update dependency nbsphinx to v0.9.2 (#255) @renovate
  • Update actions/setup-python action to v4.6.1 (#254) @renovate
  • Update dependency furo to v2023.5.20 (#253) @renovate

v1.4.0

11 months ago

:rocket: Features

  • [FBref] Add read_team_match_stats() (#195)
  • [FBref] Add read_events() to retrieve the timing of goals, cards and substitutions in a game
  • [FBref] Extend read_lineup() function with "position" and "minutes played" columns

:boom: Breaking Changes

  • [SoFIFA] Major fixes and API changes
  • [FBref] Standardize column names

:beetle: Fixes

  • [FBref] Handle missing match shots data

:construction_worker: Continuous Integration

  • Automate future releases using Release Drafter

:package: Dependencies

  • Update dependency Sphinx to v7 (#237) @renovate
  • Update dependency furo to v2023.5.20 (#250) @renovate
  • Update dependency pre-commit to v3.3.2 (#248) @renovate
  • Update dependency requests to v2.31.0 (#251) @renovate
  • Update codecov/codecov-action action to v3.1.4 (#247) @renovate
  • Update dependency mypy to v1.3.0 (#245) @renovate
  • Update dependency flake8-bugbear to v23.5.9 (#244) @renovate
  • Update dependency undetected-chromedriver to v3.4.7 (#243) @renovate
  • Update dependency selenium to v4.9.1 (#241) @renovate
  • Update dependency pylint to v2.17.4 (#240) @renovate
  • Update dependency pre-commit to v3.3.1 (#238) @renovate
  • Update pypa/gh-action-pypi-publish action to v1.8.6 (#239) @renovate
  • Update dependency requests to v2.30.0 (#235) @renovate
  • Update dependency coverage to v7.2.4 (#236) @renovate
  • Update dependency requests to v2.29.0 (#233) @renovate
  • Update dependency rich to v13.3.5 (#234) @renovate
  • Update dependency pip to v23.1.2 (#232) @renovate
  • Update dependency sphinx to v6.2.1 (#230) @renovate
  • Update dependency pylint to v2.17.3 (#231) @renovate
  • Update dependency nox to v2023 (#228) @renovate
  • Update dependency Sphinx to v6.2.0 (#229) @renovate
  • Update dependency pip to v23.1.1 (#227) @renovate

v1.3.0

1 year ago

New features

Add support for scraping World Cup data

The World Cup was added to the default available leagues for the WhoScored and FBref readers. Other tournaments can be added by modifying the league_dict.json config file.

from soccerdata import WhoScored, FBref

ws = WhoScored(leagues="INT-World Cup", seasons="2022")
fb = FBref(leagues="INT-World Cup", seasons="2022")

Changes

  • The WhoScored reader now uses the non-headless mode by default. Scraping in headless mode typically results in getting blocked quickly. The old behaviour can be recovered by initializing the reader as WhoScored(..., headless=True).

Fixes

  • The WhoScored reader can now deal with an empty match schedule, which can occur before the start of a season or tournament round.

v1.2.0

1 year ago

New features

Faster scraping of Big 5 leagues stats (by @andrewRowlinson)

FBref has pages for the big five European leagues that allow you to more efficiently get team and player data from multiple leagues. This commit adds a special "Big 5 European Leagues Combined" league option to get data from these pages.

import soccerdata as sd
fbref = sd.FBref(leagues="Big 5 European Leagues Combined", seasons="20-21")
team_season_stats = fbref.read_team_season_stats(stat_type="standard")
player_season_stats = fbref.read_player_season_stats(stat_type="standard")

v1.1.0

1 year ago

New features

FBref

Faster scraping of player season stats (#69)

Previously, the fbref.read_team_season_stats method visited the page of each individual team in a league to obtain stats for players in a league. FBRef now has a single page for each league/season where player stats can be obtained for each player in the league (e.g., https://fbref.com/en/comps/9/stats/Premier-League-Stats). Due to this change the fbref.read_team_season_stats(...) method now uses 15-20x less requests, leading to a large speed-up.

Support retrieving "Opponent Stats" (#78)

A "opponent_stats" flag was added to the fbref.read_season_stats(...) function, which enables retrieving the "Opponent Stats" table of a team.

Always group "MP" under "Playing Time" (#79)

FBRef is inconsistent in how it displays the "MP" (Matches Played) column. For some seasons, it is displayed as a separate category, while it is grouped under "Playing Time" for other seasons. This results in a column with NaN values when two seasons are merged. Therefore, the "MP" column is now always put under "Playing Time".

Docs

Add docs for specifying custom proxy (#83)

Not all Tor distribution use the same default port of 9050. The docs now describe how to configure a custom port.