Python y BeautifulSoup: extrayendo resultados de LiveScore

Posted by in Python

Esta entrada de hoy es una sugerencia de un lector de este blog, y al igual que yo, interesado en el mundo del fútbol y las quinielas. Concretamente, se trata de recuperar la información de los partidos de la web de LiveScore.com.

Utilizando un fichero de configuración

Para facilitar la personalización, vamos a crear un fichero ini, donde pondremos una clave, y la URL, por ejemplo:

[livescore]
champ=http://www.livescore.com/soccer/champions-league/
spain=http://livescore.com/spain

Aquí hemos puesto solo 2 enlaces, pero puedes poner uno, o más de uno pues se procesan todas las URLs que haya en dicho fichero de configuración.

El código Python

El código para extraer los datos tiene la siguiente mecánica:

  • Lectura de las URL desde el fichero de configuración (el trabajo lo hace la clase ini2url)
  • Descarga del código HTML de las URL
  • Extracción de los partidos
  • Muestra de los resultados

Cómo seguramente te interese trabajar con varias URL, he creido conveniente que usar un fichero ini es una buena idea, de ahí la novedad incorporada en este script. Si no te gusta, con poco trabajo lo puedes modificar! Aunque es más cómodo guardar las URL en un fichero y encima, puedes poner varias!!

Se ha construido una clase que es la que se encarga de todo, por lo que si quieres incrementar la funcionalidad, sólo tienes que añadir nuevos métodos a dicha clase. El aspecto de la web es este:

LiveScore

LiveScore

Aplicamos el script, y obtenemos lo siguiente:

LiveScore

LiveScore

El código lo tienes en GitHub, disponible para que lo adaptes a tus necesidades, cómo crear una base de datos e ir introduciendo cómo van evolucionando los partidos. En fin … yo te dejo el código, y tú haces lo que quieras!


# coding: utf-8
__author__ = 'dtrillo'

import bs4

HTML = ".html"
miVersion = "SEF LiveScore - Version 0.5.0 - 20140403"
iniurl = "url.ini"

# contenedores = [ "td", "td", "td" ]
# conte_clases = [ "fh", "fa", "fs" ]</pre>
contenedores = [ "div", "div", "div" ]
conte_clases = [ "ply tright name", "ply name", "sco"]


class LiveScore(): """ Tratamiento de URL de BetFair """ def __init__(self, misclaves, misvalores): self.partidos = [] self.misclaves = misclaves self.misvalores = misvalores self.dw = Downloading('') for k in range(0, len(misclaves)): url = misvalores[k] html = self.descarga(url) self.ejecuta(html) def descarga(self, surl): data, error = self.dw.gethtml(surl,'') return data def ejecuta(self, data): #data = clases.SEFcomun.readFile(fich) soup = bs4.BeautifulSoup(data) locales = soup.findAll(contenedores[0], { "class" : conte_clases[0] }) visitantes = soup.findAll(contenedores[1], { "class" : conte_clases[1] }) marcador = soup.findAll(contenedores[2], { "class" : conte_clases[2] }) for tr in range(0, len(locales)): print locales[tr].text + " = " + visitantes[tr].text + " -> " + marcador[tr].text pt = partidosWeb(locales[tr].text, visitantes[tr].text, marcador[tr].text) self.partidos.append(pt) def listadoPartidos(self): for p in self.partidos: print p class ini2urls(): """ Recupera de ficheros INI el listado de URL a procesar """ def __init__(self, fichero, numseccion = 0): self.fichero = fichero self.config = ConfigParser.RawConfigParser() self.config.read(self.fichero) self.secciones = self.config.sections() self.error = True if len(self.secciones) == 0 else False self.seccion = self.secciones[numseccion] if self.error == False else '' self.misclaves = [] self.misvalores = [] self.dicc = () if self.error: print("ERROR - Fichero INI no es el esperado!") if self.error == False: self.misclaves = self.config.options(self.seccion) for k in self.misclaves: tmp = self.config.get(self.seccion,k) self.misvalores.append(tmp) #self.dicc = tmp def claves_valores(self): return  self.misclaves, self.misvalores #def dicc(self): #    return self.dicc def listado(self): """ Listado de URL recuperadas """ for i in range(0, len(self.misclaves)): print (self.misclaves[i] + " - " + self.misvalores[i]) if __name__ == '__main__': print miVersion listadoURLs = ini2urls(iniurl,0)    # Lectura de URL desde fichero de INICIO keys, vlr = listadoURLs.claves_valores()  # Claves y valores listadoURLs.listado() ls = LiveScore(keys, vlr) ls.listadoPartidos() 

Espero sea de vuestra utilidad, y buen día!