목표 : 빌보드 top 100차트에서 순위, 노래 제목, 가수의 데이터를 가져와 csv파일에 저장을 시켜본다
#requests,csv 사용전 import해준다
import requests
import csv
#beautiful_soup사용전 import해준다
from bs4 import BeautifulSoup
#csv를 사용하여 만들 파일명을 정한다.
csv_filename="billboard_test.csv"
#csv 객체를 만들어 내용을 저장하는 옵션을 정해준다.
csv_open = open(csv_filename,"w+",encoding='utf-8')
csv_writer = csv.writer(csv_open)
#제일 첫줄에 목차의 개념으로 한 줄 작성한다.
csv_writer.writerow(('rank','title','singer'))
#beautifulsoup으로 billboard top 100의 데이터를 받아온다
bill_board =requests.get("https://www.billboard.com/charts/hot-100").text
bs = BeautifulSoup(bill_board, 'html.parser')
#해당 웹페이지의 경우 ol태그안에 li태그가 반복되며 그 안에 순위,가수등의 데이터가 반복되는 형태이기 때문에 li태그들을 찾아준다.
chart_list = bs.select('ol>li')
#print(chart_list)
#for문을 통해 내가 가져온 덩어리에서 필요한 부분(순위,제목,가수)들을 찾는다.
#find,find_all,select를 상황에 맞게 잘 사용해야한다.
#최대한 좁은 범위를 찾는 것이 중요하다.
for article in chart_list:
span_rank = article.find_all('span')
span_title = article.select('span.chart-element__information>span')
rank = span_rank[1].text
title = span_title[0].text
singer = span_title[1].text
print("rank= ",end=""),print(span_rank[1].text)
print("title=",end=""), print(span_title[0].text)
print("singer=",end=""), print(span_title[1].text)
#print("image_url=", end=""), print(span_title)
#가져온 데이터를 csv 파일에 넣어준다
csv_writer.writerow((rank,title,singer))
#csv를 종료한다.
csv_open.close()