본문 바로가기
WebApplication

Python을 이용한 웹 크롤링 [ Bugs 음원사이트 TOP 100 크롤링 (with requests, Beautiful Soup) ]

by lchit 2020. 1. 1.

 

 

웹크롤링을 활용하여 특정 사이트의 데이터를 불러올 수 있다.

 

1. Python web Crawling 준비하기

cmd 창을 실행시키고 

두 가지를 설치해주셔야 합니다.

 

pip install requests 

pip install BeautifulSoup4

 

 저는 이미 설치가 되어있기 때문에 already 상태이고

설치를 처음 하시는 분들은 설치 로딩 바가 나타나실 겁니다.

 

 


 

2. web 크롤링 하기

 

(1) 모듈 불러오기

 

크롤링 작업에 필요한 두 모듈을

위와 같이 불러왔습니다

 


 

(2) 크롤링 대상 사이트를 정하고 주소 가져오기

 

저는 Top 100 순위의 데이터를 가져오는 게

목적이기 때문에 벅스 사이트의

벅스 차트 페이지로 이동하겠습니다

 

 

이렇게 곡 제목과 아티스트 명이 있는 

실시간 TOP 100위 차트입니다 

상단 주소를 복사하겠습니다.

 

 


 

(3) 변수의 설정

 

총 4줄의 코드가 추가되었습니다.

 

URL = ''URL = 'https://music.bugs.co.kr/chart'

URL 변수에는 대상이 되는 사이트의 주소를 넣어줬습니다.

 

request = request.get(URL)

request라는 변수를 만들어 requests의 get() 함수를 이용하여 주소를

넘겨주었습니다 request는 부탁하다 라는 뜻이 있습니다 

이 주소를 request 라는 아이에게 맡긴다 정도로 생각하셔도 될듯합니다.

 

html = request.text

html 변수에는 request의 text를 넣어주었습니다.

 

soup = BeautifulSoup(html, 'html.parser')

soup이라는 변수에는 BeautifulSoup() 함수를 이용해

html 즉 request의 text를. parser 분석하라는 뜻입니다.

 

 

 

콘솔 창에서 request를 출력해보니

Response [200] 이 나옵니다

이는 그 페이지의 응답을 확인할 수 있습니다

만약 Respone이 안된다면 헤더를 사용해야 하는데

이는 추후 업로드하겠습니다.

 

그럼 준비는 끝났습니다

이제 가져올 데이터들을 지정하는

방법을 보여드리겠습니다.

 

 


 

(4) 데이터로 불러올 대상 지정하기

 

음원차트 사이트입니다.

 

웹브라우저에서 F12를 누르면 우측 

빨간색 박스와 같이 개발자 모드를 불러올 수 있습니다.

 

 

 

그리고 좌측 상단에 저 버튼을 누르시고

웹사이트 이곳저곳 마우스를 올려보십시오.

 

그러면 해당 정보가 있는 css 코드를 확인할 수 있습니다.

 

 

 

이런 식으로 말이죠

어느 정도 css에 익숙하신 분들은 쉽게 아시겠지만

 

처음 보시면 선택한 데이터가 가지는 보라색 글씨 p태그와

주황색 글씨 class 그리고 그 class의 속성 값인 파란색 글씨만

보셔도 이번 시간에서는 무방합니다.

 

노래의 제목을 확인하니

태그는 p고 클래스 속성 값은 title이네요

그 속에는 Psycho라는 노래 제목 text도 있네요

 

아티스트의 이름도 불러와야 하니

가수 이름은 어떤 속성으로 되어있는지

똑같이 확인해보겠습니다.

 

 

 

마우스를 올려보니 똑같은 p태그에

클래스 속성은 artist입니다 그 속에 Red Velvet이라는

가수명 text도 보이는 것이 확인되네요 

 

 

이제 이 정보들로 가져올 데이터들이 무엇인지 

코드로 알려줍시다.

 

 

변수 두 가지를 추가하여 

soup.selcet() 함수를 이용하여 괄호 안에

아까 확인했던 태그 p 에다가. 을 찍고 

속성 값인 title과 artist를 지정해주었습니다.

 

 

 

잠시 titles와 artists의 [0] 번째 데이터를

출력해 보았습니다.

 

titles [0]. text 형태로 데이터의 인덱스 넘버와

뒤에. text를 해주어야 그 데이터의 text를 가져옵니다

 

노래 제목과 가수명이 잘 나오네요

그리고 개행이 앞, 뒤로 추가되어 있다는 것도

확인이 됩니다 이는 나중에 split을 해주어야겠네요.

 

그리고 인덱스 번호로 불러왔다는 건 반복문을 활용하여

전체적인 데이터를 불러올 수 있다는 뜻도 되겠네요

이제 이를 활용하여 출력을 해보겠습니다.

 

 


 

(5) 데이터 출력하기

 

for 문을 활용하여 데이터를 가공한 후

출력해 보았습니다. 

 

설명을 붙이자면 for문은 len(titles) 타이틀들의

길이만큼 반복을 합니다 한 페이지 안에

노래도, 가수도 100위까지 있으니 0부터 99가 i값이 되겠네요.

 

그리고 titile과 artist 변수를 만들어 titles와 artists의 

데이터들을 인덱스 번호로 하나씩 불러와 strip()으로

불필요한 공백을 제거하고,

split('\n')으로 전에 확인되었던 개행 문자를 기준으로

데이터를 나눕니다.

 

그리고 [0]을 붙여준 이유는 

데이터가 가공된 뒤 하나만 남았다고 해도 기본적으로

하나의 요소가 있는 데이터 값으로 반환합니다.

 

 

 

이런 식으로 말이죠 그래서 [0]을 붙여주어 

리스트 속에 있는 첫 번째 요소를 불러와 반환하게끔

해주는 겁니다.

 

그리고 그 저장된 데이터를 

print() 분으로 적당한 서식과 함께 출력하게 됩니다.

 

출력 결과는

1위부터 100위까지 깔끔하게 잘 출력이 되네요

 

 

중간 생략

 

 

여기까지의 전체 코드는 이렇습니다

 

 

 

이제는 이 데이터를 파일 입출력을 써서

txt 파일로 만들어 보겠습니다.

 


 

(6) 파일 출력하기

 

파일 출력을 위해 작업 서식에 맞춰 파일을 열어줍니다

전에는 프린트 문이었던 것을 data 변수로 바꿔준 뒤,

write를 이용하여 데이터를 출력합니다

그리고 파일을 닫아주고요.

 

 

txt 파일로도 잘 저장이 되네요

여기까지 BUGS 음원차트 크롤링이었습니다