Este es un ejemplo de una página que enumera las estadísticas de béisbol para un jugador seleccionado, que se encuentra en forma predeterminada en el año más reciente (2014, que pronto será 2015) http://www.koreabaseball.com/Record/Player/HitterDetail/Game.aspx? playerId = 76325
La lista desplegable permite al usuario seleccionar los años hasta 2010, pero no cambia la URL mostrada. ¿Cómo puedo eliminar todos los años disponibles de cada valor en la lista desplegable?
Actualmente estoy usando Python y BeautifulSoup, pero estoy dispuesto a usar lo que sea que haga el trabajo.
2014 2013 2012 2011 2010
Hazlo en dos pasos:
ctl00$ctl00$cphContainer$cphContents$ddlYear
, que es responsable del año Ejemplo de implementación para el año 2013 (usando requests
y BeautifulSoup
):
from bs4 import BeautifulSoup import requests url = 'http://www.koreabaseball.com/Record/Player/HitterDetail/Game.aspx?playerId=76325' with requests.Session() as session: session.headers = {'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.115 Safari/537.36'} # parsing parameters response = session.get(url) soup = BeautifulSoup(response.content) data = { 'ctl00$ctl00$cphContainer$cphContents$ddlYear': '2013', 'ctl00$ctl00$txtSearchWord': '', '__EVENTTARGET': soup.find('input', {'name': '__EVENTTARGET'}).get('value', ''), '__EVENTARGUMENT': soup.find('input', {'name': '__EVENTARGUMENT'}).get('value', ''), '__LASTFOCUS': soup.find('input', {'name': '__LASTFOCUS'}).get('value', ''), '__VIEWSTATE': soup.find('input', {'name': '__VIEWSTATE'}).get('value', ''), '__VIEWSTATEGENERATOR': soup.find('input', {'name': '__VIEWSTATEGENERATOR'}).get('value', ''), '__EVENTVALIDATION': soup.find('input', {'name': '__EVENTVALIDATION'}).get('value', ''), } # parsing data response = session.post(url, data=data) soup = BeautifulSoup(response.content) for row in soup.select('table.tData01 tr'): print [td.text for td in row.find_all('td')]
Esto imprime el contenido de todas las tablas de estadísticas para 2013:
[u'KIA', u'16', u'0.364', u'55', u'8', u'20', u'3', u'0', u'3', u'11', u'5', u'0', u'14', u'0', u'14', u'1'] [u'LG', u'15', u'0.321', u'53', u'7', u'17', u'1', u'0', u'2', u'9', u'1', u'1', u'6', u'3', u'10', u'2'] [u'NC', u'16', u'0.237', u'59', u'5', u'14', u'2', u'0', u'2', u'10', u'2', u'0', u'3', u'0', u'17', u'2'] [u'SK', u'16', u'0.235', u'51', u'7', u'12', u'1', u'0', u'3', u'13', u'1', u'3', u'13', u'1', u'12', u'4'] [u'\ub450\uc0b0', u'16', u'0.368', u'57', u'16', u'21', u'2', u'1', u'4', u'21', u'2', u'1', u'12', u'0', u'13', u'2'] [u'\ub86f\ub370', u'16', u'0.375', u'56', u'9', u'21', u'4', u'0', u'3', u'13', u'4', u'3', u'11', u'0', u'9', u'3'] [u'\uc0bc\uc131', u'16', u'0.226', u'62', u'8', u'14', u'5', u'0', u'3', u'10', u'0', u'0', u'8', u'1', u'15', u'1'] [u'\ud55c\ud654', u'15', u'0.211', u'57', u'7', u'12', u'3', u'0', u'2', u'9', u'0', u'0', u'1', u'1', u'19', u'3'] ...
Un ejemplo utilizando Mechanize y Ruby. Modificar el campo de formulario y enviar.
#!/usr/bin/env ruby require 'mechanize' agent = Mechanize.new{ |agent| agent.history.max_size=0 } agent.user_agent = 'Mozilla/5.0' url = "http://www.koreabaseball.com/Record/Player/HitterDetail/Game.aspx?playerId=76325" page = agent.get(url) form = page.forms[0] p form['ctl00$ctl00$cphContainer$cphContents$ddlYear'] form['ctl00$ctl00$cphContainer$cphContents$ddlYear'] = 2013 page = form.submit form = page.forms[0] p form['ctl00$ctl00$cphContainer$cphContents$ddlYear']