Python Scraping NFL [Parte preliminar]


Les cuento que he estado codificando el programa que espero sea de mucho provecho para el que pase por aquí como lo es para mi el aprendizaje que me va quedando cada vez que intento hacer algo en python…. de verdad que estos Días han sido de mucho aprendizaje y re-aprendizaje, la verdad es que se me pasan tantas cosas por la mente cuando estoy escribiendo código que tengo que anotar muchas cosas y cada vez tengo mejores ideas para proyectos que he dejado a medio empezar…. Lo único malo es que cuando no tenemos un diseño Real o metódico de que vamos a hacer y cual es el alcance normalmente no llegamos a cumplir con nuestras expectativas, por eso siempre trato de mirar las cosas desde varios ángulos.

Es precisamente esto lo que me ha pasado con el programa que he estado haciendo en mis ratos libres para la NFL(Ojala trabajara para ellos jajaja), mas bien el programa estadístico sobre la NFL,  les cuento había planificado hacerlo así:

  1. entrar a la pagina resultados y buscar todos los equipos
  2. entrar a cada equipo, agregar los datos del Equipo a la Tabla Equipo
  3. entrar a estadísticas del Equipo agregar los Datos a la tabla estadísticas_equipo
  4. entrar a cada jugador y agregar los datos importantes a la Tabla Jugadores_NFL

Ya aquí ahí un problema por que no es natural que el flujo de los datos sea de esta manera, el paso 4 debería ir antes que el 3 si queremos hacer una BD Relacional, por lo que aunque voy a colocar el código interesante que cree hasta ahora para buscar a los jugadores es decir hasta el Paso 4 sin tocar el 3(ojo no he agregado los datos a la BD) este es el código:

import requests, urllib2
from bs4 import BeautifulSoup
import re

### Pagina primaria para buscar los datos
url = 'http://www.espn.com.ve/futbol-americano/nfl/resultados'


html = urllib2.urlopen(url).read()



equipos_para_estadisticas  = []

### Buscamos las estadisticas de los equipos con esta expresion regular
enlaces_2 = re.findall('http://www.espn.com.ve/futbol-americano/nfl/equipo/estadisticas/_/nombre/(\S+?)"', html)
for enlace in enlaces_2:
    equipos_para_estadisticas.append(enlace)

    





jugadores = []

### Entramos a las estadisticas y buscamos a los jugadores
for equipos in equipos_para_estadisticas:
      url2 = 'http://www.espn.com.ve/futbol-americano/nfl/equipo/estadisticas/_/nombre/' + equipos
      
      page2 = urllib2.urlopen(url2).read()
            
      enlaces = re.findall('href="(http://www.espn.com.ve/futbol-americano/nfl/jugador/_/id/.*?)"', page2)
      
      jugadores_americano = []
      datos_jugador = []
      
      ### Entramos a la URL de cada jugador y extraemos los datos 

      for enlace2 in enlaces:
            print enlace2
            url_new_3 = enlace2
            
            page3 = urllib2.urlopen(url_new_3)
            
            soup3 = BeautifulSoup(page3, 'lxml')
            
            tables3 = soup3.find_all('div',class_="player-bio" )

            datos_jugador_siempre = []

            for row in tables3:
	        
                print row.text.strip().replace('\n',' ').replace("\t", " ").replace("\r", " ")
                
                d_jugador = row.text.strip().replace('\n',' ').replace("\t", " ").replace("\r", " ")
                    
                datos_jugador_siempre.append(d_jugador)
                for lista in datos_jugador_siempre:
                        numero_camiseta = lista[0:3] 
                        
                        print "Num de camiseta:", numero_camiseta
                        
                        posicion_jugador = lista[4:6] 
                        
                        print "Posicion:", posicion_jugador                        
                        
                        altura_jugador = re.findall('#[0-9].+? [A-Z].([0-9]\' [0-9])',lista )
                        if altura_jugador == []:
			    print "Altura No especificado"
                        else:
                            print "Altura:", altura_jugador[0] 

                        
                        
                        peso_jugador = re.findall('([0-9]+? lbs)',lista )
                        if peso_jugador == []:
			    print "Peso No especificado"
                        else:
                            print "Peso:", peso_jugador[0] 
                        
                

                        
                        fecha_nac = re.findall('Nacimiento([0-9]+? [a-z]..+? [0-9]...)',lista )
                        if fecha_nac == []:
			    print "Fecha Nacimiento No especificado"
                        else:
                            print "Fecha Nacimiento:", fecha_nac[0] 
                        

                        
                        
                           
                        lugar_nac = re.findall('[0-9]... en ([A-z]+, ..)',lista ) 
                        if lugar_nac == []:
			    print "Lugar Nacimiento No especificado"
                        else:
                            print "Lugar Nacimiento:", lugar_nac[0] 
                        
                                                  
                        experiencia_jugador = re.findall('Experiencia(......+?)Universidad',lista )
                        if experiencia_jugador == []:
			    print "Experiencia No especificada"
                        else:
                            print "Experiencia:", experiencia_jugador[0] 
                        
                        
                        universidad_jugador = re.findall('Universidad([A-Za-z]+)',lista )
                        if universidad_jugador == []:
			    print "Universidad No especificado"
                        else:
                            print "Universidad:", universidad_jugador[0] 
                        
                        

