Продолжение: Как скачать XML, когда это как-то HTML
Это продолжение вопроса, который я задал год назад здесь: Как мне извлечь информацию со страницы XML с помощью R
Предложенное решение работало довольно долго. К сожалению, я никогда не думал об этом после того, как все прошло гладко. Теперь R выдает ошибку, и я, очевидно, не знаю, как поступить.
Вот что я хочу сделать:
require(XML)
require(RCurl)
url <- "http://ws.parlament.ch/votes/councillors?affairNumberFilter=20130051&format=xml"
affairs_det <- getURL(url, .opts=c(user_agent("Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)"),
verbose()), asNames=TRUE)
#This worked, but not anymore
Error in function (type, msg, asError = TRUE) : No URL set!
In addition: Warning message:
In mapCurlOptNames(names(.els), asNames = TRUE) :
Unrecognized CURL options: output, auth_token, options, fields, headers, method, url
affairs_det_parsed <- xmlTreeParse(substr(affairs_det,4,nchar(affairs_det)), encoding = "UTF-8")
Вопрос как-то двоякий. Во-первых, как мне скачать файл, который выглядит как XML, но если я загружаю его с download.file(url, destfile="test.xml")
это кажется HTML? Я считаю, что установка user_agent
справился с этим...?
Во-вторых, я не понимаю ошибку?
редактировать
Я хотел бы получить доступ к информации через тег, например, здесь id
, До ошибки mysterios это работало также.
infofile <- xmlRoot(affairs_det_parsed)
#gets councillor ids
id <- getNodeSet(infofile, paste0("//councillors/councillor/id"))
id <- lapply(id, function(x) xmlSApply(x, xmlValue))
id <- sapply(id, "[[", 1)
Спасибо!
2 ответа
Оригинальный ответ смешал синтаксис RCurl и httr, что странно. Ваш фрагмент выше не указан, чтобы указать использование httr. Вероятно, httr изменился, но продолжает работать сам с собой, но не думал, что он будет использоваться с RCurl.
library(httr)
x = GET(url)
извлекает файл
stop_for_status(x)
проверяет, что ошибок не было.
xml = content(x)
получает содержимое XML. Или загрузите на диск и используйте XML для его анализа.
t <- tempfile()
GET(url, write_disk(t))
xml = xmlParse(t)
Ну, я почти получил настоящий XML в R, а не HTML. Я думаю, это было бы полезно.
Синтаксический анализ будет более надежным с XML, а не с HTML (также имейте в виду, что ваш источник обслуживает HTML с ошибками в нем) XML-файл прост, поэтому написание xpath будет намного проще.
Сначала я использовал командную строку curl, потому что я более знаком с ней. Эта командная строка вытащила в XML:
curl -H "Принять: приложение /xml"\ -H "Тип контента: приложение /xml"\ -X GET http://ws.parlament.ch/votes/councillors?affairNumberFilter=20130051&format=xml
Я перевел это на этот Rcurl, который проверяет существование URI, а затем загружает его в doc:
if (url.exists ("http://ws.parlament.ch/votes/councillors?affairNumberFilter=20130051&format=xml")) {curl = getCurlHandle () curlSetOpt (.opts = list (httpheader = c (Accept = "приложение) /xml", "Content-Type"="application/xml"), verbose = TRUE),curl = curl) doc = getURL("http://ws.parlament.ch/votes/councillors?affairNumberFilter=20130051&format=xml", curl = curl) }
Но xmlParse
выдает ошибку поговорка Error: XML content does not seem to be XML
, Визуальная проверка загруженного файла выявляет ведущие символы мусора, в частности "
, Я думаю, что это необходимо решить перед дальнейшей обработкой.
Это интересно, потому что в командной строке Curl не было этих бездомных ведущих персонажей.
Может быть, кто-то с большим опытом может пойти дальше.