studio scraping scrap page r curl web-scraping rcurl httr

scraping - automatizar el inicio de sesión en el sitio web del servicio de datos del Reino Unido en R con RCurl o httr



scraping a web page using r (2)

Creo que una forma de abordar la página de "ingrese a su organización" es la siguiente:

library(tidyverse) library(rvest) library(stringr) org <- "your_organization" user <- "your_username" password <- "your_password" signin <- "http://esds.ac.uk/newRegistration/newLogin.asp" handle_reset(signin) # get to org page and enter org p0 <- html_session(signin) %>% follow_link("Login") org_link <- html_nodes(p0, "option") %>% str_subset(org) %>% str_match(''(?<=//")[^"]*'') %>% as.character() f0 <- html_form(p0) %>% first() %>% set_values(origin = org_link) fake_submit_button <- list(name = "submit-btn", type = "submit", value = "Continue", checked = NULL, disabled = NULL, readonly = NULL, required = FALSE) attr(fake_submit_button, "class") <- "btn-enabled" f0[["fields"]][["submit"]] <- fake_submit_button c0 <- cookies(p0)$value names(c0) <- cookies(p0)$name p1 <- submit_form(session = p0, form = f0, config = set_cookies(.cookies = c0))

Desafortunadamente, eso no resuelve todo el problema: (2) es más difícil de lo que parece. Tengo más de lo que creo que es una solución publicada aquí: R: use rvest (o httr) para iniciar sesión en un sitio que requiera cookies . Esperemos que alguien nos ayude a conseguir el resto del camino.

Estoy en el proceso de escribir una colección de scripts R de descarga gratuita para http://asdfree.com/ para ayudar a las personas a analizar los datos de las encuestas de muestra complejas alojadas en el servicio de datos del Reino Unido . Además de proporcionar muchos tutoriales de estadísticas para estos conjuntos de datos, también quiero automatizar la descarga e importación de los datos de esta encuesta. Para hacer eso, necesito averiguar cómo iniciar sesión programáticamente en este sitio web del servicio de datos del Reino Unido .

He intentado muchas configuraciones diferentes de RCurl y httr para iniciar sesión, pero estoy cometiendo un error en algún lugar y estoy atascado. He intentado inspeccionar los elementos como se describe en esta publicación , pero los sitios web saltan demasiado rápido en el navegador para que pueda entender lo que está pasando.

Este sitio web requiere un inicio de sesión y una contraseña, pero creo que estoy cometiendo un error antes de que llegue a la página de inicio de sesión.

Así es como funciona el sitio web:

La página de inicio debe ser: https://www.esds.ac.uk/secure/UKDSRegister_start.asp

Esta página redireccionará automáticamente su navegador web a una URL larga que comienza con: https://wayf.ukfederation.org.uk/DS002/uk.ds?[blahblahblah]

(1) Por alguna razón, el certificado SSL no funciona en este sitio web. Aquí está la pregunta de SO que publiqué con respecto a esto . La solución que he usado es simplemente ignorar el SSL:

library(httr) set_config( config( ssl.verifypeer = 0L ) )

y luego mi primer comando en el sitio web inicial es:

z <- GET( "https://www.esds.ac.uk/secure/UKDSRegister_start.asp" )

esto me devuelve un z$url que se parece mucho a la página https://wayf.ukfederation.org.uk/DS002/uk.ds?[blahblahblah] que mi navegador también redirige.

En el navegador, entonces, se supone que debes escribir en "uk data archive" y hacer clic en el botón continue . Cuando hago eso, me redirige a la página web https://shib.data-archive.ac.uk/idp/Authn/UserPassword

Creo que aquí es donde estoy atascado porque no puedo encontrar la forma de tener un followlocation cURL y aterrizar en este sitio web. Nota: todavía no se ha introducido un nombre de usuario / contraseña.

Cuando uso el comando httr GET de la página wayf.ukfederation.org.uk de esta manera:

y <- GET( z$url , query = list( combobox = "https://shib.data-archive.ac.uk/shibboleth-idp" ) )

la cadena y$url parece mucho a z$url (excepto que tiene un cuadro de combinación = al final). ¿Hay alguna forma de acceder a esta página de autenticación del uk data archive con RCurl o httr ?

No puedo saber si simplemente estoy pasando por alto algo o si debo usar el certificado SSL descrito en mi publicación anterior de SO o ¿qué?

(2) En el momento en que llego a esa página, creo que el resto del código sería:

values <- list( j_username = "your.username" , j_password = "your.password" ) POST( "https://shib.data-archive.ac.uk/idp/Authn/UserPassword" , body = values)

Pero supongo que esa página tendrá que esperar ...


Las variables de datos relevantes devueltas por el formulario son action y origin , no combobox . Asigne a la action la selection valor y el origin el valor de la entrada correspondiente en el combobox

y <- GET( z$url, query = list( action="selection", origin = "https://shib.data-archive.ac.uk/shibboleth-idp") ) > y$url [1] "https://shib.data-archive.ac.uk:443/idp/Authn/UserPassword"

Editar

Parece que el grupo de identificadores no mantiene su sesión activa correctamente. Por lo tanto, debe pasar las asas directamente en lugar de automáticamente. También para el comando POST debe establecer multipart=FALSE ya que este es el valor predeterminado para los formularios HTML . El comando R tiene un valor predeterminado diferente, ya que está diseñado principalmente para cargar archivos. Asi que:

y <- GET( handle=z$handle, query = list( action="selection", origin = "https://shib.data-archive.ac.uk/shibboleth-idp") ) POST(body=values,multipart=FALSE,handle=y$handle) Response [https://www.esds.ac.uk/] Status: 200 Content-type: text/html ...snipped... <title> Introduction to ESDS </title> <meta name="description" content="Introduction to the ESDS, home page" />