Erro 503 para download automatizado de CSVs

Oi, pessoal. Boa tarde.

Estou com problema para baixar os arquivos CSV do Spotify, que é baixado ao acessar o link. Está dando Erro 503. Pesquisei aqui e imagino que o Spotify esteja tentando impedir os downloads. Tentei usar webdriver/phantomjs, mas isso trava demais o meu laptop. Há alguma forma de eu continuar baixar os CSVs de forma automatizada?

O erro já dá logo no começo do código:
library(tidyverse)
download_csv <- read_csv(https://spotifycharts.com/regional/br/daily/2020-07-02/download, skip = 1)

Obrigada

Oi Gabriela,

eu resolvi este problema assim:

library(httr)
u= "http://spotifycharts.com/regional/br/daily/2020-07-02/download"
r=GET(u, 
      user_agent("Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36"),
      set_cookies(`cf_chl_2` = "760c06c22ac1ef6",`cf_chl_prog`="x10",
       `cf_clearance`="76d433dfe9a77ca0bb2d4ca8ae4876ba2839c6c5-1625801583-0-150",
                  `X-Mapping-kjhgfmmm`="BCA359BCE65315E45DCB351D6A5E807C"))
content(r, 'parsed')

Isto retorna o df que você quer! Se não der certo, talvez você precise setar o user_agent e set_cookies com o seu pc.

Oi, Filipe! tudo bem?

Na verdade, o objetivo é acessar a URL para baixar um CSV de forma automática… Depois, seriam vários CSVs baixados em loop. Há alguma forma de adaptar o código para baixar o CSV em vez de pegar o HTML?

Obrigada.

Eita, que estranho. Quando fiz a primeira vez aqui retornou um data frame equivalente ao csv. Acho que tem algum cookie ou algum header que é gerado dinamicamente e que impede o acesso por máquina e que não dá pra simplesmente ‘setar’.

O jeito mais “simples” que vejo de resolver é fazendo o scrapping direto da página do chart mesmo. Por exemplo:

library(magrittr)
link = "https://spotifycharts.com/regional/br/daily/2019-07-02/"

xpaths=c(musica = ".//td[@class='chart-table-track']//strong",
         artista = ".//td[@class='chart-table-track']//span", 
         streams = ".//td[@class='chart-table-streams']")

link %>%
  xml2::read_html() %>%
  xml2::xml_find_all("//table[@class='chart-table']") %>% 
  purrr::map_dfc(xpaths, function(xpath, x) xml2::xml_find_all(x, xpath) %>% xml2::xml_text(), x = .)

Retorna as colunas de música, artista e quantidade de streams do csv. Se o link da música for importante, é só fazer uma adaptação pra pegar essa informação também. Além disso, o loop deve funcionar bem nesse caso. (Tb precisa parsear a última coluna como número em vez de chr)