LanusStats es una librería Python de scraping orientada al fútbol y los datos. Su objetivo es abstraer la complejidad de extraer información de múltiples plataformas en funciones simples que devuelven DataFrames de pandas listos para analizar o visualizar.
Instalación
pip install LanusStats
Para actualizar a la última versión:
pip install --upgrade LanusStats
Fuentes disponibles
Cómo se usa
Funciones generales
Para saber qué páginas tienen módulo disponible:
import LanusStats as ls
ls.get_available_pages()
Para ver las ligas disponibles de una página:
ls.get_available_leagues(page)
Para ver las temporadas disponibles de una liga:
ls.get_available_season_for_leagues(page, league)
FBRef
import LanusStats as ls
fbref = ls.Fbref()
Estadísticas de equipos
Scrapear una estadística específica para todos los equipos de una liga:
fbref.get_teams_season_stats('gca', 'Copa de la Liga', season='2024', save_csv=False, stats_vs=False, change_columns_names=False, add_page_name=False)
change_columns_names: renombra columnas de tipoUnnamed: Xadd_page_name: agrega el nombre de la estadística como prefijo a las columnas (útil al hacer merge entre tablas)save_csv: exporta el resultado a un archivo CSVstats_vs: incluye las estadísticas "en contra" que FBRef provee
Para obtener estadísticas a favor y en contra en un solo paso:
fbref.get_vs_and_teams_season_stats('gca', 'Copa de la Liga', season='2024', save_excel=False, stats_vs=False, change_columns_names=False, add_page_name=False)
Devuelve dos DataFrames (a favor y en contra). save_excel los exporta en un .xlsx con dos hojas.
Para scrapear todas las estadísticas disponibles de una liga:
fbref.get_all_teams_season_stats('Copa de la Liga', '2024', save_csv=False, stats_vs=False, change_columns_names=False, add_page_name=False)
Estadísticas de jugadores
fbref.get_player_season_stats('gca', 'Copa de la Liga', save_csv=False, add_page_name=False)
Para scrapear todas las estadísticas de jugadores en una sola llamada:
fbref.get_all_player_season_stats("Copa de la Liga", "2024", save_csv=False, add_page_name=False)
Estadísticas de un partido
fbref.get_general_match_team_stats("https://fbref.com/en/matches/77d7e2d6/Arsenal-Luton-Town-April-3-2024-Premier-League")
Tabla de posiciones
fbref.get_tournament_table("https://fbref.com/en/comps/9/Premier-League-Stats")
FotMob
import LanusStats as ls
fotmob = ls.FotMob()
Tablas de liga
Obtener las tablas de una temporada (posiciones, xG, etc.):
fotmob.get_season_tables("Premier League", "2022/2023", "xg")
Estadísticas de temporada
Estadísticas de jugadores:
fotmob.get_players_stats_season("Premier League", "2023/2024", "expected_assists_per_90")
Estadísticas de equipos:
fotmob.get_teams_stats_season("Premier League", "2023/2024", "poss_won_att_3rd_team")
Datos de un partido
El match_id es el número al final de la URL. Ejemplo: https://www.fotmob.com/es/matches/afc-bournemouth-vs-manchester-united/2yrx85#4193851 → 4193851
Mapa de tiros:
fotmob.get_match_shotmap(4193851)
Estadísticas generales de los equipos:
fotmob.get_general_match_stats(4193851)
Datos de un jugador
El player_id es el número en la URL del jugador. Ejemplo: https://www.fotmob.com/es/players/1203665/alejandro-garnacho → 1203665
Los parámetros de temporada y competición corresponden a la posición en el dropdown de FotMob, comenzando desde 0.
Mapa de tiros del jugador:
fotmob.get_player_shotmap("1", "0", 1203665)
Percentiles:
fotmob.get_player_percentiles("1", "0", 1203665)
Estadísticas de temporada:
fotmob.get_player_season_stats("1", "0", 1203665)
Toda la información disponible del jugador:
fotmob.get_player_data(1203665)
365Scores
import LanusStats as ls
threesixfivescores = ls.ThreeSixFiveScores()
La URL de un partido tiene la forma: https://www.365scores.com/es-mx/football/match/copa-de-la-liga-profesional-7214/lanus-union-santa-fe-869-7206-7214#id=4033824
Estadísticas de liga
Top performers de distintas estadísticas para la temporada actual de una liga:
threesixfivescores.get_league_top_players_stats(league="Argentina Liga Profesional")
league: liga disponible enget_available_leagues("365Scores")
Devuelve un DataFrame con jugadores, posiciones, estadísticas y valores.
Datos de un partido
Mapa de tiros (si el partido lo tiene):
threesixfivescores.get_match_shotmap("https://www.365scores.com/es-mx/football/match/copa-de-la-liga-profesional-7214/lanus-union-santa-fe-869-7206-7214#id=4033824")
Devuelve un DataFrame con cada disparo, coordenadas, xG, xGoT y resultado del tiro. Lanza MatchDoesntHaveInfo si el partido no tiene mapa de tiros.
Estadísticas generales de los equipos:
threesixfivescores.get_match_general_stats("https://www.365scores.com/es-mx/football/match/copa-de-la-liga-profesional-7214/lanus-union-santa-fe-869-7206-7214#id=4033824")
Devuelve un DataFrame con las estadísticas del partido por equipo (posesión, tiros, pases, etc.).
Estadísticas de tiempo de juego (tiempo efectivo, tiempo perdido, etc.):
threesixfivescores.get_match_time_stats("https://www.365scores.com/es-mx/football/match/copa-de-la-liga-profesional-7214/lanus-union-santa-fe-869-7206-7214#id=4033824")
Lanza MatchDoesntHaveInfo si el partido no tiene esta información.
Datos de jugadores en un partido
Información general de los jugadores que participaron:
threesixfivescores.get_players_info("https://www.365scores.com/es-mx/football/match/copa-de-la-liga-profesional-7214/lanus-union-santa-fe-869-7206-7214#id=4033824")
Mapa de calor de un jugador en un partido:
threesixfivescores.get_player_heatmap_match(player="Lautaro Martinez", match_url="https://www.365scores.com/es-mx/football/match/copa-de-la-liga-profesional-7214/lanus-union-santa-fe-869-7206-7214#id=4033824")
player: nombre del jugador tal como figura en 365Scores
Devuelve una imagen PIL del mapa de calor.
SofaScore
import LanusStats as ls
sofascore = ls.SofaScore()
Datos de un partido
El match_url es la URL completa del partido. Ejemplo: https://www.sofascore.com/arsenal-manchester-united/KR#id:11352532
Mapa de tiros:
sofascore.get_match_shotmap("https://www.sofascore.com/arsenal-manchester-united/KR#id:11352532", save_csv=False)
Estadísticas de jugadores (devuelve una lista: [0] local, [1] visitante):
sofascore.get_players_match_stats("https://www.sofascore.com/arsenal-manchester-united/KR#id:11352532")
Posiciones promedio (devuelve una lista: [0] local, [1] visitante):
sofascore.get_players_average_positions("https://www.sofascore.com/arsenal-manchester-united/KR#id:11352532")
Lineups:
sofascore.get_lineups("https://www.sofascore.com/arsenal-manchester-united/KR#id:11352532")
Mapa de calor de un jugador en un partido:
sofascore.get_player_heatmap("https://www.sofascore.com/arsenal-manchester-united/KR#id:11352532", "Alejandro Garnacho")
El nombre del jugador debe ser exactamente como lo muestra SofaScore.
Eventos de un jugador en un partido:
sofascore.get_player_match_events("https://www.sofascore.com/arsenal-manchester-united/KR#id:11352532", "Alejandro Garnacho", events=None)
events: puede ser una lista con uno o más de['passes', 'ball-carries', 'dribbles', 'defensive']. Si esNone, devuelve todos.
Estadísticas de jugador por temporada
Mapa de calor de un jugador en un torneo:
sofascore.get_player_season_heatmap("Argentina Liga Profesional", "2024", 832213)
El tercer parámetro es el ID del jugador, visible en su URL: https://www.sofascore.com/player/joaquin-pereyra/832213
Estadísticas de jugadores de un torneo completo:
sofascore.scrape_league_stats(league="Argentina Liga Profesional", season="2024", save_csv=False, accumulation="per90", selected_positions=["Goalkeepers"])
league: liga disponible enget_available_leagues("Sofascore")season: temporada disponible enget_available_season_for_leagues("Sofascore", league)save_csv: exporta el resultado a CSVaccumulation: forma de pedir las estadísticas. Valores:total,per90,perMatchselected_positions: grupo de jugadores. Valores:['Goalkeepers', 'Defenders', 'Midfielders', 'Forwards']
Transfermarkt
import LanusStats as ls
transfermarkt = ls.Transfermarkt()
Valoraciones de planteles
transfermarkt.get_league_teams_valuations(league="Primera Division Argentina", season="2024")
league: liga disponible enget_available_leagues("Transfermarkt")season: temporada (por ejemplo:"2024"o"2023/2024")
Plantel de un equipo
transfermarkt.scrape_players_for_teams(team_name="Club Atletico Lanus", team_id="333", season="2024")
El team_name y team_id se sacan de la URL del equipo. Ejemplo: https://www.transfermarkt.com.ar/club-atletico-lanus/startseite/verein/333
team_name: nombre respetando la URL, sin guiones mediosteam_id: número al final de la URL
Datos de un jugador
El player_id se saca de la URL del jugador. Ejemplo: https://www.transfermarkt.com.ar/marcelino-moreno/profil/spieler/456617 → 456617
Historial de transferencias:
transfermarkt.get_player_transfer_history(player_id="456617")
Evolución del valor de mercado:
transfermarkt.get_player_market_value(player_id="456617")
Posiciones jugadas:
transfermarkt.get_player_positions_played(player_name="Marcelino Moreno", player_id="456617")
Datos de penales para arqueros:
transfermarkt.get_keepers_penalty_data(player_name="Emiliano Martinez", player_id="111873")
Partidos jugados:
transfermarkt.get_player_played_data(player_name="Emiliano Martinez", player_id="111873")
Visualizaciones
Las visualizaciones combinan el scraping y el ploteo en una sola función, listas para usar o customizar.
Match momentum de un partido de FotMob:
ls.visualizations.fotmob_match_momentum_plot(match_id=4193851, save_fig=False)
Hexbin de tiros de un jugador en FotMob:
ls.visualizations.fotmob_hexbin_shotmap('La Liga', '2023/2024', 711231)
player_id: ID del jugador en FotMob. Ejemplo:https://www.fotmob.com/es/players/711231/gorka-guruzeta→711231
Mapa de tiros de un partido de 365Scores:
ls.visualizations.threesixfivescores_match_shotmap('https://www.365scores.com/es-mx/football/match/copa-sudamericana-389/lanus-metropolitanos-fc-869-13830-389#id=4072240')
Evolución del valor de mercado según Transfermarkt:
ls.visualizations.transfermarkt_player_market_value(player_id='111873')
Eventos de un jugador en un partido de SofaScore:
ls.visualizations.sofascore_plot_match_events('https://www.sofascore.com/es/football/match/banfield-racing-club/pobsuob#id:15270114', 'Santiago Sosa', events=None, dashboard=True)
dashboard=True: agrupa todas las figuras en una sola imagen
Créditos
Más contenido
Unite al Discord de la comunidad hispanohablante de fútbol y datos.
Para ver todo el contenido de LanusStats: linktr.ee/lanusstats
Metadata
Release files for lanusstats 2.1.13
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| lanusstats-2.1.13.tar.gz | 636.9 kB | Without provenance | Details for lanusstats-2.1.13.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| lanusstats-2.1.13-py3-none-any.whl | Python 3 | none | any | Details for lanusstats-2.1.13-py3-none-any.whl |
Total release size: 1.3 MB
Release files / lanusstats-2.1.13.tar.gz
| Download URL | lanusstats-2.1.13.tar.gz |
|---|---|
| Size | 636.9 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
97dd3b6cde1e35e73e23b7d497316bd275e03c937315e313747174b72f84fd8c
|
|
BLAKE2b-256 checksum How to use checksums |
e6dd784cdabc270769f76015592e2542c39a441c0f7cb6cb00624ac333e30316
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.14.7
|
Release files / lanusstats-2.1.13-py3-none-any.whl
| Download URL | lanusstats-2.1.13-py3-none-any.whl |
|---|---|
| Size | 639.4 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
e9f15e1d08571060f353b9bf693da996b5dc58aecff6dda975f3d04ce8a98738
|
|
BLAKE2b-256 checksum How to use checksums |
9d8969f3119de59779580e9e54686f010bc703a741adb0bbe36e0fbc5c818da8
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.14.7
|
Security for lanusstats 2.1.13
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.