[MusicLab]프로젝트의 시작

프로필

2025년 02월 21일

67 0

MusicLab - 음악 차트 스크래퍼

부트캠프 진행 중에 이런 과제가 주어졌다.

아래처럼 대표적인 데이터 요약 혹은 뉴스 형태의 사이트들이 있습니다. 이런 것처럼 특정 분야의 유명한 사이트들의 데이터를 수집해와서 트렌드를 분석할 수 있게 해주는 백엔드 서버를 만들어 보는 과제입니다.

기존 게시글에서도 언급한 것 처럼 난 음악을 좋아해서 음원 차트 스크래퍼를 만들기로 했다.
처음에는 한국의 스트리밍 사이트 여러 곳을 스크래핑 해볼 생각이었는데, 아무래도 해외 기반 서비스는 좀 덜 한 편이지만, 한국의 음원 스트리밍 서비스의 경우 소위 말하는 아이돌, 혹은 아티스트의 팬덤에 의해서 실제로 대중들이 많이 듣는 순서가 아닌, 팬덤 세력이 큰, 팬이 많은 가수의 신곡 혹은 기존 곡이 순위에 올라오는 문제가 존재했다.

또한 한국의 차트만을 스크래핑한다면 전체적인 볼륨이 조금 작아질 거 같아서 국가를 좀 늘려보면 어떻겠냐는 멘토님의 조언에 따라 한, 미, 일 3개국의 점유율이 가장 높은 사이트들을 타겟으로 정했다.

최종 목표는

특정 플랫폼에 치우치지 않고, 여러 서비스의 데이터를 비교하여 ‘진짜 인기 있는 음악’을 보여주는 것이었다.

각각
한국 : Youtube Music
미국 : Spotify
일본 : Apple Music 으로 정했는데, 이게 잘못된 선택이었다는 걸 깨닫는 데에는 그리 많은 시간이 걸리지 않았다. 왜냐면 분명 부트캠프 과정 중에 스크래핑을 실습해보는 과정이 존재했지만, 당시에 나는 심화반 과제를 쳐내느라 그 과정을 아직 듣지 않은 상태였기 때문이다. 스크래핑에 대한 지식이 하나도 없는 백지 상태로 대기업 세 곳을 타겟으로 정한 나는 그 댓가를 치루게 되었다.

프로젝트의 시작은 구글에 '파이썬 스크래핑'을 검색하는 걸로 시작했는데, 가장 많이 보인 결과는 BeautifulSoup를 이용한 정적 스크래핑이었는데 문제는 내가 스크래핑을 진행 할 대상인 Apple Music과 Spotify는 정적 스크래핑이 불가능한 구조였다.

그래서 일단은 각 사이트에서 스크래핑 하지 말고 얌전히 갖다쓰라고 제공하는 csv 파일을 받아서 그걸 표기해주는 형태로 제작했는데

근데 곰곰히 생각해보니 이건 스크래핑도 뭣도 아니었다.
csv를 가져오는 걸 자동화를 한다고 한들, 이게 정말 과제의 목적과 일치 하는가? 라고 물어본다면 절대 아니라고 단언할 수 있었다.

그래서 다른 방법을 생각해봤다. 떠오른 방법은 API를 이용하는 방법이었다. 다행히도 Spotify와 Apple Music은 각각 API가 존재했지만 애플의 MusicKit은 Developer Program에 14만원을 주고 가입을 해야만 했는데

미니 프로젝트 하나, 그것도 개인 프로젝트를 위해서 14만원을 결제할 용기는 내게 없었다.

또한 Spotify의 API도 하자가 있었는데, 내가 원하는 방식으로 일간/주간 인기 차트를 가져오려면 따로 가공이 필요하다는 점이었다.

결국 내게 남은 방법은 모든 사이트를 직접 스크래핑하는 것밖에 없었고, 사이트들을 분석해본 결과 Apple Music의 차트는 최초 로딩이 1~50위까지 표기되고 사용자의 스크롤을 트리거로 동적으로 다음 순위를 불러오는 방식이었고, Spotify는 로그인 없이 차트를 확인하는 방법이 없었기에, BeautifulSoup를 이용한 정적 스크래핑으로는 해결 할 수 없었다.

그래서 나는 동적 스크롤에 필요한 Selenium 라이브러리를 검색을 통해 찾게 되었고 본격적인 삽질이 시작되었다. 스크래핑을 시작한 지 하루 만에 내가 크롤링을 너무 쉽게 생각했다는 걸 깨닫게 되었다.

#스크래핑

댓글 개

댓글을 작성하려면 로그인이 필요합니다