Handlers de Conexão

Prof. Walmes Marques Zeviani

13 Abr 2017

Justificativa e objetivos

Handlers de conexão

Teste

library(RCurl)

u <- "https://stat.ethz.ch/pipermail/r-help/2012-May.txt.gz"
# browseURL(u)

g <- getURLContent(u)

h <- getCurlHandle(useragent = R.version$version.string,
                   followlocation = TRUE,
                   cookiefile = "")
str(h)

yrs <- sprintf("https://stat.ethz.ch/pipermail/r-help/%d-May.txt.gz",
               2006:2012)

library(rbenchmark)

benchmark(ninja = lapply(yrs, getURLContent, curl = h),
          jaquara = lapply(yrs, getURLContent),
          replications = 1)

Todas as canções do Lulu Santos

library(XML)

url <- "https://www.cifraclub.com.br/lulu-santos/"
# browseURL(url)

h <- htmlParse(getURL(url))

# Extrai todos os suficos de URL.
u <- xpathSApply(h,
                 path = "//ul/li/a[@class = 'art_music-link']",
                 fun = xmlGetAttr,
                 name = "href")

# Cria as URL completas para cada canção cifrada.
pre <- "https://www.cifraclub.com.br"
u <- paste0(pre, u)
u <- gsub("letra/$", "", u)
head(u)

# Uma canção ao acaso.
# browseURL(u[1])

# Manipulador da conexão.
h <- getCurlHandle(useragent = "cifras",
                   followlocation = TRUE,
                   cookiefile = "")

# Uma amostra aleatória das canções.
us <- sample(u, size = 5)

# Comparando os desempenhos.
benchmark(ninja = lapply(us, getURLContent, curl = h),
          jaquara = lapply(us, getURLContent),
          replications = 5)

Imóveis

urls <- sprintf(paste0("http://www.imovelweb.com.br/",
                       "apartamentos-venda-centro-curitiba-",
                       "pagina-%d.html"), 1:10)

im <- getCurlHandle(useragent = "imoveis",
                    followlocation = TRUE,
                    cookiefile = "")

benchmark(ninja = lapply(urls, getURLContent, curl = im),
          jaquara = lapply(urls, getURLContent),
          replications = 1)

Diferença entre as abordagens

Figura  1: Uma conexão para uma requisição.

Figura 1: Uma conexão para uma requisição.

Figura  2: Uma conexão com várias requisições.

Figura 2: Uma conexão com várias requisições.

Múltiplas requisições simultâneamente

a <- getCurlHandle(useragent = "asyn",
                   followlocation = TRUE,
                   cookiefile = "")

june <- seq.Date(as.Date("2012/06/1"),
                 as.Date("2012/06/30"),
                 by = 1)
days <- june[!(weekdays(june) %in% c("Saturday", "Sunday"))]
uIn <- paste0("http://www.nseindia.com/archives/",
              "nsccl/volt/CMVOLT_%s")
urls <- sprintf(uIn, format(days, "%m%d%Y"))

benchmark(assinc = getURIAsynchronous(urls, curl = a),
          serial = sapply(urls, getURI, curl = a),
          replications = 1)

Resumo