ho dovuto fare questo, una volta sul tempo di me.
Un modo per farlo è utilizzare le espressioni XPath. Avrete bisogno di questi pacchetti installati dal repository a http://www.omegahat.org/
library(RCurl)
library(RTidyHTML)
library(XML)
Usiamo RCurl per connettersi al sito di interesse. Ha molte opzioni che ti permettono di accedere ai siti web che le funzioni predefinite in R base avrebbero difficoltà con Penso che sia giusto dire. È un'interfaccia R per la libreria libcurl.
Utilizziamo RTidyHTML per pulire pagine Web HTML malformate in modo che siano più semplici da analizzare. È un'interfaccia R per la libreria libtidy.
Utilizziamo XML per analizzare il codice HTML con le nostre espressioni XPath. È un'interfaccia R per la libreria libxml2.
In ogni modo, ecco cosa si fa (codice minimo, ma sono disponibili opzioni, vedere le pagine di aiuto di funzioni corrispondenti):
u <- "http://stackoverflow.com/questions/tagged?tagnames=r"
doc.raw <- getURL(u)
doc <- tidyHTML(doc.raw)
html <- htmlTreeParse(doc, useInternal = TRUE)
txt <- xpathApply(html, "//body//text()[not(ancestor::script)][not(ancestor::style)][not(ancestor::noscript)]", xmlValue)
cat(unlist(txt))
Ci possono essere alcuni problemi con questo approccio, ma non riesco a ricordare cosa sono fuori di testa (non penso che la mia espressione xpath funzioni con tutte le pagine web, a volte potrebbe non filtrare il codice dello script o potrebbe semplicemente non funzionare affatto con altre pagine, meglio sperimentare!)
PS Un altro modo, che funziona quasi perfettamente Credo che a web scraping tutto il testo da HTML è il seguente (in pratica ottenere Internet Explorer per eseguire la conversione per voi):
library(RDCOMClient)
u <- "http://stackoverflow.com/questions/tagged?tagnames=r"
ie <- COMCreate("InternetExplorer.Application")
ie$Navigate(u)
txt <- list()
txt[[u]] <- ie[["document"]][["body"]][["innerText"]]
ie$Quit()
print(txt)
TUTTAVIA, mi è mai piaciuto fare questo perché non è solo lento, ma se lo si vectorise e si applica un vettore di URL, se Internet Explorer si blocca su una pagina errata, allora R potrebbe bloccarsi o bloccarsi da solo (non credo che in questo caso sia molto utile). Inoltre è incline a consentire i pop-up. Non lo so, è passato un po 'di tempo da quando l'ho fatto, ma ho pensato di farlo notare.
Duplicato: http://stackoverflow.com/questions/1844829/how-can-i-read-and-parse-the-contents-of-a-webpage-in-r – Shane
@Shane - La risposta data su quella pagina non sembra funzionare (almeno non più, anche se sono sicuro che ha fatto in quel momento). – JoshuaCrove
Quindi dovremmo aggiustarlo, non avviarne uno nuovo. Oppure fai una domanda direttamente correlata a come quella vecchia risposta non funziona più. – Shane