在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')
给我goobledegook View(test)
非常感激地接受任何能够指引我或指出正确方向的事情。
答案 0 :(得分:2)
您使用read.csv访问的URL正在返回一个压缩文件。你可以下载它
使用httr
说出并将内容写入临时文件:
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))
答案 1 :(得分:1)
链接正在动态生成。另一个问题是内容实际上并不在该链接上。您正在向一个(非常奇怪且记录不完整的)API发出请求,该API最终会返回zip文件。如果您在点击该链接时查看Chrome开发工具,则会看到message and response headers。
有几种方法可以解决这个问题。如果你知道一些javascript,你可以编写像Phantom这样的无头webkit实例来加载这些页面,模拟lick事件并等待内容响应,然后将其传递给某些东西。
或者,你可能能够将这个问题视为一个适当的宁静API。我不知道这是否可能。 :)