Skip to content

Instantly share code, notes, and snippets.

@famuvie
Created March 20, 2015 10:16
Show Gist options
  • Save famuvie/73d753aa75dc097f8727 to your computer and use it in GitHub Desktop.
Save famuvie/73d753aa75dc097f8727 to your computer and use it in GitHub Desktop.
Script para extraer datos de GREC (UV)
## Script de ejemplo para descargar datos de GREC (University of Valencia)
## Facundo Muñoz, 2015
## Setup
# install.packages(rvest)
# install.packages('RSelenium')
library(rvest)
library('RSelenium')
checkForServer()
startServer()
# Abrimos un firefox, vamos a GREC y ponemos los datos de acceso
remDr <- remoteDriver(browserName = "firefox")
remDr$open()
remDr$navigate('https://webgrec.uv.es/cgi-bin/CU/UV_entrada.cgi')
# Obtener el código fuente de la página principal
main <- remDr$getPageSource()
# Buscamos el enlace para una de las categorías que nos interese recuperar
cat_text <- 'revistas'
remDr$findElements(using = 'xpath', value = cat_text)
webElem <- remDr$findElements(using = 'partial link text', value = 'revistas')
stopifnot( length(webElem) == 1 ) # me aseguro de encontrar un único resultado
webElem[[1]]$clickElement() # Hacemos click en la categoría
# Extraemos la información del primer elemento
# Los datos están ordenados en varias tablas de clase 'pcamps'
# Ahora, las tablas son una mierda muy difíciles de estandarizar
html_node(html(remDr$getPageSource()[[1]]), 'pcamps')
webElem <- remDr$findElements(using = 'class name', value = 'pcamps')
length(webElem) # número de tablas
current_table <- webElem[[1]]
current_table$findChildElements(using = 'class name', value = 'titcamp')
# La mayoría de los datos se encuentran en celdas a la derecha del nombre del campo
# pero algunas celdas contienen tablas con checkboxes, que habría que procesar separadamente
# para identificar cuál tiene el atributo de 'seleccionado'
# Cerrar todo
remDr$navigate('https://webgrec.uv.es/cgi-bin/CU/inici.cgi?G_USCODI=03551&G_ENTORN=&IDNC=201503200956130&ACABAR=S')
remDr$close()
remDr$closeServer()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment