노래가사를 KoBERT를 이용해서 감정분석을 해보기 위해서 멜론에서 노래 가사를 크롤링하려하는데 대부분의 글들이 현재 Top100차트를 크롤링하는 내용이었습니다. 그런데 저는 100곡 이외에더 더 많은 곡을 분석해보고 싶어서 연도별 Top100 차트를 크롤링하려고 시도해보았습니다. 만약 저처럼 연도별 차트 가사 크롤링이 필요하신 분은 이 코드를 이용해보셔도 좋을 것 같습니다.
준비물: 구글 크롬, 크롬드라이버, 파이썬, 귀찮음을 극복할 의지
순서
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.options import Options
import chromedriver_autoinstaller
import subprocess
import time
import pandas as pd
def craw_lyrics():
try:
artist = driver.find_elements(By.CLASS_NAME, 'artist')
song_name = driver.find_elements(By.CLASS_NAME, 'song_name')
lyric = driver.find_elements(By.CLASS_NAME, 'lyric')
driver.implicitly_wait(60)
lyrics = lyric[0].text.split('\n')
artists.append(artist[0].text)
song_names.append(song_name[0].text)
ly.append(lyrics)
except:
return
for year in range(2012, 2022):
subprocess.Popen(r'C:\Program Files\Google\Chrome\Application\chrome.exe --remote-debugging-port=9222 --user-data-dir="C:\chrometemp"')
option = Options()
option.add_experimental_option("debuggerAddress", "127.0.0.1:9222")
chrome_ver = chromedriver_autoinstaller.get_chrome_version().split('.')[0]
try:
driver = webdriver.Chrome('/chromedriver.exe', options=option)
except:
chromedriver_autoinstaller.install(True)
driver = webdriver.Chrome('/chromedriver.exe', options=option)
driver.implicitly_wait(10)
driver.get('https://www.melon.com/chart/age/index.htm?chartType=YE&chartGenre=KPOP&chartDate={y}'.format(y=year))
time.sleep(2)
song_num = []
artists = []
song_names = []
ly = []
lst50 = driver.find_elements(By.CSS_SELECTOR, "#lst50 > td:nth-child(5) > div > button")
lst100 = driver.find_elements(By.CSS_SELECTOR, "#lst100 > td:nth-child(5) > div > button")
for i in lst50:
song_num.append(i.get_attribute('data-song-no'))
for i in lst100:
song_num.append(i.get_attribute('data-song-no'))
for i in song_num:
driver.get('https://www.melon.com/song/detail.htm?songId={song_num}'.format(song_num=i))
craw_lyrics()
df = pd.DataFrame(artists, columns=['artist'])
df['song_name'] = song_names
df['lyric'] = ly
df.to_csv("song{y}.csv".format(y=year), index=False, encoding='utf-8')
ps. 다른 분들이 올리신 크롤링 코드들을 이리저리 수정해가면서 만든 코드라서 제가 이 코드에 대해서 제대로 이해하고 있는지도 모르겠네요. 그래도 대충 사용해볼 만은 할 거라고 생각 들어서 올렸으니 필요하신 분들은 사용해보시면 좋을 것 같습니다.