r - 使用 rvest 添加新字段以形成表单
问题描述
我正在尝试使用 rvest 下载 [完整] 动态扩展 [控股] 表,但出现Unknown field names
错误。
s <- html_session("http://innovatoretfs.com/etf/?ticker=ffty")
f <- html_form(s)[[1]]
#the following line fails:
f.new <- set_values(f, `__EVENTTARGET` = "ctl00$BodyPlaceHolder$ViewHoldingsLinkButton")
##subsequent lines are not tested##
doc <- submit_form(s, f.new)
tabs <- xml_find_all(doc, "//table")
holdings <- html_table(tabs, fill = T, trim = T)[[5]]
我对 HTML/HTTP 不是很好,但从我可以追查的内容来看,在我看来,扩展表格需要使用这个新的字段值集回发表单
检查该set_values
函数后,似乎它只允许为现有字段分配值。
有什么办法可以在下面的表单中添加一个新字段rvest
?如果没有,是否有人知道我可以用来获得此功能的另一个包?
[已编辑] 非常明确地表明我需要动态扩展表的完整版本并添加预期的后续表提取代码
解决方案
令人厌恶,但 WORKS可能会被清理,但会向项目提交问题,以便正确修复 add_values 类型功能
getInnovatorHoldings <- function() {
s <- html_session("http://innovatoretfs.com/etf/?ticker=ffty")
f <- html_form(s)[[1]]
f.new <- add_values(f,
`__EVENTTARGET` = "ctl00$BodyPlaceHolder$ViewHoldingsLinkButton",
`__EVENTARGUMENT` = "",
`submit` = NULL)
s <- submit_form(s, f.new, "submit")
doc <- read_html(s)
tabs <- xml_find_all(doc, "//table")
holdings <- html_table(tabs, fill = T, trim = T)[[5]]
return(holdings)
}
add_values <- function(form, ...) {
new_values <- list(...)
no_match <- which(!names(new_values) %in% names(form$fields))
for (n in no_match) {
if (names(new_values[n]) == "submit") {
form$fields[[names(new_values[n])]] <- new_input(name = names(new_values[n]), type = "submit", value = NULL)
} else {
form$fields[[names(new_values[n])]] <- new_input(name = names(new_values[n]), type = "hidden", value = new_values[n][[1]])
}
}
return(form)
}
new_input <- function(name, type, value, checked = NULL, disabled = NULL, readonly = NULL, required = F) {
return(
structure(
list(name = name,
type = type,
value = value,
checked = checked,
disabled = disabled,
readonly = readonly,
required = required
),
class = "input"
)
)
}
推荐阅读
- r - glm.cluster 对象的伪 R 平方
- python - CustomUserManager 中的函数 create_user 不起作用
- javascript - 如何在video.js中一键自动播放视频和全屏?
- reactjs - 无法安装反应加载骨架
- sql - 从开始和结束 unixtimestamps 创建一个日期列并链接到其他数据
- python - 不通过 pyodbc 中的 sp_detach_db 分离数据库
- python - 将输出解析为数据框
- c# - 如何将连接字符串存储在微服务的中心位置
- ssh - 可以在不使用 SSH 的情况下重新启动 SSH 吗?
- ffmpeg - Pro ffmpeg 加入我