La salida es la siguiente:

 
http://www.espn.com.ve/futbol-americano/nfl/jugador/_/id/2511109/trevor-siemian
#13 QB6' 3", 220 lbsDenver BroncosFecha de Nacimiento26 dic, 1991 en Danbury, CT (Edad: 24)Reclutado  2015: 7ma Rnd, 250th por DENExperiencia2do TemporadaUniversidadNorthwestern
Num de camiseta: #13
Posicion: QB
Altura: 6' 3
Peso: 220 lbs
Fecha Nacimiento: 26 dic, 1991
Lugar Nacimiento: Danbury, CT
Experiencia: 2do Temporada
Universidad: Northwestern
http://www.espn.com.ve/futbol-americano/nfl/jugador/_/id/2511109/trevor-siemian
#13 QB6' 3", 220 lbsDenver BroncosFecha de Nacimiento26 dic, 1991 en Danbury, CT (Edad: 24)Reclutado  2015: 7ma Rnd, 250th por DENExperiencia2do TemporadaUniversidadNorthwestern
Num de camiseta: #13
Posicion: QB
Altura: 6' 3
Peso: 220 lbs
Fecha Nacimiento: 26 dic, 1991
Lugar Nacimiento: Danbury, CT
Experiencia: 2do Temporada
Universidad: Northwestern
http://www.espn.com.ve/futbol-americano/nfl/jugador/_/id/16040/c.j.-anderson
#22 RB5' 8", 224 lbsDenver BroncosFecha de Nacimiento10 feb, 1991 en Richmond, CA (Edad: 25)Experiencia4to TemporadaUniversidadCalifornia
Num de camiseta: #22
Posicion: RB
Altura: 5' 8
Peso: 224 lbs
Fecha Nacimiento: 10 feb, 1991
Lugar Nacimiento: Richmond, CA
Experiencia: 4to Temporada
Universidad: California
http://www.espn.com.ve/futbol-americano/nfl/jugador/_/id/16040/c.j.-anderson
#22 RB5' 8", 224 lbsDenver BroncosFecha de Nacimiento10 feb, 1991 en Richmond, CA (Edad: 25)Experiencia4to TemporadaUniversidadCalifornia
Num de camiseta: #22
Posicion: RB
Altura: 5' 8
Peso: 224 lbs
Fecha Nacimiento: 10 feb, 1991
Lugar Nacimiento: Richmond, CA
Experiencia: 4to Temporada
Universidad: California
http://www.espn.com.ve/futbol-americano/nfl/jugador/_/id/13295/emmanuel-sanders
#10 RM5' 11", 180 lbsDenver BroncosFecha de Nacimiento17 mar, 1987 en Bellville, TX (Edad: 29)Reclutado  2010: 3er Rnd, 82nd por PITExperiencia7ma TemporadaUniversidadSMU
Num de camiseta: #10
Posicion: RM
Altura: 5' 1
Peso: 180 lbs
Fecha Nacimiento: 17 mar, 1987
Lugar Nacimiento: Bellville, TX
Experiencia: 7ma Temporada
Universidad: SMU
http://www.espn.com.ve/futbol-americano/nfl/jugador/_/id/13295/emmanuel-sanders
#10 RM5' 11", 180 lbsDenver BroncosFecha de Nacimiento17 mar, 1987 en Bellville, TX (Edad: 29)Reclutado  2010: 3er Rnd, 82nd por PITExperiencia7ma TemporadaUniversidadSMU
Num de camiseta: #10
Posicion: RM
Altura: 5' 1
Peso: 180 lbs
Fecha Nacimiento: 17 mar, 1987
Lugar Nacimiento: Bellville, TX
Experiencia: 7ma Temporada
Universidad: SMU
http://www.espn.com.ve/futbol-americano/nfl/jugador/_/id/17497/todd-davis
#51 LB6' 1", 230 lbsDenver BroncosFecha de Nacimiento17 may, 1992 en Inglewood, CA (Edad: 24)Experiencia3er TemporadaUniversidadSacramento State
Num de camiseta: #51
Posicion: LB
Altura: 6' 1
Peso: 230 lbs
Fecha Nacimiento: 17 may, 1992
Lugar Nacimiento: Inglewood, CA
Experiencia: 3er Temporada
Universidad: Sacramento
http://www.espn.com.ve/futbol-americano/nfl/jugador/_/id/17497/todd-davis
#51 LB6' 1", 230 lbsDenver BroncosFecha de Nacimiento17 may, 1992 en Inglewood, CA (Edad: 24)Experiencia3er TemporadaUniversidadSacramento State
Num de camiseta: #51
Posicion: LB
Altura: 6' 1
Peso: 230 lbs
Fecha Nacimiento: 17 may, 1992
Lugar Nacimiento: Inglewood, CA
Experiencia: 3er Temporada
Universidad: Sacramento
http://www.espn.com.ve/futbol-americano/nfl/jugador/_/id/14398/chris-harris-jr.
#25 CB5' 10", 199 lbsDenver BroncosFecha de Nacimiento18 jun, 1989 en Bixby, OK (Edad: 27)Experiencia5to TemporadaUniversidadKansas
Num de camiseta: #25
Posicion: CB
Altura: 5' 1
Peso: 199 lbs
Fecha Nacimiento: 18 jun, 1989
Lugar Nacimiento: Bixby, OK
Experiencia: 5to Temporada
Universidad: Kansas
http://www.espn.com.ve/futbol-americano/nfl/jugador/_/id/14398/chris-harris-jr.
#25 CB5' 10", 199 lbsDenver BroncosFecha de Nacimiento18 jun, 1989 en Bixby, OK (Edad: 27)Experiencia5to TemporadaUniversidadKansas
Num de camiseta: #25
Posicion: CB
Altura: 5' 1
Peso: 199 lbs
Fecha Nacimiento: 18 jun, 1989
Lugar Nacimiento: Bixby, OK
Experiencia: 5to Temporada
Universidad: Kansas
http://www.espn.com.ve/futbol-americano/nfl/jugador/_/id/2511109/trevor-siemian
#13 QB6' 3", 220 lbsDenver BroncosFecha de Nacimiento26 dic, 1991 en Danbury, CT (Edad: 24)Reclutado  2015: 7ma Rnd, 250th por DENExperiencia2do TemporadaUniversidadNorthwestern
Num de camiseta: #13
Posicion: QB
Altura: 6' 3
Peso: 220 lbs
Fecha Nacimiento: 26 dic, 1991
Lugar Nacimiento: Danbury, CT
Experiencia: 2do Temporada
Universidad: Northwestern
http://www.espn.com.ve/futbol-americano/nfl/jugador/_/id/16040/c.j.-anderson
#22 RB5' 8", 224 lbsDenver BroncosFecha de Nacimiento10 feb, 1991 en Richmond, CA (Edad: 25)Experiencia4to TemporadaUniversidadCalifornia
Num de camiseta: #22
Posicion: RB
Altura: 5' 8
Peso: 224 lbs
Fecha Nacimiento: 10 feb, 1991
Lugar Nacimiento: Richmond, CA
Experiencia: 4to Temporada
Universidad: California
http://www.espn.com.ve/futbol-americano/nfl/jugador/_/id/2974317/andy-janovich
#32 FB6' 1", 238 lbsDenver BroncosFecha de Nacimiento23 may, 1993 (Edad: 23)Reclutado  2016: 6to Rnd, 176th por DENExperiencia NOVATOUniversidadNebraska
Num de camiseta: #32
Posicion: FB
Altura: 6' 1
Peso: 238 lbs
Fecha Nacimiento: 23 may, 1993
Lugar Nacimiento No especificado
Experiencia:  NOVATO
Universidad: Nebraska
http://www.espn.com.ve/futbol-americano/nfl/jugador/_/id/2511109/trevor-siemian
#13 QB6' 3", 220 lbsDenver BroncosFecha de Nacimiento26 dic, 1991 en Danbury, CT (Edad: 24)Reclutado  2015: 7ma Rnd, 250th por DENExperiencia2do TemporadaUniversidadNorthwestern
Num de camiseta: #13
Posicion: QB
Altura: 6' 3
Peso: 220 lbs
Fecha Nacimiento: 26 dic, 1991
Lugar Nacimiento: Danbury, CT
Experiencia: 2do Temporada
Universidad: Northwestern
http://www.espn.com.ve/futbol-americano/nfl/jugador/_/id/3122866/devontae-booker
#23 RB5' 11", 219 lbsDenver BroncosFecha de Nacimiento27 may, 1992 en Sacramento, CA (Edad: 24)Reclutado  2016: 4to Rnd, 136th por DENExperiencia NOVATOUniversidadUtah
Num de camiseta: #23
Posicion: RB
Altura: 5' 1
Peso: 219 lbs
Fecha Nacimiento: 27 may, 1992
Lugar Nacimiento: Sacramento, CA
Experiencia:  NOVATO
Universidad: Utah
http://www.espn.com.ve/futbol-americano/nfl/jugador/_/id/13295/emmanuel-sanders
#10 RM5' 11", 180 lbsDenver BroncosFecha de Nacimiento17 mar, 1987 en Bellville, TX (Edad: 29)Reclutado  2010: 3er Rnd, 82nd por PITExperiencia7ma TemporadaUniversidadSMU
Num de camiseta: #10
Posicion: RM
Altura: 5' 1
Peso: 180 lbs
Fecha Nacimiento: 17 mar, 1987
Lugar Nacimiento: Bellville, TX
Experiencia: 7ma Temporada
Universidad: SMU
http://www.espn.com.ve/futbol-americano/nfl/jugador/_/id/13216/demaryius-thomas
#88 RM6' 3", 229 lbsDenver BroncosFecha de Nacimiento25 dic, 1987 en Montrose, GA (Edad: 28)Reclutado  2010: 1er Rnd, 22avo por DENExperiencia7ma TemporadaUniversidadGeorgia Tech
Num de camiseta: #88
Posicion: RM
Altura: 6' 3
Peso: 229 lbs
Fecha Nacimiento: 25 dic, 1987
Lugar Nacimiento: Montrose, GA
Experiencia: 7ma Temporada
Universidad: Georgia
http://www.espn.com.ve/futbol-americano/nfl/jugador/_/id/16040/c.j.-anderson
#22 RB5' 8", 224 lbsDenver BroncosFecha de Nacimiento10 feb, 1991 en Richmond, CA (Edad: 25)Experiencia4to TemporadaUniversidadCalifornia
Num de camiseta: #22
Posicion: RB
Altura: 5' 8
Peso: 224 lbs
Fecha Nacimiento: 10 feb, 1991
Lugar Nacimiento: Richmond, CA
Experiencia: 4to Temporada
Universidad: California
http://www.espn.com.ve/futbol-americano/nfl/jugador/_/id/14085/virgil-green
#85 TE6' 5", 255 lbsDenver BroncosFecha de Nacimiento3 ago, 1988 en San Bernardino, CA (Edad: 28)Reclutado  2011: 7ma Rnd, 204th por DENExperiencia6to TemporadaUniversidadNevada
Num de camiseta: #85
Posicion: TE
Altura: 6' 5
Peso: 255 lbs
Fecha Nacimiento: 3 ago, 1988
Lugar Nacimiento No especificado
Experiencia: 6to Temporada
Universidad: Nevada
http://www.espn.com.ve/futbol-americano/nfl/jugador/_/id/16969/kapri-bibbs
^CTraceback (most recent call last):

