En el siguiente documento, se facilita el código para realizar el
rascado web.
Abrir librerías
library(httr)
library(jsonlite)
library(dplyr)
##
## Adjuntando el paquete: 'dplyr'
## The following objects are masked from 'package:stats':
##
## filter, lag
## The following objects are masked from 'package:base':
##
## intersect, setdiff, setequal, union
Abrir clave API (SerpAPI)
api_key <- "a02926af6a93d7cd1ce8ee2e984cf3c84250eea5573adbf16db7dad45d84e9b9"
Palabras clave
keywords <- c("cortina de humo", "manipulación mediática", "chivo expiatorio", "distracción masiva", "pantalla de humo")
Muestreo de periodicos
medios <- c("milenio.com", "eluniversal.com.mx", "reforma.com", "excelsior.com.mx", "eleconomista.com.mx", "elfinanciero.com.mx", "jornada.com.mx")
Función para buscar
buscar_noticias <- function(keyword) {
url <- "https://serpapi.com/search.json"
respuesta <- GET(url, query = list(
engine = "google_news",
q = keywords,
hl = "es",
gl = "mx",
api_key = api_key
))
datos <- fromJSON(content(respuesta, "text", encoding = "UTF-8"))
if (!is.null(datos$news_results)) {
noticias <- datos$news_results
return(nrow(noticias))
} else {
return(0)
}
}
Función para contar
buscar_noticias <- function(keyword) {
url <- "https://serpapi.com/search.json"
respuesta <- GET(url, query = list(
engine = "google_news",
q = keyword,
hl = "es",
gl = "mx",
api_key = api_key
))
datos <- fromJSON(content(respuesta, "text", encoding = "UTF-8"))
if (!is.null(datos$news_results)) {
noticias <- as.data.frame(datos$news_results)
noticias_filtradas <- noticias %>%
filter(grepl(paste(medios, collapse = "|"), link))
return(nrow(noticias_filtradas))
} else {
return(0)
}
}
Aplicar la función a cada palabra clave
conteo_resultados <- sapply(keywords, buscar_noticias)
Resultados
conteo_df <- data.frame(
Palabra_clave = keywords,
Numero_de_noticias = conteo_resultados
)