2013-06-11 13 views
5

Sto usando il seguente codice:R Errore utilizzando readHTMLTable

url = "http://finance.yahoo.com/q/op?s=DIA&m=2013-07" 

library(XML) 
tabs = readHTMLTable(url, stringsAsFactors = F) 

ottengo il seguente errore:

Error: failed to load external entity "http://finance.yahoo.com/q/op?s=DIA&m=2013-07" 

Quando uso l'URL nel browser funziona benissimo. Quindi, cosa sto facendo male qui?

Grazie

+0

Il tuo codice funziona bene per me. – Thomas

+0

Funziona anche per me. Basato su http://stackoverflow.com/questions/14629026/r-readhtmltable-error-failed-to-load-external-entity, sembra che questo potrebbe essere un problema con la tua connessione Internet. Sei in grado di caricare la pagina in un browser? – SchaunW

+0

Sì, sono in grado di caricare la pagina fine in un browser. Quindi, la mia connessione Internet va bene, presumo. – Zanam

risposta

11

E 'difficile sapere con certezza dal momento che non può replicare l'errore, ma secondo l'autore del pacchetto (vedi http://comments.gmane.org/gmane.comp.lang.r.mac/2284), i metodi di XML per ottenere contenuti web sono piuttosto minimalista. Una soluzione è quella di utilizzare RCurl per ottenere il contenuto e XML di analizzarlo:

library(XML) 
library(RCurl) 

url <- "http://finance.yahoo.com/q/op?s=DIA&m=2013-07" 

tabs <- getURL(url) 
tabs <- readHTMLTable(tabs, stringsAsFactors = F) 

O, se RCurl getta ancora un errore, provare il pacchetto httr:

library(httr) 

tabs <- GET(url) 
tabs <- readHTMLTable(rawToChar(tabs$content), stringsAsFactors = F) 
+0

Ottima risposta. Grazie per aver dedicato del tempo. –

0

Ho appena ottenuto lo stesso errore come sopra "Impossibile caricare un'entità esterna" quando si usa url < - "http://www.cisco.com/c/en/us/products/a-to-z-series-index.html" doc < - htmlTreeParse (url, useInternal = TRUE)

Mi sono imbattuto in questo e in un altro post sull'argomento, che non ha risolto il mio problema. Questo codice ha funzionato prima. Ho poi capito che ero su VPN aziendale. Sono uscito dalla VPN e ho provato di nuovo e ha funzionato. Quindi, essere su VPN potrebbe essere un altro motivo per cui si otterrebbe l'errore di cui sopra. Scendere dalla VPN lo risolve.