如何从R中提取xml页面中的信息

时间:2014-03-28 15:45:36

标签: xml r xml-parsing

我正在尝试从此页面获取所有信息:http://ws.parlament.ch/affairs/19110758/?format=xml

首先,我将文件下载到file,然后使用xmlParse(file)解析。

download.file(url = paste0(http://ws.parlament.ch/affairs/19110758/?format=xml), destfile = destfile)
file <- xmlParse(destfile[])

我现在想要提取我需要的所有信息。例如标题和ID号。我试过这样的事情:

title <- xpathSApply(file, "//h2", xmlValue)

但这只给我一个错误:unable to find an inherited method for function ‘saveXML’ for signature ‘"XMLDocument"

我接下来尝试的是:

library(plyr)

test <-ldply(xmlToList(file), function(x) { data.frame(x[!names(x)=="id"]) } )

这给了我data.frame一些信息。但是我丢失了诸如id之类的信息(这是最重要的)。

我希望得到data.frame一行(每个事件只有一行),其中包含一个事件的所有信息,例如id``updated additionalIndexing``affairType等。

有了它,它起作用(id的例子):

infofile <- xmlRoot(file)

nodes <-  getNodeSet(file, "//affair/id")
id <-as.numeric(lapply(nodes, function(x) xmlSApply(x, xmlValue)))

2 个答案:

答案 0 :(得分:4)

它是HTML文件,而不是XML文件。您需要使用htmlParse

destfile <- tempfile() # make this example copy-pasteable
download.file(url = "http://ws.parlament.ch/affairs/19110758/?format=xml", destfile = destfile)
file <- htmlParse(destfile)
title <- xpathSApply(file, '//h2')
xmlValue(title[[1]])
# [1] "Heilmittelwesen. Gesetzgebung"

答案 1 :(得分:2)

这将使您获得XML:

library(XML)
library(RCurl)
library(httr)

srcXML <- getURL("http://ws.parlament.ch/affairs/19110758/?format=xml", 
            .opts=c(user_agent("Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)"),
              verbose()))

myXMLFile <- xmlTreeParse(substr(srcXML,4,nchar(srcXML)))

我原本只使用了来自GET()的{​​{1}},但它似乎没有通过httr(当我不在代理后面时我需要测试它)确定具体的错误是什么)。我也做了user-agent因为前面有一堆奇怪的字符导致substr()调用错误。