html – 使用rvest或httr登录网页上的非标准表单

前端之家收集整理的这篇文章主要介绍了html – 使用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’未找到

如果我提交表单而没有指定submit参数,我得到这个:

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?,但是“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会话中登录的蜘蛛和蜘蛛登录墙背后的数据的想法?

解决方法

您的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",filled_form)

我现在看到一个很好的200状态代码响应,而不是错误。请注意,因为所需的提交按钮似乎是第一个提交按钮,我们不需要将其作为参数,但否则我们只需要给它一个字符串(直的引号,而不是后面的引号)。

原文链接:https://www.f2er.com/html/233151.html

猜你在找的HTML相关文章