r - plots - tags$style shiny
Extraer enlaces de la página web usando R (2)
Las dos publicaciones a continuación son excelentes ejemplos de diferentes enfoques para extraer datos de sitios web y analizarlos en R.
Rastreo de tablas html en marcos de datos R usando el paquete XML
¿Cómo puedo usar R (paquetes Rcurl / XML?!) Para raspar esta página web
Soy muy nuevo en la programación, y recién estoy empezando con R, así que espero que esta pregunta sea bastante básica, pero dados los mensajes anteriores, me imagino que sí.
Todo lo que estoy buscando es extraer enlaces que coincidan con un patrón dado. Siento que probablemente podría usar RCurl para leer en las páginas web y extraer el método de fuerza bruta utilizando expresiones de cadena. Dicho esto, si la página web está bastante bien formada, ¿cómo podría hacerlo utilizando el paquete XML?
A medida que aprendo más, me gusta "mirar" los datos mientras resuelvo el problema. El problema es que algunos de estos enfoques generan listas de listas de listas, etc., por lo que es difícil para alguien que es nuevo (como yo) caminar por donde necesito ir.
Nuevamente, soy muy nuevo en todo lo que está programando, por lo que cualquier ayuda o fragmentos de código serán muy apreciados.
Aún más fácil con rvest
:
library(xml2)
library(rvest)
URL <- "http://.com/questions/3746256/extract-links-from-webpage-using-r"
pg <- read_html(URL)
head(html_attr(html_nodes(pg, "a"), "href"))
## [1] "//.com"
## [2] "http://chat..com"
## [3] "//.com"
## [4] "http://meta..com"
## [5] "//careers..com?utm_source=.com&utm_medium=site-ui&utm_campaign=multicollider"
## [6] "https://.com/users/signup?ssrc=site_switcher&returnurl=http%3a%2f%2f.com%2fquestions%2f3746256%2fextract-links-from-webpage-using-r"
La documentación para htmlTreeParse
muestra un método. Aquí está otro:
> url <- "http://.com/questions/3746256/extract-links-from-webpage-using-r"
> doc <- htmlParse(url)
> links <- xpathSApply(doc, "//a/@href")
> free(doc)
(Puede eliminar el atributo "href" de los enlaces devueltos al pasar "enlaces" a través de "as.vector".)
Mi respuesta anterior:
Un enfoque es utilizar el paquete stringr
Hadley Wickham, que puede instalar con install.packages ("stringr", dep = TRUE).
> url <- "http://.com/questions/3746256/extract-links-from-webpage-using-r"
> html <- paste(readLines(url), collapse="/n")
> library(stringr)
> matched <- str_match_all(html, "<a href=/"(.*?)/"")
(Supongo que algunas personas podrían no aprobar el uso de expresiones regulares aquí).
matched
es una lista de matrices, una por cadena de entrada en el vector html, ya que tiene una longitud aquí, emparejada solo tiene un elemento. Las coincidencias para el primer grupo de captura están en la columna 2 de esta matriz (y en general, el grupo i aparecerá en la columna (i + 1)).
> links <- matched[[1]][, 2]
> head(links)
[1] "/users/login?returnurl=%2fquestions%2f3746256%2fextract-links-from-webpage-using-r"
[2] "http://careers..com"
[3] "http://meta..com"
[4] "/about"
[5] "/faq"
[6] "/"