본문 바로가기
프로그래밍/파이썬

[python] 웹 스크래핑으로 멜론 차트 100 가져오기

by 홍삼절편 2021. 9. 26.

beautifulsoup을 활용해서 부동산 매매 정보를 가져오려다가 계속해서 실패하고

멜론 차트를 한번 가져와봤다.

 

멜론 차트를 열어서 페이지 검사를 해보니, table이란 가장 큰 표 안에 tbody 안에 모든 정보가 들어가 있고, 그 밑에 tr, 그 밑에 td에 정보가 들어있었다.

 

내가 짠 코드이다.

 

먼저 웹 스크래핑을 위해 import requests, import BeautifulSoup을 해주었다.

 

처음에 headers를 넣지 않고 시도하였는데 멜론 측 사이트에서 거부를 하는 건지 되지 않아서 user agent 헤더를 넣어주니 잘 실행되었다.

 

일단 data_row들을 table-->tbody 안에 있는 tr들을 모두 가져오도록 해주었다.

그러면 각 순위에 해당하는 정보들이 모두 tr안에 td안에 있을 것이다.

 

후에 1위부터 100위부터의 정보를 가져오기 위해 for 문을 통해 반복문을 돌려주었다.

tr안에 있는 td 들의 정보들을 columns라는 리스트 안에 find_all을 사용해서 가져왔다.

 

data들의 text정보만 가져와서 보니  \n\n\n\이 많이 붙어있어서 strip 함수를 통해 제거해주었다.

 

그렇게 해서 보니, 순위는 리스트의 1번째, 노래제목과 가수는 리스트의 5번째 항목에 붙어있었다. 앨범제목은 6번째 항목에 잇는 것을 알 수 있다.

그래서 노래제목과 가수를 분리해주는 작업을 하였다.

노래제목의 경우 list[5].split('\n\n\n')[0]의 방법으로 split을 사용해주었다.

가수 역시 split으로 분리해서 뒤에 것을 사용하면 되는데, 이 때 가수명이 두번씩 붙어나와서 이를 반으로 갈라주는 추가적인 작업을 해주었다. 여기서는 총 가수 이름이 두번 나온 것의 length를 측정해서 이를 통해 슬라이싱 해주는 방법을 사용했다.

length 라는 변수를 새로 만들어서 len(data[5].split('\n\n\n')[1])//2 을 해주었다.

(하는 과정에서  // 를 사용하지 않고 / 을 사용해서 계속해서 오류가 발생하였다. --> 슬라이싱에서 사용하기 위해서는 소수점이 발생하면 안되는데, 각 경우마다 홀수 짝수가 나올 수 있으니 에러가 발생하였다. 이를 //로 고쳐 나눗셈 몫만 나타내니 오류가 발생하지 않았다.)

그리고 앨범 역시 분리해주기 위해서 album = data[6]을 해준다.

마지막으로 print를 통해서 나타내주면 끝!!

 

실행해보면,

 

잘 나오는 것을 볼 수 있다