2015-02-09 39 views
18

我正在嘗試使用rvest來抓取表單上需要電子郵件/密碼登錄的網頁。使用rvest或httr登錄到網頁上的非標準表單

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 $頭2 $ HeaderTop1 $ Button1的'未找到

如果我提交表單不指定提交的參數,我得到這個:

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

我也試着將參數直接傳遞給httr,如上所述在這個問題:How can I POST a simple HTML form in R?,但「提交」參數不接受要麼向後引號(``),引號提交按鈕,或者不帶任何引號:

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會話中抓取登錄牆後面的數據?

回答

15

您的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) 

而我現在看到一個很好的200狀態碼響應而不是錯誤。請注意,因爲所需的提交按鈕看起來是第一個提交按鈕,所以我們不需要將其作爲參數提供,否則我們只會給它一個字符串(直引號,而不是後引號)。

+0

嗨,非常感謝您的答覆 - 從您的解決方案中,我現在明白您必須將填充表單保存爲R中的對象,而不是將它傳遞給會話。然而,我似乎無法複製你的200狀態碼 - 我運行上面的代碼,並得到上面列出的同樣的錯誤'「提交'ctl00 $ Header2 $ HeaderTop1 $ Button1' 函數錯誤(type,msg,asError = TRUE):格式不正確「' 任何想法有什麼區別? – gbostock 2015-03-25 20:17:23

+0

編輯:我上傳到最新版本的R(3.1.3)並收到相同的消息。謝謝!我會看看並報告回來。 – gbostock 2015-03-25 20:30:33

+0

這工作完美。再次感謝! – gbostock 2015-03-26 16:55:48

相關問題