0

SO上有许多相当详细的答案,其中包括通过身份验证登录到aspx站点并从中下载。作为一个完整的 n00b,我无法找到有关如何从 Web 表单获取数据的简单解释

以下 MWE 仅作为示例。而这个问题更旨在教我如何为更广泛的网页集合。

网站 :

http://data.un.org/Data.aspx?d=SNA&f=group_code%3a101

我尝试过并且(显然)失败了。

test=read.csv('http://data.un.org/Handlers/DownloadHandler.ashx?DataFilter=group_code:101;country_code:826&DataMartId=SNA&Format=csv&c=2,3,4,6,7,8,9,10,11,12,13&s=_cr_engNameOrderBy:asc,fiscal_year:desc,_grIt_code:asc')

给我一个 goobledegookView(test)

任何能够引导我完成此过程或为我指明正确方向的事情都会非常感激。

4

2 回答 2

2

您使用 read.csv 访问的 URL 正在返回一个压缩文件。您可以使用httrsay 下载它并将内容写入临时文件:

 library(httr)
 urlUN <- "http://data.un.org/Handlers/DownloadHandler.ashx?DataFilter=group_code:101;country_code:826&DataMartId=SNA&Format=csv&c=2,3,4,6,7,8,9,10,11,12,13&s=_cr_engNameOrderBy:asc,fiscal_year:desc,_grIt_code:asc"
 response <- GET(urlUN)
 writeBin(content(response, as = "raw"), "temp/temp.zip")
 fName <- unzip("temp/temp.zip", list = TRUE)$Name
 unzip("temp/temp.zip", exdir = "temp")
 read.csv(paste0("temp/", fName))

或者Hmisc有一个有用的getZip功能:

 library(Hmisc)
 urlUN <- "http://data.un.org/Handlers/DownloadHandler.ashx?DataFilter=group_code:101;country_code:826&DataMartId=SNA&Format=csv&c=2,3,4,6,7,8,9,10,11,12,13&s=_cr_engNameOrderBy:asc,fiscal_year:desc,_grIt_code:asc"
 unData <- read.csv(getZip(urlUN))
于 2013-05-15T03:38:57.640 回答
1

链接是动态生成的。另一个问题是内容实际上不在那个链接上。您正在向(非常奇怪且记录不充分的)API 发出请求,该 API 最终将与 zip 文件一起返回。如果您在单击该链接时查看 Chrome 开发工具,您将看到消息和响应标头

有几种方法可以解决这个问题。如果你知道一些 javascript,你可以编写一个像 Phantom 这样的无头 webkit 实例来加载这些页面,模拟 lick 事件并等待内容响应,然后将其传递给某些东西。

或者,您可以将 httr 视为一个适当的休息 API。我不知道这是否可能。:)

于 2013-05-15T01:28:54.110 回答