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 | |
|---|---|---|---|
| lanusstats-2.1.13.tar.gz | 636.9 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| lanusstats-2.1.13-py3-none-any.whl | Python 3 | none | any | Details |
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
|