초보 개발자의 일기
Web Crawling - '멜론(Melon)' 크롤링(2) 본문
안녕하세요!
오늘도 지난 글에 이어 멜론 크롤링에 대해 진행하겠습니다.
지난번에 개발자 도구를 이용해서 element를 확인하고, 'driver.find_~'를 이용해서 곡의 제목과 가수를 추출해보는 과정까지 해봤는데요! 오늘은 앞에서 했던 과정을 조금 응용해서 크롤러를 완성해보겠습니다.
시작 전에 지난번 진행했던 코드까지 순서대로 실행해주셔야
오류가 발생할 확률이 낮아집니다.
# 앨범 기본 정보
meta_info = driver.find_element_by_css_selector(".list").text.split('\n')
meta_info
아래 빨간 박스로 표시된 부분이 곡의 기본 정보를 표시하고 있습니다.
원하는 정보를 원하는 컬럼에 저장할 수 있도록 List로 만들어줍니다.
# 곡 기본 정보
meta_info = driver.find_element_by_css_selector(".list").text.split('\n')
meta_info
['앨범', "Rollin'", '발매일', '2017.03.07', '장르', '댄스', 'FLAC', 'Flac 16bit']
그럼 위와 같은 결과가 나오게 됩니다.
앨범명이나 발매일, 장르 등을 추출하려면 List indexing을 통해 추출할 수 있습니다.
# 발매일
meta_info[3]
'2017.03.07'
곡 기본 정보 아래에 '좋아요' 수가 표시되는데,
이 정보도 가져와서 저장하겠습니다.
# 좋아요 수
like_count = driver.find_element_by_id("d_like_count")
like_count.text
'259,240'
혹시 like_count 뒤의 text라고 붙어있는 걸 보셨나요?
저렇게 text를 붙여주지 않으면, selenium~으로 시작하는 긴 문장이 출력됩니다.
자세한 내용은 다음에 다루도록 하겠습니다.
지금은 text를 붙여줘야 읽을 수 있게 출력된다는 것만 알아두세요!
이제 가사 크롤링을 위해 펼치기 버튼을 클릭해줍니다.
# 펼치기 버튼 클릭
driver.find_element_by_css_selector(".button_more.arrow_d").click()
아래 코드를 이용해서 가사를 출력해볼 수 있습니다.
중간중간 '\n' 표시되어 있는 부분은 개행 표시입니다!
# 가사 출력이 잘 되는지 확인
lyric = driver.find_element_by_css_selector(".lyric.on")
lyric.text
"그 날을 잊지 못해 babe\n날 보며 환히 웃던\n너의 미소에\n홀린 듯\nI'm fall in love\nBut 너무 쪽팔림에\n난 그저\n한마디 말도 못해 babe\nI wanna you\n너의 눈빛은\n날 자꾸 네 곁을 맴돌게 해\nJust only you\n굳게 닫힌 내 맘이\n어느새 무너져버려\nBecause of you\n온통 너의 생각뿐이야\n나도 미치겠어\n너무 보고 싶어\n매일 매일 매일\n자꾸 초라해지잖아\n내 모습이\n그대여 내게 말해줘\n사랑한다고\nRollin' Rollin' Rollin' Rollin'\nRollin' Rollin' Rollin' Rollin'\nRollin' Rollin' Rollin' Rollin'\n하루가 멀다 하고\nRolling in the deep\nRollin' Rollin' Rollin' Rollin'\nRollin' Rollin' Rollin' Rollin'\n기다리고 있잖아 Babe\nJust only you\n기다리고 있잖아 Babe\nJust only you\nHey I just wanna be with you\n오늘 밤이 가기 전에\nI can't feel you\n조금 더 다가와 줘\nTonight I'm ready for you\nYou wanna touch me I know\n대체 뭘 고민해 빨리 안아\n아닌 척 모르는 척 하다가\n늦게 놓치고 후회 말아\nI wanna you\n너의 눈빛은\n날 자꾸 네 곁을 맴돌게 해\nJust only you\n굳게 닫힌 내 맘이\n어느새 무너져버려\nBecause of you\n온통 너의 생각뿐이야\n나도 미치겠어\n너무 보고 싶어\n매일 매일 매일\n자꾸 초라해지잖아\n내 모습이\n그대여 내게 말해줘\n사랑한다고\nRollin' Rollin' Rollin' Rollin'\nRollin' Rollin' Rollin' Rollin'\nRollin' Rollin' Rollin' Rollin'\n하루가 멀다 하고\nRolling in the deep\nRollin' Rollin' Rollin' Rollin'\nRollin' Rollin' Rollin' Rollin'\n기다리고 있잖아 Babe\nJust only you\n이제 와 숨기려 하지 마요\n그대여\n아닌 척하지 마요\n온종일 난\n그대 생각에 잠긴 채로\n난 이대로 기다리고 있어요\nRollin' Rollin' Rollin' Rollin'\nRollin' Rollin' Rollin' Rollin'\nRollin' Rollin' Rollin' Rollin'\n하루가 멀다 하고\nRolling in the deep\nRollin' Rollin' Rollin' Rollin'\nRollin' Rollin' Rollin' Rollin'\n기다리고 있잖아 Babe\nJust only you\n기다리고 있잖아 Babe\nJust only you"
이제 하나씩 실행했던 코드들을 모아서
Top100에 해당하는 곡들의 정보를 추출할 수 있도록 for 문으로 만들어 줍니다.
# 크롬 웹브라우저 실행
path = "chromedriver.exe"
driver = webdriver.Chrome(path)
# 주소는 melon(음원사이트)
driver.get('http://www.melon.com')
time.sleep(2) # 2초 정지
# 멜론차트 클릭
driver.find_element_by_css_selector(".menu_bg.menu01").click()
time.sleep(2) # 2초 정지
# 일간차트 클릭
driver.find_element_by_css_selector(".menu_chart.m2").click()
# 크롤링 코드
dict = {} # 전체 크롤링 데이터를 저장할 딕셔너리 생성
number = 100 # 수집할 글 갯수 정하기
# 반복문 시작
for i in range(0,number):
# 곡정보 더보기 버튼 클릭
more_info_list = driver.find_elements_by_css_selector(".btn.button_icons.type03.song_info")
more_info_list[i].click()
time.sleep(1)
# 크롤링
try :
music_info = {} # 개별 블로그 내용을 담을 딕셔너리 생성
time.sleep(1)
#################### 중략 ######################
전체 코드는 Github에 올려두겠습니다!
크롤링한 자료들을 엑셀로 저장했습니다.
엑셀 파일을 열어보면 자료들이 설정했던 컬럼에 맞춰 저장되어있습니다.
지금까지 멜론 크롤러를 만들어 봤는데요! 보통 크롤러는 URL을 먼저 수집하고, 그 URL을 for문으로 하나하나 열어서 정보를 수집하는 형태가 많은 것 같아요. 하지만 멜론의 경우 href로 URL을 수집하기 어려운 상황이었기 때문에 한 곡 정보를 수집한 후 웹 드라이버로 '뒤로 가기'를 실행해줘야 했습니다. 그걸 for문으로 구현해 100곡의 정보를 수집해봤습니다.
이제 저는 수집한 가사로 텍스트분석과 워드 클라우드를 제작해보려구요!
아직 저 스스로도 잘 모르는 부분이 있기 때문에 글은 계속 수정될 예정입니다. 그럼 다음 글에서 만나요!
'소소한 공부 일기 > 데이터 분석' 카테고리의 다른 글
Boston Marathon 2019 - 시각화1 (Column Chart) (0) | 2021.07.11 |
---|---|
Boston Marathon 2019_데이터 확인 (0) | 2021.06.06 |
Web Crawling - '멜론(Melon)' 크롤링(1) (0) | 2021.05.16 |
Web Crawling - 크롤링을 위한 준비사항 (0) | 2021.05.12 |
Pandas - 엑셀 관련 판다스 (0) | 2021.05.09 |