2015-09-18 4 views
0

Это является продолжением на вопрос, который я поставил год назад здесь: How can I extract info from xml page with RПоследующие: Как загрузить XML, когда это как-то HTML

решение, предложенное работал в течение достаточно долгого времени. К сожалению, я никогда не думал об этом после того, как он работал гладко. Теперь 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) 

Спасибо!

+0

Следующие работы для меня. 'events_det <- getURL (url, asNames = TRUE);', хотя выдает предупреждение, о котором вы упомянули. Infact даже 'download.file (url," test.xml ")' отлично работает. И загруженный 'xml' обрабатывается отлично. Не уверен, что один и тот же проанализированный 'xml' служит вашей цели. – Frash

+0

@Frash Это загружает контент, но, к сожалению, без тегов. – Thomas

+0

«Появляется, чтобы быть XML ..» Это не так. http://ws.parlament.ch/votes/councillors?affairNumberFilter=20130051&format=xml приводит к XML не HTML. Загрузите его в свой браузер, затем просмотрите источник страницы. – Paulb

ответ

0

Оригинальный ответ смешанный 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) 
+1

Я бы также рекомендовал переключиться на пакет xml2, который не просачивается в память и может загружаться непосредственно из соединения httr. – hadley

0

Ну я почти получил истинное XML в R, а не HTML. Я думаю, это было бы полезно.

Разбор будет более надежным с XML, а не с HTML (также помните, что ваш источник обслуживает HTML с ошибками в нем). XML-файл прост, поэтому писать xpath будет намного проще.

Я сначала использовал завиток командной строки, потому что я больше знаком с ним. Эта команда тянут в XML:

 
curl -H "Accept: application/xml"\ 
    -H "Content-Type: application/xml"\ 
    -X GET http://ws.parlament.ch/votes/councillors?affairNumberFilter=20130051&format=xml 

Я перевел, что к этому RCurl, который проверяет наличие URI существования, а затем загружает его в документ:

 
if(url.exists("http://ws.parlament.ch/votes/councillors?affairNumberFilter=20130051&format=xml")) 
{ 
    curl = getCurlHandle() 
    curlSetOpt(.opts = list(httpheader = c(Accept ="application/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 не было этих бродячих ведущих персонажей.

Возможно, кто-то, у кого больше опыта, может это сделать дальше.

 Смежные вопросы

  • Нет связанных вопросов^_^