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" />