Notice
Recent Posts
Recent Comments
Link
«   2024/10   »
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 31
Archives
Today
Total
관리 메뉴

에코프로.AI

[Python] 크롤링 예제 (Feat. 멜론 차트) 본문

AI Tutorial

[Python] 크롤링 예제 (Feat. 멜론 차트)

AI_HitchHiker 2024. 8. 21. 20:53


멜론차트 TOP100 - 크롤링 예제


  • 사이트 전체 HTML 정보 가져오기
import requests

url = 'https://www.melon.com/chart/index.htm'
header = {
    'User-Agent' : 'Mozilla/5.0',
    'Referer' : url
}

response = requests.get(url, headers=header)
result = response.text

 

  • BeautifulSoup 객체로 변환
from bs4 import BeautifulSoup

soup = BeautifulSoup(result, 'html.parser')
print(soup.prettify())

 

  • 순위 별로 구분되어 있는 <tr> 태그 가져오기
    • 검색 된 <tr> 태그 안에 순위의 항목(순위, 노래제목, 가수, 좋아요..) 등의 정보가 들어있음.
#items = soup.select("#frm > div > table > tbody > tr")
items = soup.select("tbody > tr")

 

  • 각각의 <tr> 태그에서 순위, 노래제목, 가수, 좋아요 정보 분류
    • css_selector 의 내용은 멜론 사이트의 변경에 따라 바뀔 수 있습니다.
      • 크롬 - F12 입력 후, 우측의 'Elements' Selector를 이용하여 태그를 찾으시면 됩니다.
lst = []
for news in items:
    rank = news.select_one('.rank').text.strip()                    # 순위
    title = news.select_one('span > a').text.strip()                # 노래제목
    singer = news.select_one('.ellipsis.rank02 > a').text.strip()   # 가수
    cnt = news.select_one('div > button > span.cnt').text.strip().replace('\t', '')   # 좋아요

    lst.append([rank, title, singer, cnt])
print(lst)

 

 

  • Pandas의 DataFrame 으로 변환
df = pd.DataFrame(lst, columns = ['순위', '제목', '가수', '좋아요'])
df

 

 

  • .xlsx 엑셀파일로 저장
df.to_excel('meoln.xlsx', index=False)

 

끝~