Oi pessoal, boa noite!
Estou tentando fazer o scrapping de letras de músicas no site https://www.letras.mus.br/, teoricamente tá dando tudo certo, a única questão, é que as letras obtidas, que estão em linhas diferentes no site, acabam vindo coladas… exemplo: a última palavra de uma linha com a primeira palavra da próxima linha… teria alguma maneira de corrigir isso?
Abaixo segue o código desenvolvido até agora…
library(tidyverse)
library(httr)
library(rvest)
#>
#> Attaching package: 'rvest'
#> The following object is masked from 'package:readr':
#>
#> guess_encoding
link<-"https://www.letras.mus.br/rebanhao/"
#Função para pegar os links de cada música
pega_links <- function(url){
# Lendo HTML
site <- url %>% read_html()
# Extraindo os links
link <- site %>%
rvest::html_nodes("a") %>%
rvest::html_attr("href")
tibble(url = link)
}
dados<-link %>% pega_links()
dados<-dados %>% filter(str_detect(dados$url,"^/rebanhao/"),
str_detect(dados$url,"/$"))
dados<- dados %>% filter(dados$url!="/rebanhao/discografia/",
dados$url!="/rebanhao/",
str_detect(dados$url,"/discografia/")==FALSE)
#Criando os links completos
dados$link_comp<-paste0("https://www.letras.mus.br",dados$url)
dados<- dados$link_comp
dados$Link<-str_squish(dados$Link)
#> Error in dados$Link: $ operator is invalid for atomic vectors
#Função que extrai as letras das músicas
extrair_musicas<-function(url){
x<-url %>% read_html()
titulo<- x %>%
html_nodes("div.cnt-head_title") %>%
html_text()
musica<- x %>%
html_nodes("div.cnt-letra.p402_premium") %>%
html_text()
tibble(link = url, nome = titulo, letra = musica)
}
df_teste<-dados %>% map_df(extrair_musicas) %>% unique()
df_teste$letra<- str_squish(df_teste$letra)
df_teste$nome<-str_remove_all(df_teste$nome,"Rebanhão")
df_teste$nome<-str_squish(df_teste$nome)