2013-08-08 6 views
1

Я пытаюсь использовать R для получения данных из открытого источника данных в Нидерландах. Источник - here.Как распознать формат данных - соскабливание в R

Когда вы открываете это в браузере (по крайней мере, в Chrome), он представляется в виде XML-кода. Поэтому я подумал, что могу использовать RCURL-пакет для его анализа, а затем использовать XPath для извлечения конкретных узлов, которые я ищу.

Однако, пытаясь разобрать его, я сталкиваюсь с проблемами. Кажется, это не прямой xml, но в нем есть json.

Как я могу легко извлечь информацию из источника данных? Не ищите полного решения, просто руководство в правильном направлении.

Если я пытаюсь:

url <- "http://www.kiesbeter.nl/open-data/api/care/careproviders/?apikey=18a2b2b0-d232-4f48-8d10-5fc10ff04b17" 
html <- getURL(url) 
doc <- htmlParse(html,asText = TRUE) 

кажется то, что документ находится в каком-то формате JSON еще. Я не могу использовать getNodeSet(doc, "//careproviders"). Однако, если я сначала использую JSON, я получаю его в неудобном формате списка.

Вопрос в том, как я могу обрабатывать эти данные, чтобы я мог легко получить информацию из этого набора данных (например, всех поставщиков услуг по уходу). И как узнать, в каком формате находятся данные?

ответ

2

Использование

html <- getURL(url, httpheader = c(Accept = "text/xml")) 

с указанным типом содержимого, чтобы получить XML с завитком.

Немного разъяснений. Служба предоставляет как форматы данных XML, так и JSON со значением по умолчанию JSON. Ваш браузер отправляет text/xml (среди прочего) в Accept Заголовок с запросом, поэтому служба возвращает XML. Curl (по умолчанию) ничего не отправляет, сервис возвращает формат JSON, который является типом по умолчанию.

+0

Спасибо! Кажется, это действительно работает. – user2652572

1

Документ находится в формате JSON.

library(rjson) 
library(RCurl) 
ll <- fromJSON(getURL(url)) 

Формат json более дружественным и быстрее, чем XML один для разбора списка. Например:

ll$careproviders$careprovider[[1]] 
$id 
[1] "1" 

$friendly_name 
[1] "ziekenhuizen" 

$name 
[1] "Ziekenhuizen" 

$CareProviderCategoryId 
[1] "8"