Scraping Python, ESPN Liga BBVA y OTRAS [Parte 2]
Hoy vamos a tener 1 solo código para las 4 ligas principales del mundo como lo son: Liga BBVA, La Bundesliga, La Premier y La serie A... mi meta es crear una Base de Datos interesante con lo mejor de estas 4 ligas, y el código de hoy nos acerca mas a nuestra meta.
Con el siguiente código vamos a ir dando forma a los campos que vamos a utilizar en una de las tablas de nuestra interesante Base de Datos:
import urllib2, re
from bs4 import BeautifulSoup
import re
from prettytable import PrettyTable
# url that we are scraping
urls = ["http://www.espnfc.us/english-premier-league/23/table" , "http://www.espnfc.us/spanish-primera-division/15/table" , "http://www.espnfc.us/german-bundesliga/10/table" , "http://www.espnfc.us/italian-serie-a/12/table"]
hh = 0
for url in urls:
page = urllib2.urlopen(url)
soup = BeautifulSoup(page, "lxml")
table = soup.find('table')
rows = table.find_all('tr')
results = []
for row in rows:
table_headers = row.find_all('th')
if table_headers:
results.append([headers.get_text() for headers in table_headers])
table_data = row.find_all('td')
if table_data:
results.append([data.get_text() for data in table_data])
tabla_formateada = []
nueva_form = []
equipo_nombre = []
posicion_eq = []
#Listas para totales
PJ_totales = []
PG_totales = []
PE_totales = []
PP_totales = []
Goles_Favor_totales = []
Goles_contra_totales = []
Goles_Diferencia = []
Puntos_tot = []
#Listas para casa
PJ_totales = []
PG_totales = []
PE_totales = []
PP_totales = []
Goles_Favor_totales = []
Goles_contra_totales = []
#Listas para visita
PJ_totales = []
PG_totales = []
PE_totales = []
PP_totales = []
Goles_Favor_totales = []
Goles_contra_totales = []
i = 0
for datos in results:
if i >= 2:
while ( u'\xa0' or u'\n' or u'' ) in datos:
if (u'') in datos :
datos.remove(u'')
elif u'\n' in datos:
datos.remove(u'\n')
elif u'\xa0' in datos:
datos.remove(u'\xa0')
tabla_formateada.append(datos)
i += 1
for h in tabla_formateada:
posicion = h[0]
posicion_eq.append(posicion)
equipo_nom = h[1]
equipo_nom = equipo_nom.strip()
equipo_nombre.append(equipo_nom)
#Listas para totales
PJ_totales = []
PG_totales = []
PE_totales = []
PP_totales = []
Goles_Favor_totales = []
Goles_contra_totales = []
Goles_Dif = h[-2]
Goles_Diferencia.append(Goles_Dif)
Puntos = h[-1]
Puntos_tot.append(Puntos)
#Listas para casa
PJ_totales = []
PG_totales = []
PE_totales = []
PP_totales = []
Goles_Favor_totales = []
Goles_contra_totales = []
#Listas para visita
PJ_totales = []
PG_totales = []
PE_totales = []
PP_totales = []
Goles_Favor_totales = []
Goles_contra_totales = []
numero_items = len(posicion_eq)
table = PrettyTable(["Posicion", "Equipo", "Puntos", "Dif_Gol"])
i = 0
for i in range(0,numero_items):
table.add_row([posicion_eq[i], equipo_nombre[i], Goles_Diferencia[i] , Puntos_tot[i]])
i += 1
if hh == 0:
print " "
print " "
print " Liga Premier"
elif hh == 1:
print " Liga BBVA"
elif hh == 2:
print " Bundesliga"
elif hh == 3:
print " Seie A"
print table
hh += 1
print " "
print " "
Hay listas que se pueden llenar pero no las he llenado por que lo pienso hacer cuando comencemos con nuestra Base de Datos, la salida del programa es la siguiente:
Liga Premier
+----------+----------------------+--------+---------+
| Posicion | Equipo | Puntos | Dif_Gol |
+----------+----------------------+--------+---------+
| 1 | Manchester City | 6 | 9 |
| 2 | Chelsea | 5 | 9 |
| 3 | Manchester United | 5 | 9 |
| 4 | Everton | 2 | 7 |
| 5 | Hull City | 2 | 6 |
| 6 | Middlesbrough | 1 | 5 |
| 7 | Tottenham Hotspur | 1 | 5 |
| 8 | Arsenal | 1 | 4 |
| 9 | Leicester City | 0 | 4 |
| 10 | West Bromwich Albion | 0 | 4 |
| 11 | Liverpool | -1 | 4 |
| 12 | West Ham United | -2 | 3 |
| 13 | Burnley | -2 | 3 |
| 14 | Swansea City | -2 | 3 |
| 15 | Southampton | -2 | 2 |
| 16 | Sunderland | -2 | 1 |
| 17 | Crystal Palace | -2 | 1 |
| 18 | Watford | -3 | 1 |
| 19 | AFC Bournemouth | -3 | 1 |
| 20 | Stoke City | -4 | 1 |
+----------+----------------------+--------+---------+
Liga BBVA
+----------+---------------------+--------+---------+
| Posicion | Equipo | Puntos | Dif_Gol |
+----------+---------------------+--------+---------+
| 1 | Las Palmas | 6 | 6 |
| 2 | Barcelona | 5 | 6 |
| 3 | Real Madrid | 4 | 6 |
| 4 | Sevilla FC | 2 | 4 |
| 5 | Sporting Gijón | 1 | 4 |
| 6 | Deportivo La Coruña | 1 | 4 |
| 7 | Leganes | 1 | 4 |
| 8 | Eibar | 0 | 3 |
| 9 | Real Sociedad | -1 | 3 |
| 10 | Málaga | 0 | 2 |
| 11 | Atletico Madrid | 0 | 2 |
| 12 | Villarreal | 0 | 2 |
| 13 | Alavés | 0 | 2 |
| 14 | Espanyol | -2 | 1 |
| 15 | Osasuna | -2 | 1 |
| 16 | Granada | -4 | 1 |
| 17 | Real Betis | -4 | 1 |
| 18 | Celta Vigo | -2 | 0 |
| 19 | Athletic Bilbao | -2 | 0 |
| 20 | Valencia | -3 | 0 |
+----------+---------------------+--------+---------+
Bundesliga
+----------+--------------------------+--------+---------+
| Posicion | Equipo | Puntos | Dif_Gol |
+----------+--------------------------+--------+---------+
| 1 | Bayern Munich | 6 | 3 |
| 2 | FC Cologne | 2 | 3 |
| 2 | VfL Wolfsburg | 2 | 3 |
| 4 | Borussia Dortmund | 1 | 3 |
| 4 | Hertha Berlin | 1 | 3 |
| 4 | Borussia Monchengladbach | 1 | 3 |
| 7 | Eintracht Frankfurt | 1 | 3 |
| 8 | TSG Hoffenheim | 0 | 1 |
| 8 | RB Leipzig | 0 | 1 |
| 10 | Hamburg SV | 0 | 1 |
| 10 | FC Ingolstadt 04 | 0 | 1 |
| 12 | SC Freiburg | -1 | 0 |
| 12 | Bayer Leverkusen | -1 | 0 |
| 12 | Mainz | -1 | 0 |
| 15 | Schalke 04 | -1 | 0 |
| 16 | SV Darmstadt 98 | -2 | 0 |
| 16 | FC Augsburg | -2 | 0 |
| 18 | Werder Bremen | -6 | 0 |
+----------+--------------------------+--------+---------+
Seie A
+----------+----------------+--------+---------+
| Posicion | Equipo | Puntos | Dif_Gol |
+----------+----------------+--------+---------+
| 1 | Genoa | 4 | 6 |
| 2 | Juventus | 2 | 6 |
| 3 | Sampdoria | 2 | 6 |
| 4 | AS Roma | 4 | 4 |
| 5 | US Pescara | 3 | 4 |
| 6 | Napoli | 2 | 4 |
| 7 | Torino | 3 | 3 |
| 8 | Chievo Verona | 1 | 3 |
| 9 | Lazio | 0 | 3 |
| 10 | Fiorentina | 0 | 3 |
| 11 | AC Milan | -1 | 3 |
| 12 | Udinese | -2 | 3 |
| 13 | Sassuolo | -2 | 3 |
| 14 | Bologna | -3 | 3 |
| 15 | Palermo | -1 | 1 |
| 16 | Cagliari | -2 | 1 |
| 17 | Internazionale | -2 | 1 |
| 18 | Atalanta | -2 | 0 |
| 19 | Crotone | -3 | 0 |
| 20 | Empoli | -3 | 0 |
+----------+----------------+--------+---------+
Voy a hacer realmente corta estas entradas por que esoty un poco cansado creando el codigo, voy a recalcar algunas cosas del mismo:
Por ejemplo la linea urls = ["http://www.espnfc.us/english-premier-league/23/table" , "http://www.espnfc.us/spanish-primera-division/15/table" , "http://www.espnfc.us/german-bundesliga/10/table" , "http://www.espnfc.us/italian-serie-a/12/table"] que es importante si queremos agregar otras ligas, y la linea equipo_nom = equipo_nom.strip() que es importante para formatear una cadena, Hasta aquí lo vamos a dejar por esta entrada en un rato subo la otra...
Dios les Bendiga