[codeit] SBS 프로그램 엑셀 파일로 저장해 보기

SUNGJIN KIM·2021년 12월 5일
0

codeit

목록 보기
13/18

문제

티비랭킹닷컴의 SBS 프로그램 정보들만 모은 다음, 'SBS데이터.xlsx' (또는 'SBS데이터.csv') 파일에 저장해 주세요.

문제 풀이

처음에, 제대로 format이 되지 않아서 데이터를 못가져오는 경우가 있었다.
데이터만 제대로 가져온다면 문제풀이하는것은 어렵지 않을 것으로 예상하여 데이터를 가져오는 것을 한번 더 확인하였다.

일단 체크해야할 부분은 아래와 같다.

  1. 2010년 ~ 2019년까지의 데이터를 가져올 수 있는지?
  2. 불러온 데이터가 정확한지? (정확히 1주차부터 5주차까지 가져오는지)

데이터를 가져오고 비교를 해보니 실제 weekIndex는 0부터인데, 1부터 가져오는 오류를 확인했고 값을 수정하여 데이터를 확인하였다.

소스 코드

나는 아래와 같이 작성하였지만,이렇게 하지않고 channel값을 먼저 가져온 뒤, 그 값 중에서 SBS에 해당하는 것만 나머지 값을 가져오게 구현한 경우도 있었다.
코드를 직접 돌려봤을땐 큰 차이는 없어보여서 (시간상 차이가 많이 날 것이라고 생각했지만) 표현의 차이인 것 같기도하고, 해당 부분은 나중에 질문을 해서 답을 알아볼 예정이다.

import requests
from bs4 import BeautifulSoup
from openpyxl import Workbook

wb = Workbook(write_only=True)

for year in range(2010, 2019):
    ws = wb.create_sheet("{}년".format(year))
    ws.append(["기간","순위","프로그램","시청률"])
    for month in range(1, 13):
        for weekIndex in range(0, 5):
            url = "https://workey.codeit.kr/ratings/index?year={}&month={}&weekIndex={}".format(year,month,weekIndex)
            response = requests.get(url)
            rating_page = response.text
            soup = BeautifulSoup(rating_page, 'html.parser')

            for tr_tag in soup.select('tr')[1:]:
                td_tags = tr_tag.select('td')
                period = "{}년 {}월 {}주차".format(year, month, weekIndex + 1)
                if td_tags[1].get_text() == "SBS":
                    row = [
                        period,
                        td_tags[0].get_text(),
                        #td_tags[1].get_text(),
                        td_tags[2].get_text(),
                        td_tags[3].get_text()
                    ]
                    ws.append(row)

wb.save('SBS_시청률.xlsx')
profile
#QA #woonmong

0개의 댓글