Hace poco necesitaba datos sobre la capitalización bursátil de una gran muestra de valores y no tenía acceso a bases de datos de pago. Por lo tanto, recurrí a raspar los datos de https://finance.yahoo.com utilizando una pequeña función de webscraping:
library(tidyverse)
library(rvest)
library(crayon)
scrape_MC <- function(ticker){
message(blue("Scraping "),
white(ticker))
ret <- try(paste0("https://finance.yahoo.com/quote/",
ticker) %>%
read_html()%>%
html_table() %>%
reduce(.f=bind_rows) %>%
as_tibble() %>%
filter(X1 == "Market Cap") %>%
pull(X2),
silent = T)
ifelse(class(ret)=="try-error",
ticker,
ret)
}
A continuación, puede utilizar esta función para raspar los teletipos individuales:
scrape_MC("AAPL")
que devuelve:
Scraping AAPL
[1] "1.969T"
Los datos se citan dependiendo de la unidad y a veces se reportan errores, lo arreglé usando este fragmento de código:
MC <- MC_data %>%
filter(str_detect(MC, "^\\d")) %>%
mutate(MC = str_replace(MC, ",", ""),
Unit = str_extract(MC, "[:alpha:]$"),
MC = as.numeric(str_remove(MC, "[:alpha:]$")),
MC = case_when(Unit == "B" ~ MC * 1000,
Unit == "M" ~ MC,
Unit == "T" ~ MC * 1000*1000,
is.na(Unit) ~ MC / (1000*1000)
)
) %>%
select(-Unit)
Se podría adaptar esto para raspar la industria o el sector también.