2013-05-15 2 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') 

давая мне goobledegook с View(test)

Что-нибудь, что ступает меня через это или указывает меня в правильном направлении будет очень благодарностью.

ответ

2

URL, к которому вы обращаетесь с помощью read.csv, возвращает zipped-файл. Вы можете скачать его с помощью 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, который в конечном итоге вернется с zip-файлом. Если вы посмотрите в инструментах Chrome dev, когда вы нажмете на эту ссылку, вы увидите message and response headers.

Существует несколько способов решить эту проблему. Если вы знаете какой-то javascript, вы можете создать сценарий безгласного экземпляра веб-каскада, например Phantom, для загрузки этих страниц, имитировать лижущие события и дождаться ответа на контент, а затем передать это чему-то.

В качестве альтернативы вам может быть может быть в состоянии finagle httr в лечении этого как надлежащего успокоительного API. Я понятия не имею, возможно ли это даже отдаленно. :)

+0

благодаря @AdamHyland - его начало, чтобы сделать тусклый вид смысл сейчас. Не знаю какого-либо javascript печально. –