gpt4 book ai didi

html - 如何在 R 中发布一个简单的 HTML 表单?

转载 作者:太空狗 更新时间:2023-10-29 14:06:02 25 4
gpt4 key购买 nike

我是 R 编程的新手,我正在尝试将我在约翰霍普金斯大学数据科学类(class)中学到的一些东西付诸实践。具体来说,我想自动化从 US Treasury website 下载历史债券价格的过程。

同时使用 Firefox 和 R,我能够确定美国财政部网站使用非常简单的 HTML POST 表单来为感兴趣的报价指定一个日期。然后它会返回所有未偿还债券的二级市场信息表。

我曾尝试使用两个不同的 R 包向美国财政部 Web 服务器提交请求,但没有成功。野兔是我尝试过的两种方法:

尝试 #1(使用 RCurl):

url <- "https://www.treasurydirect.gov/GA-FI/FedInvest/selectSecurityPriceDate.htm"
td.html <- postForm(url,
submit = "Show Prices",
priceDate.year = 2014,
priceDate.month = 12,
priceDate.day = 15,
.opts = curlOptions(ssl.verifypeer = FALSE))

这会导致网页被返回并存储在 td.html 中,但它只包含来自 treasurydirect 服务器的错误消息。我知道服务器正在运行,因为当我通过浏览器提交相同的请求时,我得到了预期的结果。

尝试 #2(使用 rvest):

s <- html_session(url)
f0 <- html_form(s)
f1 <- set_values(f0[[2]], priceDate.year=2014, priceDate.month=12, priceDate.day=15)
test <- submit_form(s, f1)

不幸的是,这种方法甚至没有离开 R,并导致 R 出现以下错误消息:

Submitting with 'submit'
Error in function (type, msg, asError = TRUE) : <url> malformed

我似乎无法弄清楚如何查看发送到 rvest 的“格式错误”文本,以便我可以尝试诊断问题。

对于解决这个看似简单的任务的任何建议或提示,我们将不胜感激!

最佳答案

好吧,它似乎可以与 httr 库一起使用。

library(httr)

url <- "https://www.treasurydirect.gov/GA-FI/FedInvest/selectSecurityPriceDate.htm"

fd <- list(
submit = "Show Prices",
priceDate.year = 2014,
priceDate.month = 12,
priceDate.day = 15
)

resp<-POST(url, body=fd, encode="form")
content(resp)

rvest 库实际上只是 httr 的包装器。看起来它不能很好地解释没有服务器名称的绝对 URL。所以如果你看

f1$url
# [1] /GA-FI/FedInvest/selectSecurityPriceDate.htm

你看到它只有路径而不是服务器名称。这似乎混淆了 httr。如果你这样做

f1 <- set_values(f0[[2]], priceDate.year=2014, priceDate.month=12, priceDate.day=15)
f1$url <- url
test <- submit_form(s, f1)

这似乎行得通。也许这是一个应该报告给 rvest 的错误。 (在 rvest_0.1.0 上测试)

关于html - 如何在 R 中发布一个简单的 HTML 表单?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27631460/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com