gpt4 book ai didi

html - httr:使用 POST() 检索数据

转载 作者:太空狗 更新时间:2023-10-29 13:46:23 28 4
gpt4 key购买 nike

免责声明:虽然我已经设法使用 httr 的 POST 函数从另一个来源获取数据,但请大家知道,我在 httr 和 HTML 表单方面是个十足的菜鸟。

我想使用 httr 从网站直接将一些数据导入 R。我的第一次尝试涉及将命名列表传递给 body arg(如 this vignette 所示)。但是,我注意到表单输入名称中有方括号(至少我认为它们是表单输入参数)。因此,我尝试将正文作为字符串传递,因为我认为它应该出现在请求正文中:

url <- 'http://research.stlouisfed.org/fred2/series/TOTALSA/downloaddata'
query <- paste('form[native_frequency]=Monthly', 'form[units]=lin',
'form[frequency]=Monthly', 'form[obs_start_date]="1976-01-01"',
'form[obs_end_date]="2014-11-01"', 'form[file_format]=txt'
sep = '&')
response <- POST(url, body = query)

无论如何,上面的代码只返回网页源代码,我不知道如何正确提交表单,以便它返回与手动单击表单的“下载数据”按钮相同的数据。

在 Chrome 上的开发人员工具/网络中,当我手动单击表单上的“下载数据”按钮时,它在 Content-Disposition 下的响应 header 中声明有一个包含数据的文本文件附件。它似乎不在与上面代码中的响应对象关联的任何 header 中。为什么 POST 请求没有返回此文件 - 包含数据的文件在哪里?

感觉好像我遗漏了一些明显的东西。有人愿意帮我把这些点联系起来吗?

最佳答案

通常,如果您要使用 httr,您可以让它为您构建和编码数据,您只需通过表单值列表传递信息。尝试

url<-"http://research.stlouisfed.org/fred2/series/TOTALSA/downloaddata"
query <- list('form[native_frequency]'="Monthly",
'form[units]'="lin",
'form[frequency]'="Monthly",
'form[obs_start_date]'="1996-01-01",
'form[obs_end_date]'="2014-11-01",
'form[file_format]'="txt")
response <- POST(url, body = query)
content(response, "text")

返回看起来像

[1] "Title:               Total Vehicle Sales\r\nSeries ID:           TOTALSA\r\nSource:   
US. Bureau of Economic Analysis\r\nRelease: Supplemental Estimates, Motor
Vehicles\r\nSeasonal Adjustment: Seasonally Adjusted Annual Rate\r\nFrequency: Monthly\r\nUnits:
Millions of Units\r\nDate Range: 1996-01-01 to 2014-11-
01\r\nLast Updated: 2014-12-05 7:16 AM CST\r\nNotes: \r\n\r\nDATE
VALUE\r\n1996-01-01 14.8\r\n1996-02-01 15.6\r\n1996-03-01 16.0\r\n1996-04-01 15.5\r\n1996-05-01
16.0\r\n1996-06-01 15.3\r\n1996-07-01 15.1\r\n1996-08-01 15.5\r\n1996-09-01 15.5\r\n1996-10-01 15.3\r

关于html - httr:使用 POST() 检索数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27371372/

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