1-2. Melon 시대별 차트 크롤링 하기

2020. 5. 19. 16:16데이터 분석/R

앞서 

https://hyebit.tistory.com/15?category=903232

 

1-1. 웹크롤링 준비하기

우선 저는 R selenium 패키지를 이용하였습니다. 제 주위 사람들 중에서 chromedriver만 설치하여도 가능한 사람이 있었고, 그렇게 하면 작동이 되지 않는 사람이 있었는데요. 저는 후자 여서 r selenium �

hyebit.tistory.com

에서 설정한 것처럼 cmd로 port번호를 실행해 주고

R-studio를 열어 줍니다.

library(RSelenium)
library(seleniumPipes)
library(rvest)
library(httr)
library(stringr)

이렇게 필요한 패키지 들을 불러옵니다.

 

https://www.melon.com/chart/age/index.htm

 

Melon

음악이 필요한 순간, 멜론

www.melon.com

위의 링크를 통해 들어가 보면 제가 크롤링 해 올 시대별 차트를 볼 수 있습니다.

그중에서 저는 1970년부터 2000년도까지 10년씩 증가하는 주소를 만들려고 합니다.

사이트에서 본 주소를 이용하여 paste0로 주소를 만들어 줍니다.

# 시대별 국내 국외 차트를 들고오기 위한 주소 만들기

```{r}

year = c(1970, 1970, 1980, 1980, 1990, 1990, 2000, 2000)
genre = c("KPOP", "POP")
url0 = paste0("https://www.melon.com/chart/age/index.htm?chartType=AG&chartGenre=", genre)
url0

```
Url1 = paste0(url0, "&chartDate=")
Url1

url = paste0(Url1, year)
url

이렇게 모두 만든 뒤 결과를 확인해 보면

 

제가 원하는 대로 코드가 만들어진 것을 확인해 볼 수 있었습니다.

이제 주소가 만들어 졌으니 크롬 창을 만들어 보도록 하겠습니당!!

 

# cmd에서 설정한 port를 이용해 크롬 창 만들기

ch=wdman::chrome(port=9515L) 
remDr = remoteDriver(
  remoteServerAddr="localhost",
  port=9515L,
  browserName="chrome")
remDr$open() 

위의 코드를 입력하고 실행하였을 때,

이런 식으로 결과가 나오면 성공한 것입니다!!

 

주소도 만들었고, 크롬 창도 만들었으니, 이제 xpath만 알면 크롤링을 해 올 수 있습니다.

등수

이런 식으로 자신의 크롬에서 원하는 주소로 들어가

F12를 누른 후 자신이 크롤링하고 싶은 부분의 class와 xpath를 확인할 수 있었습니다.

 

그리고 저는 이 사이트에서 보이는 것뿐만 아니라 

더불어서 노래들의 가사와 장르도 크롤링해 올 것이기 때문에

주소를 확인해 보면 songId에 따라

각 노래들의 곡정보 창으로 이동하는 것을 알 수 있었습니다.

그래서 저는 songId 도 크롤링했습니다!!

 

위 사진을 자세히 보면 F12 창에 

a href......... class="btn btn_icon_detail" onclick="melon.link.goSongDetail('2228298');"

이렇게 나오는 것을 볼 수 있습니다.

그래서

melon.link.goSongDetail('2228298'); 이 부분 전체를 들고 와

숫자만 빼서 songid로 저장하기로 했습니다.

 

Melon이라는 데이터 프레임을 만들기 위해

우선 

Melon = NULL

이렇게 설정해 줍니다.

for 문을 이용해 연도와 국가별로 계속해서 반복하여 시행하도록 설정해 줬습니다.

자료를 들고 오면 특수문자들이 붙어 있는 것을 확인할 수 있을 겁니다.

그럴 때는 stringr 패키지를 활용해 str_replace_all로 제거하고 싶은 특수문자들을 제거해 줍니다.

str_sub 함수를 활용하면 원하는 단어만 추출할 수 있습니다.

 

그다음 국내 노래인지 해외 노래인지 구분을 하기 위해 직접 설정해 주고,

위에서 만든 데이터 프레임에 붙여 주었습니다.

연도는 장르나 가사와 같이 크롤링해 와도 가능하지만,

몇 년대 인기차트에 올라온 노래인지 구분하려니

발매된 연도와 인기차트에 올라온 연도와 다른 경우가 많아 

그냥 위에서 주소 만들 때 사용한 year을 통해 직접 만들어서

Melon 데이터 프레임 안에 넣어 줬습니다. 

그다음 Melon데이터 프레임 안에 있는 Url을 통해 가사와 장르를 크롤링해 올 건데요,

크롤링 해 오기 전에 is.na함수를 활용하여 결측 값을 확인하고

na.omit 함수를 활용하여 결측 값을 제거해 줍니다.

 

 

위에서 한 것과 같이 크롬 창을 만들어 장르와 가사를 들고 와

Melon 데이터 프레임 안에 저장해 줍니다.

드디어 Melon 데이터 프레임이 완성되었습니다!!!!!

이 작업을 계속해서 반복하여 시행을 하면 시간이 많이 걸리기 때문에 

분석을 할 때 좀 더 수월하게 진행할 수 있도록 csv파일로 만들어 줍니다.

# Melon csv 파일 만들기
write.csv(Melon, "Melon.csv")

 

 

이렇게 하면 이제 아래와 같이 Melon.csv파일을 만들 수 있습니다.

오늘은 여기까지 하겠습니다~!!

읽어주셔서 감사합니다^^