Notice
Recent Posts
Recent Comments
Link
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
Archives
Today
Total



GitHub Contribution
Loading data ...
관리 메뉴

초보 개발자의 일기

Web Crawling - '멜론(Melon)' 크롤링(1) 본문

소소한 공부 일기/데이터 분석

Web Crawling - '멜론(Melon)' 크롤링(1)

Da다 2021. 5. 16. 22:19
 

Web Crawling - 크롤링을 위한 준비사항

안녕하세요! 오늘은 지난주에 학원에서 배웠던 내용을 토대로 음원사이트 멜론(Melon)의 일간 차트 크롤러를 만들어봤어요! 기록도 하고 복습도 할 겸 과정을 올리려구요. 곡명, 앨범명, 상세 정

dada-devdiary.tistory.com

 

안녕하세요!

얼마 전에 크롤링을 위해 크롬 드라이버를 설치했으니까 오늘은 음원사이트 멜론(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를 확인 후 코드 안에 넣어 출력한 결과입니다.

이렇게 하나하나 확인해서 넣어줘야 하는게 조금 복잡하지만,

한번 코드를 작성해놓으면 수정을 통해 여러가지 자료를 수집할 수 있습니다.


이제 절반정도 진행이 되었는데요!

이후 과정은 다음 글에서 다루도록 하겠습니당

아직 설명이 부족한 부분이 많아서 조금 더 공부해보고 수정하겠습니다!

Comments