support - Extraiga el texto de las URL de resultados de búsqueda con R
rel canonical support google (2)
Sé un poco de R, pero no soy un profesional. Estoy trabajando en un proyecto de minería de texto con R.
Busqué en el sitio web de la Reserva Federal una palabra clave, por ejemplo, "inflación". La segunda página del resultado de la búsqueda tiene la URL: ( https://search.newyorkfed.org/board_public/search?start=10&Search=&number=10&text=inflation ).
Esta página tiene 10 resultados de búsqueda (10 URL). Quiero escribir un código en R que "leerá" la página correspondiente a cada una de esas 10 URL y extraer los textos de esas páginas web a archivos .txt. Mi única entrada es la URL mencionada.
Aprecio tu ayuda. Si hay alguna publicación anterior similar, remítame eso también. Gracias.
Aqui tienes. Para la página de búsqueda principal, puede usar una expresión regular ya que la URL es fácilmente identificable en el código fuente.
(con la ayuda de https://statistics.berkeley.edu/computing/r-reading-webpages )
library(''RCurl'')
library(''stringr'')
library(''XML'')
pageToRead <- readLines(''https://search.newyorkfed.org/board_public/search?
start=10&Search=&number=10&text=inflation'')
urlPattern <- ''URL: <a href="(.+)">''
urlLines <- grep(urlPattern, pageToRead, value=TRUE)
getexpr <- function(s,g)substring(s, g, g + attr(g, ''match.length'') - 1)
gg <- gregexpr(urlPattern, urlLines)
matches <- mapply(getexpr, urlLines, gg)
result = gsub(urlPattern,''//1'', matches)
names(result) = NULL
for (i in 1:length(result)) {
subURL <- result[i]
if (str_sub(subURL, -4, -1) == ".htm") {
content <- readLines(subURL)
doc <- htmlParse(content, asText=TRUE)
doc <- xpathSApply(doc, "//text()[not(ancestor::script)][not(ancestor::style)][not(ancestor::noscript)][not(ancestor::form)]", xmlValue)
writeLines(doc, paste("inflationText_", i, ".txt", sep=""))
}
}
Sin embargo, como probablemente haya notado, esto solo analiza las páginas .htm, para los documentos .pdf que están vinculados en el resultado de búsqueda, le aconsejo que eche un vistazo allí: http://data.library.virginia.edu/ reading-pdf-files-into-r-for-text-mining /
Esta es una idea básica de cómo deshacerse de estas páginas. Aunque puede ser lento en r si hay muchas páginas para eliminar. Ahora tu pregunta es un poco ambigua. Desea que los resultados finales sean archivos .txt . ¿Qué hay de las páginas web que tienen pdf? Bueno. aún puede usar este código y cambiar la extensión de archivo a pdf para las páginas web que tienen archivos PDF.
library(xml2)
library(rvest)
urll="https://search.newyorkfed.org/board_public/search?start=10&Search=&number=10&text=inflation"
urll%>%read_html()%>%html_nodes("div#results a")%>%html_attr("href")%>%
.[!duplicated(.)]%>%lapply(function(x) read_html(x)%>%html_nodes("body"))%>%
Map(function(x,y) write_html(x,tempfile(y,fileext=".txt"),options="format"),.,
c(paste("tmp",1:length(.))))
Este es el desglose del código anterior: la URL de la que desea eliminar:
urll="https://search.newyorkfed.org/board_public/search?start=10&Search=&number=10&text=inflation"
Obtenga todas las URL que necesita:
allurls <- urll%>%read_html()%>%html_nodes("div#results a")%>%html_attr("href")%>%.[!duplicated(.)]
¿Dónde quieres guardar tus textos? Crea los archivos temporales:
tmps <- tempfile(c(paste("tmp",1:length(allurls))),fileext=".txt")
como por ahora. Tu allurls
es un personaje de clase. Tienes que cambiar eso a xml para poder eliminarlos. Luego, finalmente, escríbelos en los archivos tmp creados anteriormente:
allurls%>%lapply(function(x) read_html(x)%>%html_nodes("body"))%>%
Map(function(x,y) write_html(x,y,options="format"),.,tmps)
Por favor, no dejen nada. Por ejemplo, después de ..."format"),
hay un punto. Toma eso en consideración. Ahora sus archivos han sido escritos en el tempdir . Para determinar dónde están, simplemente escriba el comando tempdir()
en la consola y debería darle la ubicación de sus archivos. Al mismo tiempo, puede cambiar la ubicación de los archivos en el desguace dentro del comando tempfile
.
Espero que esto ayude.