[R-br] Ler dados de html

walmes . walmeszeviani em gmail.com
Quarta Maio 22 14:06:27 BRT 2013


Ok Henrique,

EXCELENTE a sua solução. Eu tava implementando uma longa/cara solução via
expressão regular. Aqui segue o seu código aumentado para ler todas as
letras do alfabeto.

#------------------------------------------------------------------------------------------
# solução Dallazuanna

library(XML)

lines <- readLines("http://vestibular.ufrgs.br/listao/letra_U.html")
h <- htmlTreeParse(lines, asText=TRUE, useInternalNodes=TRUE)
str(h)
da <- as.data.frame(sapply(sprintf("//div[@class='span%d']", 1:4),
                           xpathApply, doc=h, xmlValue))
str(da)
da <- as.data.frame(do.call(cbind, lapply(da, unlist)),
                    stringsAsFactors=FALSE)
names(da) <- c("ins","nome","sem","cur")
da

#------------------------------------------------------------------------------------------
# aplicando para todas as letras

u <- paste("http://vestibular.ufrgs.br/listao/letra_", LETTERS, ".html",
sep="")
names(u) <- LETTERS

leia <- function(u){
    lines <- readLines(u)
    h <- htmlTreeParse(lines, asText=TRUE, useInternalNodes=TRUE)
    da <- as.data.frame(sapply(sprintf("//div[@class='span%d']", 1:4),
                               xpathApply, doc=h, xmlValue))
    da <- as.data.frame(do.call(cbind, lapply(da, unlist)),
                        stringsAsFactors=FALSE)
    if(nrow(da)>0){
        names(da) <- c("ins","nome","sem","cur")
        return(da)} else return(NULL)
}

tudo <- lapply(u, leia)
str(tudo)
sapply(tudo, is.null)

# pronto
tudo <- as.data.frame(do.call(rbind, tudo))
str(tudo)

tudo$sem <- factor(tudo$sem)
tudo$cur <- factor(tudo$cur)

cbind(sort(table(tudo$cur), decreasing=TRUE))

#------------------------------------------------------------------------------------------

Grato.
Walmes.

==========================================================================
Walmes Marques Zeviani
LEG (Laboratório de Estatística e Geoinformação, 25.450418 S, 49.231759 W)
Departamento de Estatística - Universidade Federal do Paraná
fone: (+55) 41 3361 3573
VoIP: (3361 3600) 1053 1173
e-mail: walmes em ufpr.br
skype: walmeszeviani
twitter: @walmeszeviani
homepage: http://www.leg.ufpr.br/~walmes
linux user number: 531218
==========================================================================
-------------- Próxima Parte ----------
Um anexo em HTML foi limpo...
URL: <http://listas.inf.ufpr.br/pipermail/r-br/attachments/20130522/22447123/attachment.html>


Mais detalhes sobre a lista de discussão R-br