Dúvida Scrapping Letras.Mus

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)
1 Curtida

Ooi, que legal seu trabalho :slight_smile:
Usar html_text2() no lugar de html_text() vai substituir < br> por \n daí você adiciona o passo str_replace_all("\n", " ").

A função ficaria:

#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_text2() %>%
    str_replace_all("\n", " ")
  
  musica<- x %>% 
    html_nodes("div.cnt-letra.p402_premium") %>% 
    html_text2() %>%
    str_replace_all("\n", " ")
  
  tibble(link = url, nome = titulo, letra = musica)
}

Espero que ajude.

Abraço.

2 Curtidas

Muito Obrigado @lusilvamenezes … Sua sugestão funcionou perfeitamente :slight_smile:

2 Curtidas