[R-es] Extraccion de datos de una Web

Xavier de Pedro xavier.depedro en vhir.org
Mar Ene 19 10:41:11 CET 2016


Hola Sergio:

Y si quieres ir preparando camino para dominar este mundillo de manera
más fácil, merece la pena (por experiencia) pasar de usar los paquetes
xml y/o xml2 a usar "rvest" [1], que permite usar expresiones de tipo
XPATH, como usas tu ahora, y las más fáciles de usar para identificar y
gestionar nodos de html, las de los selectores css, que con la ayuda del
"Selectorgadget" [2], la cosa se pone más fácil aún, y de paso, te sirve
para empezar a sacarle partido al ecosistema de paquetes de R de Hadley
Wickham [3]. Yo al menos finalmente me he puesto y la cosa pinta bien
(este tipo es un crack [4]).

Saludos

Xavier

[1] https://github.com/hadley/rvest
[2]
https://cran.r-project.org/web/packages/rvest/vignettes/selectorgadget.html
[3] http://hadley.github.io/
[4]
http://datascience.la/a-conversation-with-hadley-wickham-the-user-2014-interview/

El 19/01/16 a les 09:48, Sergio Castro ha escrit:
> Muchas gracias a ambos!!!! Las dos soluciones me han funcionado.
>
> Un saludo.
>
> El día 18 de enero de 2016, 18:35, Carlos Ortega
> <cof en qualityexcellence.es> escribió:
>> Hola,
>>
>> Pero, si ya casi lo tienes... te quedan un par de pasos y ya está...
>>
>> Simplemente tienes que transformar "puntos_nodo" a bien un data.frame aunque
>> quedará lleno de cosas que no te hacen falta o directamente guardar
>> "puntos_nodo" a un vector de strings.
>> Y luego sobre lo anterior, puedes hacer un barrido buscando "semana" y
>> "bar". En el caso de que tras una semana no se encuentre un "bar" pones una
>> condición lógica para que en ese caso "bar" sea cero o NA, según prefieras.
>>
>> Saludos,
>> Carlos Ortega
>> www.qualityexcellence.es
>>
>> El 18 de enero de 2016, 17:29, Sergio Castro
>> <castro.rodriguez.sergio en gmail.com> escribió:
>>>  Buenas tardes,
>>>
>>>  Quiero extraer datos de una web en la que ser relaciona la semana con
>>> la puntuación obtenida por un jugador. Ahora mismo llego a obtener
>>> elnodo en el que se relacionan la semana con la puntuación obtenida,
>>> pero no soy capaz de extraer esa informacion en una tabla de dos
>>> columna (semana, puntuacion) teniendo en cuenta que puede que haya
>>> semanas que no haya puntuado (en el ejemplo, la segunda semana). De
>>> momento lo estoy obteniendo de la siguiente forma:
>>>
>>>  url_jugador<-"http://localhost:8080/jugadores/Luis"
>>>  txt_jugador <- getURL(url_jugador)
>>>  doc<-htmlTreeParse(txt_jugador, useInternalNodes = TRUE)
>>>  puntos_nodo<- xpathApply(doc, "//table[@class='points']/tr")
>>>  puntos_nodo
>>> [[1]]
>>> <tr>
>>>   <td class="semana">1</td>
>>>   <td class="neg"/>
>>>   <td>
>>>     <div class="bar">6</div>
>>>   </td>
>>>
>>> </tr>
>>> [[2]]
>>> <tr>
>>>   <td class="semana">2</td>
>>>   <td class="neg"/>
>>>   <td/>
>>> </tr>
>>> [[3]]
>>> <tr>
>>>   <td class="semana">3</td>
>>>   <td class="neg"/>
>>>   <td>
>>>     <div class="bar">9</div>
>>>   </td>
>>> </tr>
>>> attr(,"class")
>>> [1] "XMLNodeSet"
>>>
>>> ¿Veis alguna forma de sacar la información que necesito?
>>>
>>> Muchas gracias.
>>> Un saludo.
>>>



Más información sobre la lista de distribución R-help-es