[MusicLab]プロジェクトの開始
2025年02月21日
MusicLab - 音楽チャートスクレイパー
ブートキャンプの進行中にこのような課題が与えられました。
下記のように代表的なデータの要約やニュースの形のサイトがあります。このように特定の分野の有名なサイトのデータを収集してきて,トレンドを分析できるようにするバックエンドサーバーを作ってみる課題です。
既存の記事でも言及したように私は音楽が好きなので,音源チャートのスクレイパーを作ることにしました。
最初は韓国のストリーミングサイトをいくつかスクレイピングしてみようと思ったのですが,どうやら海外ベースのサービスは少し少ない方ですが,韓国の音源ストリーミングサービスの場合,いわゆるアイドル,あるいはアーティストのファンダムによって,実際に大衆が多く聞く順番ではなく,ファンダム勢力が大きい,ファンが多い歌手の新曲あるいは既存曲がランキングに上がってくるという問題が存在しました。
また,韓国のチャートだけをスクレイピングすると全体的なボリュームが少し小さくなるので,国をもう少し増やしてみたらどうだろうというメンターのアドバイスに従い,韓・米・日3国のシェアが最も高いサイトをターゲットにした。
最終目標は
特定のプラットフォームに偏ることなく,複数のサービスのデータを比較して「本当に人気のある音楽」を見せること」でした。
それぞれ
韓国 : Youtube Music
アメリカ:Spotify
日本:Apple Musicに決めたのですが,これが間違った選択だったことに気づくのにそれほど時間はかかりませんでした。 なぜなら,ブートキャンプの過程でスクレイピングを実践してみるコースがあったのですが,当時,私は深層部の課題をこなすためにそのコースをまだ受講していなかったからです。スクレイピングの知識が全くない白紙の状態で大企業3社をターゲットにした私は,その代償を払うことになった。
プロジェクトの始まりは,Googleで「Python スクラッピング」を検索することから始まりましたが,最も多く表示された結果はBeautifulSoupを利用した静的スクレイピングでしたが,問題は私がスクレイピングを行う対象であるApple MusicとSpotifyは静的スクレイピングが不可能な構造でした。
だから,とりあえずは各サイトでスクレイピングしないでおとなしく持ってこいと提供するcsvファイルを受け取ってそれを表記してくれる形で製作しました。

でもよく考えたら,これはスクレイピングでもなんでもない。
csvを取り込むことを自動化すると言っても,これが本当に課題の目的と一致するのか? と聞かれたら,絶対に違うと断言することができました。
そこで他の方法を考えてみた。思いついた方法はAPIを利用する方法でした。幸いなことにSpotifyとApple MusicはそれぞれAPIが存在したが,AppleのMusicKitはDeveloper Programに14万ウォンを払って加入しなければならなかった。

ミニプロジェクト一つ,それも個人プロジェクトのために14万ウォンを支払う勇気は私にはなかった。
また,SpotifyのAPIにも不具合があり,私が望む方法で日次/週次人気チャートを取得するには別途加工が必要だという点だった。
結局,私に残った方法はすべてのサイトを直接スクレイピングすることしかなく,サイトを分析した結果,Apple Musicのチャートは最初の読み込みが1~50位まで表記され,ユーザーのスクロールをトリガーに動的に次の順位を呼び出す方式で,Spotifyはログインせずにチャートを確認する方法がなかったので,BeautifulSoupを利用した静的スクレイピングでは解決できなかった。
そこで私は動的スクロールに必要なSeleniumライブラリを検索で見つけ,本格的なスクレイピングが始まりました。スクレイピングを始めて1日目にして,私はクロールが簡単すぎることに気づきました。
カカオ
グーグル
ネイバー