尝试使用 Rvest 提交表单时出错
Error when attempting to submit form with Rvest
适配 ,我正在尝试使用 rvest
生成一个表单来抓取生成的页面。我一直想出一个错误。
library(rvest)
url <- "https://iemweb.biz.uiowa.edu/pricehistory/pricehistory_SelectContract.cfm?market_ID=214"
pg.session <- html_session(url)
pg.form <- html_form(html(pg.session))
filled_form <- set_values(pg.form[[1]],
Month = "8",
Year = "1")
out <- submit_form(session = pg.session, pg.form)
returns 这个错误
Submitting with ''
Error in if (!(submit %in% names(submits))) { :
argument is of length zero
我做错了什么?
嗯,一方面,您没有提交实际填写的表格,而且您还试图传递表格列表而不是表格,但代码中似乎也可能存在错误无法识别带有大写标签的提交按钮。在这种情况下,HTML 的代码为
<INPUT TYPE="SUBMIT" VALUE="Get Prices">
和 submit_form
代码调用 submit_request
通过
查找提交按钮
submits <- Filter(function(x) identical(x$type, "submit"),
form$fields)
并且因为它检查与 "submit" 相同的值,所以没有找到 "SUBMIT"
sapply(pg.form[[1]]$fields, function(x) x$type)
# $Market_ID
# [1] "HIDDEN"
# $Month
# NULL
# $Year
# NULL
# $`NULL`
# [1] "SUBMIT"
最简单的可能是自己改
filled_form <- set_values(pg.form[[1]],
Month = "08",
Year = "2007")
filled_form$fields[[4]]$type <- "submit"
另一个问题是这个版本在 URL 我们解决表单的方式上有一个错误。我们可以用
修复它
# incorrectly was: url <- XML::getRelativeURL(session$url, form$url)
body(submit_form)[[3]]<-quote(url <- XML::getRelativeURL(form$url, session$url))
现在终于可以提交请求了
out <- submit_form(session = pg.session, filled_form)
# out %>% html_table()
(使用 rvest_0.2.0.9000 测试)
适配 rvest
生成一个表单来抓取生成的页面。我一直想出一个错误。
library(rvest)
url <- "https://iemweb.biz.uiowa.edu/pricehistory/pricehistory_SelectContract.cfm?market_ID=214"
pg.session <- html_session(url)
pg.form <- html_form(html(pg.session))
filled_form <- set_values(pg.form[[1]],
Month = "8",
Year = "1")
out <- submit_form(session = pg.session, pg.form)
returns 这个错误
Submitting with ''
Error in if (!(submit %in% names(submits))) { :
argument is of length zero
我做错了什么?
嗯,一方面,您没有提交实际填写的表格,而且您还试图传递表格列表而不是表格,但代码中似乎也可能存在错误无法识别带有大写标签的提交按钮。在这种情况下,HTML 的代码为
<INPUT TYPE="SUBMIT" VALUE="Get Prices">
和 submit_form
代码调用 submit_request
通过
submits <- Filter(function(x) identical(x$type, "submit"),
form$fields)
并且因为它检查与 "submit" 相同的值,所以没有找到 "SUBMIT"
sapply(pg.form[[1]]$fields, function(x) x$type)
# $Market_ID
# [1] "HIDDEN"
# $Month
# NULL
# $Year
# NULL
# $`NULL`
# [1] "SUBMIT"
最简单的可能是自己改
filled_form <- set_values(pg.form[[1]],
Month = "08",
Year = "2007")
filled_form$fields[[4]]$type <- "submit"
另一个问题是这个版本在 URL 我们解决表单的方式上有一个错误。我们可以用
修复它# incorrectly was: url <- XML::getRelativeURL(session$url, form$url)
body(submit_form)[[3]]<-quote(url <- XML::getRelativeURL(form$url, session$url))
现在终于可以提交请求了
out <- submit_form(session = pg.session, filled_form)
# out %>% html_table()
(使用 rvest_0.2.0.9000 测试)