2013-05-15 143 views
0

SO上有很多相當詳細的答案,其中涵蓋了對aspx網站的認證登錄和下載。作爲一個完整的n00b,我一直無法找到如何從網絡表單獲取數據的簡單解釋。下載ASPX頁面與R

以下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') 

給我一個View(test)

凡是步驟我通過這個或點我在正確的方向將是非常感激地收到goobledegook。

回答

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)) 
+0

很好用,謝謝。是否有新手學習aspx代碼如何工作的好文檔。在另一頁上,我甚至無法弄清楚代碼被髮送回服務器的是什麼。 –

1

鏈接正在動態生成。另一個問題是內容實際上並不在該鏈接上。您正在向一個(非常奇怪且記錄不完整的)API發出請求,該API最終將返回zip文件。如果您在單擊該鏈接時查看Chrome開發工具,則會看到message and response headers

有幾種方法可以解決這個問題。如果你知道一些javascript,你可以編寫一個像Phantom這樣的無頭webkit實例來加載這些頁面,模擬lick事件並等待內容響應,然後將其傳遞給某些東西。

或者你可能能夠將httr作爲一個適當的寧靜的API來對待它。我不知道這是甚至是遠程可能的。 :)

+0

感謝@AdamHyland - 它的起點,使昏暗的排序現在感覺。不知道任何JavaScript悲傷。 –