В этом репо я собираю и изучаю данные, связанные с треками, представленными в диаграммах Spotify. Я опираюсь на работу, которую я выполнил в этом репо, где я уже много делал. К сожалению, обработка данных в этом проекте была действительно грязной, поэтому я решил начать с нуля, чтобы создать более чистый набор данных.
Я придумал сценарии CLI для получения данных, связанных с диаграммами Spotify. Их можно найти в подпапке cli_scripts этого проекта. Как следует из имени папки, все сценарии могут быть вызваны непосредственно из командной строки. Вы можете вызвать каждый скрипт с опцией -h , чтобы получить информацию об принятых аргументах (пример: python cli_scripts/get_all.py -h ).
Во -первых, я придумал сценарии для сборки данных для треков Spotify Daily Top 200. К сожалению, эти данные недоступны через API. Кроме того, нужно загружать диаграммы CSV -файлы для каждого региона и отслеживать отдельно (перемещаясь на страницу диаграммы Spotify и нажав кнопку загрузки), что очень неудобно.
Тем не менее, я работал над этим, создав два сценария (см. Подпапку spotify_charts ):
download.py : автоматизирует процесс загрузки диаграмм CSV -файлов для нескольких регионов (все или подмножество, указанные с помощью аргументов) и диапазон заданных дат (дата начала + окончания) с использованием selenium (требует учетной записи/учетных данных Spotify!)combine_charts.py : объединяет загруженные файлы CSV Spotify, расположенные в указанном каталоге в один файл .parquet Много интересных информации и метаданных о музыке на Spotify также можно получить из официального API Spotify. Все сценарии, использующие API Spotify (через spotipy Python API -обертку), можно найти в spotify_api :
get_track_metadata.py : получает метаданные трека из конечной точки API /tracks для уникальных идентификаторов треков, упомянутых в предоставленном файле .parquet . Выводит папку из нескольких файлов метаданных .parquetget_album_metadata.py : делает то же самое, что и выше, только для альбомов вместо треков (используя конечную точку API /albums )get_artist_metadata.py : Избирает метаданные художника для всех уникальных идентификаторов художника среди нескольких входных файлов (каждый из которых имеет столбец artists_id ), а также хранит метаданные в папке, как другие сценарии вышеget_all.py : объединяет все сценарии, сначала получает метаданные трека, затем метаданные альбома для всех альбомов, связанных с треками и, наконец, Metadata для всех артистов по трекам и альбомам. К сожалению, информация для треков (в частности, авторов песен и продюсеров) также не доступна через Public Spotify API. Тем не менее, я придумал способ обойти это. Можно извлечь заголовки запроса, которые используются для конкретных запросов, сделанных в веб -приложении Spotify, например, при открытии всплывающего окна Show Credits на странице треков и повторно используйте их для выполнения других запросов в ту же (неофициальную/внутреннюю) конечную точку API.
Этот подход может быть использован для
# download CSVs; might take a loooong time, can be interrupted and restarted/resumed later
python cli_scripts/spotify_charts/download.py -s 2022-01-01 -e 2022-12-31 -o data/scraper_downloads
# combine downloaded CSVs into single parquet file
python cli_scripts/spotify_charts/combine.py -o data/top200_2022python cli_scripts/spotify_api/get_all.py -i data/top200_2022/charts.parquetTODO: Добавьте правильную команду после того, как сценарии «закончено» (достаточно хорошо)
Чтобы все работало, вы можете следовать этим инструкциям (при условии, что у вас есть недавняя версия Python)
Если вы хотите, вы можете создать новую среду, например, с conda :
conda env create --name=spotify-charts-analysis
conda activate spotify-charts-analysis
Чтобы все сценарии работали вне коробки, вы можете просто установить пакет helpers , запустив
pip install -e .
В качестве альтернативы, вы, конечно, также можете просто установить пакеты один за другим, так как вы сталкиваетесь с проблемами, пытаясь выполнить вещи LOL
Текст песков на Spotify может быть неверным, даже для довольно популярных песен (например, этот инструментальный трек, который по какой -то причине имеет тексты).