Rvestを使用して、フォームに電子メール/パスワードでログインする必要があるWebページをスパイダーしようとしています。
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`)
これにより、次のエラーメッセージが表示されます。
Error in submit_request(form, submit) :
オブジェクト 'ctl00 $ Header2 $ HeaderTop1 $ Button1'が見つかりません
Submitパラメータを指定せずにフォームを送信すると、次のようになります。
Submitting with 'ctl00$Header2$HeaderTop1$Button1'
Error in function (type, msg, asError = TRUE) : <url> malformed
この質問で述べたように、パラメータを直接httrに渡してみました: どうすればRでシンプルなHTMLフォームをPOSTできますか 、 「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` = "[email protected]",
`ctl00$Header2$HeaderTop1$tbPassword` = "mypassword")
resp<-POST(url, body=fd, encode="form")
content(resp)
Rセッションからログインして、ログインウォールの背後にあるデータをスパイダーする方法についてのアイデアはありますか?
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` = "[email protected]",
`ctl00$Header2$HeaderTop1$tbPassword` = "mypassword")
submit_form(pgsession,filled_form)
エラーの代わりに、Nice 200ステータスコードレスポンスが表示されます。希望の送信ボタンは最初の送信ボタンのように見えるため、引数として指定する必要はありませんが、それ以外の場合は文字列(バッククォートではなく、ストレートクォート)を指定するだけです。