De verdad que el programa hace lo que tiene que hacer pero no es totalmente funcional desde mi punto de vista para diseñar este programa fui entendiendo que el flujo de los datos debe ser lo mas real posible ademas que el programa debe constar de 2 fases o dos programas y una sola BD, por que hay una fase estática o de recolección de datos estáticos y luego tengo la fase Dinámica donde debemos ver quien jugo con quien como le fue, las estadísticas para cada jugador de ese juego, y otras muchas cosas interesantes…

Por ahora nos vamos a centrar en el diseño y en cuales son los datos que vamos a extraer 1 sola vez cada cierto tiempo, por ejemplo el diseño puede ser:

  1. Extraer el nombre del equipo y la división de la pagina Equipos, extraer los URLs de cada Equipo
  2. ingresar a la Plantilla de cada equipo, extraer los URLs de cada jugador, extraer algunos datos de aquí
  3. ingresar a cada jugador y extraer los datos interesantes, unificar los datos con los datos extraídos anteriormente.
  4. ingresar a Estadisticas por Equipo y  extraer los datos de cada jugador, aqui tendría que crear varias bases de datos o unificar por 1 numero para ver los defensa y las ofensivas de cada equipo
  5. Los siguientes pasos serian las parte dinámica, por ejemplo los score contra cada equipo, juego a juego, las estadísticas de cada juego para el equipo y para cada jugador

Hasta aquí vamos a llegar con esta interesante aventura, que Dios les Bendiga

 

 

Anuncios

Un pensamiento en “Python Scraping NFL [Parte preliminar]

  1. Pingback: Pensando en Python, Diferentes Formas de hacer las cosas [parte1] | La Shell del Bit Pegajoso

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s