Skip to content

Instantly share code, notes, and snippets.

@wyanez
Last active October 26, 2023 00:04
Show Gist options
  • Save wyanez/4534406 to your computer and use it in GitHub Desktop.
Save wyanez/4534406 to your computer and use it in GitHub Desktop.
Script que lee y almacena las estadísticas de béisbol (pitcheo y bateo) de la página de la LVBP

README

Script que lee y almacena las estadísticas de béisbol (pitcheo y bateo) de la página de la LVBP Autor: William Yanez - @wryanez Actualizado a Enero 2013 Publicado y distribuido libremente bajo licencia GPL

Dependencias

  • Instalar Ruby
  • Instalar la gema Nokogiri. Desde la linea de comandos ejecuta:
gem install nokogiri
# Script que lee y almacena las estadísticas de béisbol (pitcheo y bateo) de la página de la LVBP
# William Yanez - @wryanez
# Actualizado a Enero 2013
# Publicado y distribuido libremente bajo licencia GPL
require 'nokogiri'
require 'net/http'
require 'date'
# Columnas de cada estadistica bateo y pitcheo
COLS_PITCH = %w(JUGADOR EQUIPO JJ JI JG JP PCT JS JC JB IP H H2 H3 HR CP CL BB SO GP WP BK EFE)
COLS_BAT = %w(JUGADOR EQUIPO AVE JJ VB CA H BA H2 H3 HR CI BB SO SH SF GP BR OR SLG OBP)
URL_BASE = 'www.lvbp.com'
#Temporada Regular
URL_PITCH_TR= '/estadisticas_gen.asp?t=lanz&tipo=w&co_temporada=1&co_ano_temporada=6'
URL_BAT_TR='/estadisticas_gen.asp?t=bat&tipo=c&co_temporada=1&co_ano_temporada=6'
#Round robin
URL_PITCH_RR='/estadisticas_gen.asp?t=lanz&co_temporada=2&co_ano_temporada=6&ds_temporada=Temporada%202012%20-%202013'
URL_BAT_RR='/estadisticas_gen.asp?t=bat&co_temporada=2&co_ano_temporada=6&ds_temporada=Temporada%202012%20-%202013'
SEPARATOR=';' #Separador para el archivo CSV
def connect_and_extract_lvbp(url,expr_xpath,num_cols)
arr_data=[]
begin
Net::HTTP.start(URL_BASE) do |query|
puts "Conectandome a http://#{URL_BASE}#{url}"
resp = query.get(url)
puts "Resultado: #{resp.code}"
if resp.code=='200'
html = resp.body
doc = Nokogiri::HTML.parse(html)
celdas=doc.xpath(expr_xpath)
i=0
info=[]
celdas.children.each do |td|
info<< td.text
i+=1
if i==num_cols
arr_data << info
info=[]
i=0
end
end
else
puts "Error de conexion www"
end
end
rescue Exception => ex
puts ex
end
return arr_data
end
def print_data_csv(arr_data,arr_cols,filename)
File.open(filename,'w') do |out|
out.puts arr_cols.join(SEPARATOR)
arr_data.each do |jug|
item=jug.join(SEPARATOR)
out.puts item
end
end
puts "Creado exitosamente #{filename}"
end
def print_batting_stats(filename)
arr_data= connect_and_extract_lvbp(URL_BAT_RR,"//table/tr/td[@class='tdTablaPos1']",COLS_BAT.size)
if arr_data.size>0
arr_data.each do |jug|
jug.each {|valor| valor.gsub!('.','')}
end
print_data_csv(arr_data,COLS_BAT,filename)
end
end
def print_pitching_stats(filename)
arr_data=connect_and_extract_lvbp(URL_PITCH_RR,"//table/tr/td[@class='tdTablaPos1']",COLS_PITCH.size)
if arr_data.size>0
arr_data.each do |jug|
jug.each {|valor| valor.gsub!('.',',')}
end
print_data_csv(arr_data,COLS_PITCH,filename)
end
end
#------------- MAIN --------------
hoy=Date.today.strftime("%Y%m%d")
print_batting_stats "rr_lvbp_bateo_#{hoy}.csv"
print_pitching_stats "rr_lvbp_pitcheo_#{hoy}.csv"
@JoseAlirioCardoza
Copy link

Buenas, estoy interesado en saber si el script todavia funciona, y queria consutarle si tendra algun script o base de datos donde pueda conseguir la informacion de temporadas anteriores, soy un estudiante de maestria de Investigacion de Operaciones, aficionados de la lvbp y queria elaborar un dashboard en lenguaje R con datos de la lvbp, usando shiny para eso.

Saludos.

@willyanez
Copy link

Hola buenas noches José,
Gracias por tu interés, honestamente tengo varias temporadas que no lo uso, probablemente la pagina donde tomaba los datos cambió, pero voy a probarlo y te comento. Respecto a lo que me preguntas de base de datos o fuente de información de las temporadas anteriores te recomiendo la excelente web https://pelotabinaria.com.ve/beisbol/.
Me parece interesante el reto que te planteas y te deseo el mejor de los éxitos.

@JoseAlirioCardoza
Copy link

JoseAlirioCardoza commented Nov 1, 2022 via email

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment