티스토리 뷰

반응형

python :: 멜로차트 실시간 가져오기 크롤링 :: selenium, csv, BeautifulSoup

모든 강의 자료 : www.codingnow.co.kr/


1. 실행 영상

 

youtu.be/qA5gRxS75d0


2. 설명

멜론사이트(melon.com)에서 제공되는 음원 순위를 csv파일로 저장하는 내용입니다.

파이썬을 실행하면 다음과 같이 CSV파일로 저장이 됩니다.


3. 소스코드

from selenium import webdriver
from bs4 import BeautifulSoup
import time
import csv

print('-------------------------------------')
print('제작자 : https://blog.naver.com/cflab')
print('-------------------------------------')

def openDriver():
    url = 'https://www.melon.com/chart/index.htm'
    driver = webdriver.Chrome()
    driver.implicitly_wait(3)
    driver.get(url)
    time.sleep(1)
    return driver

def searchMelon(driver):
    html = driver.page_source
    soup = BeautifulSoup(html, 'html.parser')
    tags = soup.find_all(class_='wrap_song_info')

    mList = []
    rank = 1

    for i in tags:
        try:
            title = i.find(class_='ellipsis rank01').a.text
            singer = i.find(class_='ellipsis rank02').a.text
            print(f'순위 : {rank}\n가수 : {singer} \n제목 : {title}\n')
            mList.append([rank, singer, title])
            rank += 1
        except:
            pass
    return mList

def saveToFile(filename, mList):
    with open(filename, 'w', encoding='utf-8-sig', newline='') as f:
        writer = csv.writer(f)
        writer.writerows(mList)

driver = openDriver()
mList = searchMelon(driver)
saveToFile('melon.csv', mList)

 

4. 소스 설명

여기서 사용될 메소드를 다음과 같이 추가합니다.

from selenium import webdriver
from bs4 import BeautifulSoup
import time
import csv

함수 형태로 구현이 되었으며, 아래와 같이 각 함수에 인자를 넣고 받아서 실행을 합니다.

driver = openDriver()
mList = searchMelon(driver)
saveToFile('melon.csv', mList)

각 함수에 대해 살펴 보겠습니다.

1) openDriver( ) 함수는 selenium의 webdriver를 사용할 수 있습니다.

def openDriver():
    url = 'https://www.melon.com/chart/index.htm'
    driver = webdriver.Chrome()
    driver.implicitly_wait(3)
    driver.get(url)
    time.sleep(1)
    return driver

먼저 크롬 드라이버를 소스가 있는 동일 폴더에 넣어주면

"driver = webdriver.Chrome()" 이와 같이 한줄로 끝이 납니다.

크롬의 web driver는 "https://cflab.blog.me/222130893298" 여기를 참고 하세요.

get(url) 메소드를 통해 웹페이지를 실행시키게 됩니다.

 

2) searchMelon(driver) 함수는 멜론 웹페이지의 html을 가져와서 분석하여 원하는 정보를 추려냅니다.

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

크롬의 개발자도구(F12)를 실행하여 "가수", "노래제목"을 포함하고 있는 class를 찾아 냅니다.

여기서는 100개의 음원정보를 'wrap_song_info' class가 가지고 있습니다.

(개발자도구에서 찾는 것은 cflab.blog.me/222146491069 여기를 참고하세요.)

tags = soup.find_all(class_='wrap_song_info')

이후에 가수 명과 노래 제목이 있는 class를 찾아 냅니다. 그리고 이것을 title, singer로 저장을 합니다.

title = i.find(class_='ellipsis rank01').a.text
singer = i.find(class_='ellipsis rank02').a.text

그리고 CSV에 저장 할 수 있도록 list에 넣어 줍니다.

mList.append([rank, singer, title])

3) saveToFile(filename, mList) 함수는 list를 받아서 csv파일에 저장하는 기능을 합니다.

한글 저장이 가능하도록 encoding='utf-8-sig' 형태로 파일을 생성합니다.

with open(filename, 'w', encoding='utf-8-sig', newline='') as f:

그리고 csv.writer를 생성하고

writer = csv.writer(f)

전달받은 list를 csv에 저장합니다.

writer.writerows(mList)
반응형