如何识别数据格式 - 在R中进行抓取

时间:2013-08-08 10:21:13

标签: xml json r dataformat

我正在尝试使用R从荷兰的开放数据源获取数据。来源是here

当您在浏览器(至少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)

然后,似乎doc仍处于某种JSON格式。我似乎无法使用getNodeSet(doc, "//careproviders")。 但是,如果我首先使用fromJSON,我会以一种笨拙的列表格式得到它。

所以问题是如何处理这些数据,以便我可以轻松地从该数据集中获取信息(例如所有护理提供者)。我如何识别数据的格式?

2 个答案:

答案 0 :(得分:2)

使用

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

使用指定的content-type来获取带curl的XML。

稍微澄清一下。该服务提供XML和JSON数据格式,默认为JSON。您的浏览器在text/xml标头中发送Accept(以及其他)请求,因此服务返回XML。 curl(默认情况下)不发送任何内容,service返回JSON格式,这是默认类型。

答案 1 :(得分: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"