Как я могу извлечь информацию из XML-страницы с помощью R

Я пытаюсь получить всю информацию с этой страницы: 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[])

Теперь я хочу извлечь всю необходимую мне информацию. Например, название и идентификационный номер. Я попробовал что-то вроде этого:

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``updatedadditionalIndexing``affairTypeи т.п.

С этим работает (пример для id):

infofile <- xmlRoot(file)

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

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() от httr но это, кажется, не проходит user-agent хорошо (мне нужно проверить это, когда я не за прокси, чтобы быть уверенным в том, что это за конкретная ошибка). Я также сделал substr() как есть куча странных персонажей на фронте, которые вызывают xmlTreeParse() Призыв к ошибке.

Это файл 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"
Другие вопросы по тегам