用R下载ASPX页面

时间:2013-05-15 01:00:22

标签: r web-applications web webclient-download

在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)

非常感激地接受任何能够指引我或指出正确方向的事情。

2 个答案:

答案 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。我不知道这是否可能。 :)