Raspe el sitio web protegido con contraseña en R

Estoy tratando de extraer datos de un sitio web protegido por contraseña en R. Al leer, parece que los paquetes httr y RCurl son las mejores opciones para raspar con autenticación de contraseña (también he investigado el paquete XML).

El sitio web que bash eliminar está debajo (necesita una cuenta gratuita para acceder a la página completa): http://subscribers.footballguys.com/myfbg/myviewprojections.php?projector=2

Aquí están mis dos bashs (reemplazando “nombre de usuario” con mi nombre de usuario y “contraseña” con mi contraseña):

#This returns "Status: 200" without the data from the page: library(httr) GET("http://subscribers.footballguys.com/myfbg/myviewprojections.php?projector=2", authenticate("username", "password")) #This returns the non-password protected preview (ie, not the full page): library(XML) library(RCurl) readHTMLTable(getURL("http://subscribers.footballguys.com/myfbg/myviewprojections.php?projector=2", userpwd = "username:password")) 

He consultado otras publicaciones relevantes (enlaces a continuación), pero no sé cómo aplicar sus respuestas a mi caso.

Cómo usar R para descargar un archivo comprimido de una página SSL que requiere cookies

¿Cómo webscrapear páginas aseguradas en R (enlaces https) (usando readHTMLTable del paquete XML)?

Lectura de información de un sitio protegido con contraseña

R – RCurl raspa los datos de un sitio protegido con contraseña

http://www.inside-r.org/questions/how-scrape-data-password-protected-https-website-using-rholdhold

No tengo una cuenta para probar, pero quizás esto funcione:

 library(httr) library(XML) handle < - handle("http://subscribers.footballguys.com") path <- "amember/login.php" # fields found in the login form. login <- list( amember_login = "username" ,amember_pass = "password" ,amember_redirect_url = "http://subscribers.footballguys.com/myfbg/myviewprojections.php?projector=2" ) response <- POST(handle = handle, path = path, body = login) 

Ahora, el objeto de respuesta puede contener lo que necesita (o tal vez puede consultar directamente la página de interés después de la solicitud de inicio de sesión; no estoy seguro de que la redirección funcione, pero es un campo en el formulario web), y puede handle reutilizado para solicitudes posteriores. No puedo probarlo; pero esto funciona para mí en muchas situaciones.

Puede generar la tabla usando XML

 > readHTMLTable(content(response))[[1]][1:5,] Rank Name Tm/Bye Age Exp Cmp Att Cm% PYd Y/Att PTD Int Rsh Yd TD FantPt 1 1 Peyton Manning DEN/4 38 17 415 620 66.9 4929 7.95 43 12 24 7 0 407.15 2 2 Drew Brees NO/6 35 14 404 615 65.7 4859 7.90 37 16 22 44 1 385.35 3 3 Aaron Rodgers GB/9 31 10 364 560 65.0 4446 7.94 33 13 52 224 3 381.70 4 4 Andrew Luck IND/10 25 3 366 610 60.0 4423 7.25 27 13 62 338 2 361.95 5 5 Matthew Stafford DET/9 26 6 377 643 58.6 4668 7.26 32 19 34 102 1 358.60 

Puedes usar RSelenium. He usado la versión dev ya que puedes ejecutar phantomjs sin un servidor Selenium.

 # Install RSelenium if required. You will need phantomjs in your path or follow instructions # in package vignettes # devtools::install_github("ropensci/RSelenium") # login first appURL < - 'http://subscribers.footballguys.com/amember/login.php' library(RSelenium) pJS <- phantom() # start phantomjs remDr <- remoteDriver(browserName = "phantomjs") remDr$open() remDr$navigate(appURL) remDr$findElement("id", "login")$sendKeysToElement(list("myusername")) remDr$findElement("id", "pass")$sendKeysToElement(list("mypass")) remDr$findElement("css", ".am-login-form input[type='submit']")$clickElement() appURL <- 'http://subscribers.footballguys.com/myfbg/myviewprojections.php?projector=2' remDr$navigate(appURL) tableElem<- remDr$findElement("css", "table.datamedium") res <- readHTMLTable(header = TRUE, tableElem$getElementAttribute("outerHTML")[[1]]) > res[[1]][1:5, ] Rank Name Tm/Bye Age Exp Cmp Att Cm% PYd Y/Att PTD Int Rsh Yd TD FantPt 1 1 Peyton Manning DEN/4 38 17 415 620 66.9 4929 7.95 43 12 24 7 0 407.15 2 2 Drew Brees NO/6 35 14 404 615 65.7 4859 7.90 37 16 22 44 1 385.35 3 3 Aaron Rodgers GB/9 31 10 364 560 65.0 4446 7.94 33 13 52 224 3 381.70 4 4 Andrew Luck IND/10 25 3 366 610 60.0 4423 7.25 27 13 62 338 2 361.95 5 5 Matthew Stafford DET/9 26 6 377 643 58.6 4668 7.26 32 19 34 102 1 358.60 

Finalmente, cuando hayas terminado, cierra phantomjs

 pJS$stop() 

Si desea utilizar un navegador tradicional como Firefox por ejemplo (si desea mantener la versión en CRAN), debe usar:

 RSelenium::startServer() remDr < - remoteDriver() ........ ........ remDr$closeServer() 

en lugar de las llamadas phantomjs relacionadas.