본문 바로가기
Python

[Python] 크롤링-billboard 차트 - csv

by UnoCode 2020. 7. 2.

이번시간에는 billboard사이트의 순위와 곡 제목 , 아티스트 정보를 크롤링 하는 글을 작성하겠습니다.

 

import requests
import csv
from bs4 import BeautifulSoup

1. import requests는 html 소스코드를 가져오기 위해서 합니다.

2. csv는 정보 추출이 끝나면 csv파일로 변환 하기 위해 사용합니다.

3. bs4는 requests로 추출한 내용에서 원하는 정보를 찾기 위해 사용합니다.

 

URL = "https://www.billboard.com/charts/hot-100"
billboard_Info = []

html_code = requests.get(URL).text
soup = BeautifulSoup(html_code, "html.parser")
li_lists = soup.find_all("li", {"class": "chart-list__element display--flex"})

for li_list in li_lists:
    billboard_Info.append(getInfo(li_list))

csv_save(billboard_Info)

1. 빌보드 사이트와 빌보드 정보를 담을 리스트를 생성합니다.

 

2. requests.get 함수를 통해 url의 html 소스를 가져옵니다.

 

3. soup 변수 선언후 BeatifulSoop함수를 통해 찾을 수 있게 만듭니다. 꼭 "html.parsr"을 써주셔야 합니다.

 

4. li_lists라는 변수를 선언후 li-> chart-list-element를 찾도록 합시다.

 

 

5. for 을 통해 find_all() 한 정보를 billboard list에 append 합니다. (getInfo) 호출 ▼

 

6.  csv_save()함수를 호출

def getInfo(li_list):
    rank = li_list.find("span", {"class": "chart-element__rank__number"}).string
    song_title = li_list.find(
        "span", {"class": "chart-element__information__song"}
    ).string
    detail = li_list.find(
        "span", {"class": "chart-element__information__artist"}
    ).string

    return {"rank": rank, "song_title": song_title, "detail": detail}

1. getInfo의 정보입니다.

 

2. 파라미터로는 아까 for문으로 돌린 li_list를 받습니다.

 

3. 각 li마다 아티스트,곡,랭크가 있으므로 해당 내용을 추출해서 각각의 변수에다 넣습니다.

rank
song, detail

4. 딕셔너리 형태로 추출한 데이터를 반환합니다.

 

def csv_save(billboard_Info):
    f = open("billboard.csv", "w", encoding="utf-8", newline="")
    wr = csv.writer(f)
    wr.writerow([1, "순위", "제목", "아티스트 정보"])
    for Info in billboard_Info:
        wr.writerow([Info["rank"], Info["song_title"], Info["detail"]])
    f.close()

 

1. csv_save 함수에 파라미터에 데이터를 추출한 list를 받습니다.

 

2. billoard.csv 파일의 "w" 쓰기 권한을 줍니다.

 

3. wr.writerow를 통해 첫줄을 만들어 줍니다.

 

4. for문을 통해 list에 있는 데이터를 순차적으로 writerow함수를 통해 넣습니다.

 

5. csv를 닫습니다.

 

 

전체 소스코드

 

import requests
import csv
from bs4 import BeautifulSoup


def getInfo(li_list):
    rank = li_list.find("span", {"class": "chart-element__rank__number"}).string
    song_title = li_list.find(
        "span", {"class": "chart-element__information__song"}
    ).string
    detail = li_list.find(
        "span", {"class": "chart-element__information__artist"}
    ).string

    return {"rank": rank, "song_title": song_title, "detail": detail}


def csv_save(billboard_Info):
    f = open("billboard.csv", "w", encoding="utf-8", newline="")
    wr = csv.writer(f)
    wr.writerow([1, "순위", "제목", "아티스트 정보"])
    for Info in billboard_Info:
        wr.writerow([Info["rank"], Info["song_title"], Info["detail"]])
    f.close()


URL = "https://www.billboard.com/charts/hot-100"
billboard_Info = []

html_code = requests.get(URL).text
soup = BeautifulSoup(html_code, "html.parser")
li_lists = soup.find_all("li", {"class": "chart-list__element display--flex"})

for li_list in li_lists:
    billboard_Info.append(getInfo(li_list))

csv_save(billboard_Info)

'Python' 카테고리의 다른 글

[Python] 자료구조 Tuple,Array  (0) 2020.07.06
[Python] 크롤링-starbucks 음류수 종류 - csv  (0) 2020.07.03
[Python] asyncio  (0) 2020.07.02
[Python] coroutine (코루틴)  (1) 2020.06.29
[Python] Multiprocessing  (2) 2020.06.29

댓글