¿Cómo raspar esta página de squawka?

Estoy tratando de extraer la siguiente información:

En la pagina

http://epl.squawka.com/stoke-city-vs-arsenal/01-03-2014/english-barclays-premier-league/matches

Al presionar el botón rojo “estadísticas completas” se abre un menú que incluye (en el lado izquierdo) el botón “Cruces”. Esto abre, en el lado derecho de la pantalla, una imagen de un campo de fútbol con 19 flechas, estos son los pases cruzados de Stoke en el partido Stoke-Arsenal. Están codificados por color, rojo = no completado, verde = completado, amarillo = pases de tecla. Cuando hagas clic en una flecha, te dirá quién dio el pase y en qué minuto del juego. Además, las flechas muestran dónde estaba parado el jugador cuando dio el pase y dónde estaba el jugador al que se estaba pasando.

Me gustaría poder raspar esta página de modo que obtenga una tabla con las columnas:

equipo; nombre del emisor; ubicación del remitente; ubicación del receptor; minuto; color de flecha

Este es el conjunto de pases cruzados realizados por Stoke. También me gustaría repetir esto automáticamente para el Arsenal (de ahí la columna “club” en la tabla de arriba).

Aunque he raspado páginas web en el pasado, todas han sido estáticas y bastante simples, y estoy totalmente estupefacto respecto a cómo raspar la información de esta página. Realmente agradecería la ayuda sobre cómo raspar los datos que acabo de describir. Estoy bien versado en R, por lo que agradecería especialmente el código que me ayudaría a lograr esto en R, pero también aprecio mucho la ayuda que utiliza otro idioma o software.

Gracias Peter

Peter como los chicos indicaron que puedes hacer esto con Selenium. También me gusta usar el excelente paquete selectr. La idea es interactuar brevemente con el sitio y luego hacer el rest en otro lugar. SquawkData debe contener todo lo necesario.

 # RSelenium::startServer() # if needed require(RSelenium) remDr <- remoteDriver() remDr$open() remDr$setImplicitWaitTimeout(3000) remDr$navigate("http://epl.squawka.com/stoke-city-vs-arsenal/01-03-2014/english-barclays-premier-league/matches") squawkData <- remDr$executeScript("return new XMLSerializer().serializeToString(squawkaDp.xml);", list()) require(selectr) example <- querySelectorAll(xmlParse(squawkData[[1]]), "crosses time_slice") example[[1]]   73.1,87.1 97.9,49.1   

DESCARGO DE RESPONSABILIDAD Soy el autor del paquete RSelenium. Una viñeta básica sobre la operación se puede ver en los conceptos básicos de RSelenium y RSelenium: Testing Shiny apps .

Más información se puede acceder fácilmente usando selectr:

 > xmlValue(querySelectorAll(xmlParse(squawkData[[1]]), "players #531 name")[[1]]) [1] "Charlie Adam" > xmlValue(querySelectorAll(xmlParse(squawkData[[1]]), "game team#44 long_name")[[1]]) [1] "Stoke City" 

ACTUALIZAR:
Para procesar el ejemplo en un dataframe puede hacer algo como

 out <- lapply(example, function(x){ # handle each event if(length(x['event']) > 0){ res <- lapply(x['event'], function(y){ matchAttrs <- as.list(xmlAttrs(y)) matchAttrs$start <- xmlValue(y['start']$start) matchAttrs$end <- xmlValue(y['end']$end) matchAttrs }) return(do.call(rbind.data.frame, res)) } } ) > head(do.call(rbind, out)) player_id mins secs minsec team type start end event 531 4 39 279 44 Failed 73.1,87.1 97.9,49.1 event5 311 6 33 393 31 Failed 92.3,13.1 93.0,31.0 event1 376 8 57 537 31 Failed 97.7,6.1 96.7,16.4 event6 311 13 50 830 31 Failed 99.5,0.5 94.9,42.6 event11 311 14 11 851 31 Failed 99.5,0.5 93.1,51.0 event7 311 17 41 1061 31 Failed 99.5,99.5 92.6,50.1