tutorial scraping hacer example español con como html r forms rvest

html - scraping - rvest r



Uso de rvest o httr para iniciar sesión en formularios no estándar en una página web (1)

Estoy intentando usar rvest para arañar una página web que requiere un inicio de sesión de correo electrónico / contraseña en un formulario.

rm(list=ls()) library(rvest) ### Trying to sign into a form using email/password url <-"http://www.perfectgame.org/" ## page to spider pgsession <-html_session(url) ## create session pgform <-html_form(pgsession)[[1]] ## pull form from session set_values(pgform, `ctl00$Header2$HeaderTop1$tbUsername` = "[email protected]") set_values(pgform, `ctl00$Header2$HeaderTop1$tbPassword` = "mypassword") submit_form(pgsession,pgform,submit=`ctl00$Header2$HeaderTop1$Button1`)

Esto me da el siguiente mensaje de error:

Error in submit_request(form, submit) :

objeto ''ctl00 $ Header2 $ HeaderTop1 $ Button1'' no encontrado

Si envío el formulario sin especificar el parámetro de envío, obtengo esto:

Submitting with ''ctl00$Header2$HeaderTop1$Button1'' Error in function (type, msg, asError = TRUE) : <url> malformed

También intenté pasar los parámetros directamente a httr como se mencionó en esta pregunta: ¿Cómo puedo POSTAR un formulario HTML simple en R? , pero el parámetro "enviar" no aceptó el botón de envío con comillas al revés (``), comillas o sin comillas:

library(httr) url <- "http://www.perfectgame.org/Rankings/Players/Default.aspx?gyear=2015&num=500" fd <- list( submit = `ctl00$Header2$HeaderTop1$Button1`, `ctl00$Header2$HeaderTop1$tbUsername` = "[email protected]", `ctl00$Header2$HeaderTop1$tbPassword` = "mypassword") resp<-POST(url, body=fd, encode="form") content(resp)

¿Alguna idea de cómo puedo iniciar sesión desde una sesión R y arañar los datos que están detrás del muro de inicio de sesión?


Su código de rvest no almacena el formulario modificado, por lo que en el ejemplo solo está enviando el pgform original sin que se pgform los valores. Tratar:

library(rvest) url <-"http://www.perfectgame.org/" ## page to spider pgsession <-html_session(url) ## create session pgform <-html_form(pgsession)[[1]] ## pull form from session # Note the new variable assignment filled_form <- set_values(pgform, `ctl00$Header2$HeaderTop1$tbUsername` = "[email protected]", `ctl00$Header2$HeaderTop1$tbPassword` = "mypassword") submit_form(pgsession,filled_form)

Y ahora veo una buena respuesta de código de estado 200 en lugar de un error. Tenga en cuenta que debido a que el botón de envío deseado parece ser el primer botón de envío, no necesitamos darlo como un argumento, pero de lo contrario solo le estaríamos asignando una cadena (comillas rectas, no comillas atrás).