Использование rvest или httr для входа в нестандартные формы на веб-странице
Я пытаюсь использовать rvest, чтобы создать паук на веб-странице, для которой требуется ввести адрес электронной почты / пароль для входа в форму.
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` = "myemail@gmail.com")
set_values(pgform, `ctl00$Header2$HeaderTop1$tbPassword` = "mypassword")
submit_form(pgsession,pgform,submit=`ctl00$Header2$HeaderTop1$Button1`)
Это дает мне следующее сообщение об ошибке:
Error in submit_request(form, submit) :
объект 'ctl00$Header2$HeaderTop1$Button1' не найден
Если я отправляю форму без указания параметра отправки, я получаю это:
Submitting with 'ctl00$Header2$HeaderTop1$Button1'
Error in function (type, msg, asError = TRUE) : <url> malformed
Я также попытался передать параметры непосредственно в httr, как упоминалось в этом вопросе: Как я могу POST простую форму HTML в R?, но параметр submit не принимал кнопку отправки ни с обратными кавычками (``), ни с кавычками, ни без кавычек:
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` = "myemail@gmail.com",
`ctl00$Header2$HeaderTop1$tbPassword` = "mypassword")
resp<-POST(url, body=fd, encode="form")
content(resp)
Любые идеи о том, как я могу войти из сеанса R и паук данных, которые за стеной входа в систему?
1 ответ
Ваш rvest
код не хранит измененную форму, поэтому в вашем примере вы просто отправляете оригинал pgform
без заполнения значений. Пытаться:
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` = "myemail@gmail.com",
`ctl00$Header2$HeaderTop1$tbPassword` = "mypassword")
submit_form(pgsession,filled_form)
И теперь я вижу хороший ответ с кодом состояния 200 вместо ошибки. Обратите внимание, что, поскольку требуемая кнопка отправки является первой кнопкой отправки, нам не нужно указывать ее в качестве аргумента, но в противном случае мы просто дали бы ей строку (прямые кавычки, а не обратные кавычки).