초보 개발자의 일기
Web Crawling - '멜론(Melon)' 크롤링(1) 본문
안녕하세요!
얼마 전에 크롤링을 위해 크롬 드라이버를 설치했으니까 오늘은 음원사이트 멜론(Melon) 크롤러를 만들기 위한 기본 패키지나 메소드 등에 대해 설명해 드리겠습니다. 멜론 크롤링은 이 글에서 절반정도 진행 후, 다음 글에서 남은 절반을 이어서 진행하도록 하겠습니다! 아직 크롬드라이버가 없으시다면 위 글을 참고해주세요~
먼저, 주피터 노트북을 실행합니다.
Desktop을 클릭하면 바탕화면에 있는 파일과 폴더들이 나옵니다.
저는 바탕화면의 Crawling 폴더에 크롬 드라이버를 설치했기 때문에
Crawling 폴더를 클릭 후 New를 눌러 Python3 파일을 생성해 줍니다.
파일의 이름을 '멜론_크롤러'로 변경해줬습니다. 원하는 이름으로 변경해주시면 돼요!
이제 이 화면에서 코드를 넣어 크롤러를 만들어 보겠습니다.
제가 사용한 파이썬과 판다스의 버전은 아래와 같습니다.
먼저, 코드를 작성하고 실행하는 데에 필요한 패키지 등을 호출합니다.
import pandas as pd # 판다스 : 데이터분석 라이브러리
from selenium import webdriver # 웹 브라우저 자동화
import time # 서버와 통신할 때 중간중간 시간 지연. 보통은 1초를 사용하지만, 여기에서는 2초나 3초도 사용합니다.
from tqdm.notebook import tqdm # for문을 실행할 때 진행상황을 %게이지로알려줍니다.
크롬 웹 브라우저를 실행하는 코드를 작성합니다.
# 웹브라우저 설정
path = "chromedriver.exe"
driver = webdriver.Chrome(path)
# 사이트 주소는 Melon(음원사이트)
driver.get('http://www.melon.com')
time.sleep(2) # 2초간 정지
위 코드를 실행하면, 아래와 같은 창이 열립니다.
주소창 아래에 'Chrome이 자동화된 테스트 소프트웨어에 의해 제어되고 있습니다.'라는 문구가 나옵니다.
웹드라이버를 이용해 제어하는 것으로, 문구가 표시되면 정상 작동중이라고 생각하시면 됩니다!
저는 위 화면에서 멜론차트 → 일간차트를 클릭해서 top100의 자료를 추출하려고 합니다.
# 멜론차트 클릭
driver.find_element_by_css_selector(".menu_bg.menu01").click()
# 실행을 기다려줍니다
time.sleep(1)
# 일간차트 클릭
driver.find_element_by_css_selector(".menu_chart.m2").click()
여기에서 driver.find_element~로 시작되는 코드가 나옵니다.
위에서 driver를 선언하고, driver.get을 통해 사이트 주소에 접속했던 것 기억 하시나요?
이 코드는 Selenium 내장 메소드입니다.
Melon 창에서 F12를 눌러보면 아래와 같이 개발자 도구 화면이 나타납니다.
개발자 도구에서 element선택을 위해 빨간 박스로 표시된 부분을 클릭 후 화면 구성요소를 클릭해보면
해당 element의 Class명이나 Id명을 확인할 수 있습니다.
확인한 Class명이나 id명을 메소드에 넣어주면 됩니다.
여기에서 주의할 점!
일간 차트의 Class명은 "menu_chart m2" 입니다. 중간에 공백이 있죠?
공백은 꼭 온점(.)을 찍어 없애줍니다. "menu_chart.m2" 이렇게요!
이제 곡정보 더보기 클릭 → 제목과 가수를 추출해보겠습니다.
# 곡정보 더보기 버튼 클릭
more_info_list = driver.find_elements_by_css_selector(".btn.button_icons.type03.song_info")
more_info_list[0].click()
time.sleep(1)
곡정보 더보기버튼(앨범사진 옆 작은 버튼)이 한 페이지에 100개가 있어서
리스트(more_info_list)로 만들어 줬어요!
이건 for문을 실행할 때 유용하게 사용됩니다.
제일 첫번째 행([0])인 0번째 행의 더보기 버튼을 클릭합니다.
그럼 위와 같이 곡 정보가 나오게 됩니다.
1위가 '롤린'이므로 해당 곡정보 페이지가 표시됩니다.
여기에서 제목과 가수를 추출하기위한 코드를 작성합니다.
# 제목 가져오기
song = driver.find_element_by_css_selector(".song_name")
song.text
"롤린 (Rollin')"
# 가수 가져오기
artist = driver.find_element_by_css_selector(".artist")
artist.text
'브레이브걸스'
각각 개발자 도구를 이용해서 element를 확인 후 코드 안에 넣어 출력한 결과입니다.
이렇게 하나하나 확인해서 넣어줘야 하는게 조금 복잡하지만,
한번 코드를 작성해놓으면 수정을 통해 여러가지 자료를 수집할 수 있습니다.
이제 절반정도 진행이 되었는데요!
이후 과정은 다음 글에서 다루도록 하겠습니당
아직 설명이 부족한 부분이 많아서 조금 더 공부해보고 수정하겠습니다!
'소소한 공부 일기 > 데이터 분석' 카테고리의 다른 글
Boston Marathon 2019_데이터 확인 (0) | 2021.06.06 |
---|---|
Web Crawling - '멜론(Melon)' 크롤링(2) (5) | 2021.05.17 |
Web Crawling - 크롤링을 위한 준비사항 (0) | 2021.05.12 |
Pandas - 엑셀 관련 판다스 (0) | 2021.05.09 |
Pandas - Reshaping (0) | 2021.05.09 |