들고양이 (39.♡.127.109)
2024년 9월 19일 AM 08:00 · 수정됨(19:04)
최근에 애플뮤직을 2개월 무료로 사용하게 됐는데, 막상 즐기려니 일일이 노래 정리하기도 버겁더군요.
멜론에는, 여러 DJ(?)님들이 나름 엄선한 노래들이 많이 있어서 가져 올 방법을 찾다가 한 블로거님의 글을 참고로 노래들을 가져와서 txt파일로 정리하는 파이썬 코드를 하나 짜집기 해 봤습니다.
혹시라도, 누군가 도움이 되시면 좋겠다 싶어서 올립니다.
사용법 :
멜론 > 멜론DJ로 들어가셔서 적절한 노래모음이 있다면 링크에서 마지막 숫자를 따 줍니다.
예 : https://www.melon.com/mymusic/dj/mymusicdjplaylistview_inform.htm?plylstSeq=531670163
그리고, 실행하시면 txt파일이 생성됩니다.
생성된 파일을 TuneMyMusic 에서 소스선택 > 자유텍스트(복사 - 붙여넣기) or 파일 업로드해서 각자 필요한 곳(애플뮤직, 스포티파이, 유튜브 등 등...)으로 가져가시면 되겠습니다.
[code=python]# -*-coding: utf-8-*-
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.by import By
from webdriver_manager.chrome import ChromeDriverManager
import time
import re
def get_song_artist_data():
song_list_len = len(driver.find_elements(By.XPATH, '//*[@id="frm"]/div/table/tbody/tr'))
for i4 in range(1, song_list_len + 1):
song_name_elements = driver.find_elements(By.XPATH, f'//*[@id="frm"]/div/table/tbody/tr[{i4}]/td[5]/div/div/div[1]/span/a')
if song_name_elements:
song_name = song_name_elements[0].text.strip()
song.append(song_name)
else:
song.append("Unknown Song")
artist_name_elements = driver.find_elements(By.XPATH, f'//*[@id="frm"]/div/table/tbody/tr[{i4}]/td[5]/div/div/div[2]/a')
if artist_name_elements:
artist_name = artist_name_elements[0].text.strip()
singer.append(artist_name)
else:
singer.append("Unknown Artist")
def scrape_page_and_navigate():
get_song_artist_data()
for i in range(1, len(driver.find_elements(By.CSS_SELECTOR, '#pageObjNavgation > div > span.page_num > a')) + 1):
driver.find_element(By.XPATH, f'//*[@id="pageObjNavgation"]/div/span/a[{i}]').click()
driver.implicitly_wait(2)
time.sleep(0.3)
get_song_artist_data()
try:
next_button = driver.find_element(By.XPATH, '//*[@id="pageObjNavgation"]/div/a[@class="next"]')
if next_button:
driver.implicitly_wait(2)
time.sleep(0.3)
scrape_page_and_navigate()
except Exception as e:
print("더 이상 'next' 버튼이 없습니다.")
pass
def scrape_playlist(plylstSeq):
# 멜론 플레이리스트 링크로 접속
base_url = 'https://www.melon.com/mymusic/dj/mymusicdjplaylistview_inform.htm'
url = f'{base_url}?plylstSeq={plylstSeq}'
driver.get(url)
driver.implicitly_wait(2)
# 플레이리스트 제목 가져오기
playlist_title = re.sub(r'[\/:*?"<>|]', '', driver.find_element(By.XPATH, '//*[@id="conts"]/div[2]/div/div[2]/div[1]/div[1]').text.strip())
# 데이터 수집 리스트 초기화
global song, singer
song = []
singer = []
# 데이터 수집 시작
scrape_page_and_navigate()
# 파일 저장
filename = f'./{playlist_title}.txt'
with open(filename, 'w', encoding='utf-8') as f:
for song_name, artist_name in zip(song, singer):
f.write(f"{artist_name} - {song_name}\n")
print(f"파일 생성 완료: {filename}")
# 크롬 드라이버 설정
chrome_options = Options()
chrome_options.add_argument("--headless")
chrome_options.add_argument("--no-sandbox")
chrome_options.add_argument("--disable-dev-shm-usage")
driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()), options=chrome_options)
driver.implicitly_wait(2)
# 플레이리스트 ID 리스트
plylstSeq_list = ['439213662', '517415328', '480011338'] # ID리스트는 ['439213662', '517415328', '480011338'] 이런 식으로 넣어 줄 것.
# 여러 개의 플레이리스트 처리
for plylstSeq in plylstSeq_list:
scrape_playlist(plylstSeq)
# 드라이버 종료
driver.quit()[/code]
댓글 (6)
-
OOrtega
24.09.19 · 118.♡.89.31
-
들들고양이
→ Ortega 작성자
24.09.19 · 39.♡.127.109
글의 링크 부분(TuneMyMusic)을 들어가 보시면 각각의 스트리밍 서비스로 옮길 수 있어요.
저도 TuneMyMusic를 통해서 애플뮤직으로 옮겨서 듣고 있습니다. -
이이슬이
24.09.19 · 112.♡.193.176
감사합니다. 잘 쓰겠습니다. -
이이슬이
→ 이슬이
24.09.19 · 39.♡.143.57
지금 사용하고 있는데.. 정말 좋네요... 덕분에 멜론에서 이것저것 가져오고 있습니다. ^^
@sdk님.. 이런 좋은 글은 자유게시판에 있는 것보다 강좌 및 팁 게시판에서 많은 분들이 보실 수 있는게 좋지 않을까 싶네요. -
들들고양이
→ 이슬이 작성자
24.09.19 · 39.♡.127.109
감사합니다. 잘 된다니 저도 기분이 좋네요. ㅎㅎㅎ - 월
월하가연
24.09.19 · 115.♡.251.148
감사합니다~ 저도 잘 쓰겠습니다~
댓글을 작성하려면 이 필요합니다.
그 텍스트파일을 어떻게 쓰는방식인가요?
유튜브뮤직 삼성뮤직 애플뮤직
멜론 벅스 지니등
핸폰마다 플레이앱이 달라서