Как я могу извлечь информацию из 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``updated
additionalIndexing``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"