본문 바로가기

코드잇

[코드잇] TV 시청률 크롤링 3

티비랭킹닷컴 사이트를 다시 크롤링해보려 합니다.

앞선 과제 TV 시청률 크롤링 pt. 2에서는 모든 달에 5주차가 있다고 가정하여 받아왔습니다.

이번에는 파싱을 활용해서 실제로 데이터가 있는 페이지만 받아오려고 하는데요.

2010년 1월부터 2018년 12월까지 모든 달에 대해, 데이터가 있는 모든 페이지의 HTML 코드(response의 text)를 rating_pages에 저장해 보세요.

주의: BeautifulSoup 타입으로 변환한 코드가 아닌, response의 text를 리스트에 저장하세요!


1. 태그 차이 확인

2. 코드 작성

랭킹 정보가 없는 페이지에는 랭킹 테이블에 row줄이 없다.

내가 작성한 코드는 실행은 되는데 시간이 오래 걸린다.  

# 코드잇 답안

import requests
from bs4 import BeautifulSoup

# 기간 지정
years = list(range(2010, 2019))
months = list(range(1, 13))
weeks = list(range(0, 5))

# 빈 리스트 생성
rating_pages = []

for year in years:
    for month in months:
        for week in weeks:
            # HTML 코드 받아오기
            response = requests.get("https://workey.codeit.kr/ratings/index?year=" + str(year) + "&month=" + str(month) + "&weekIndex=" + str(week))

            # BeautifulSoup 타입으로 변환하기
            soup = BeautifulSoup(response.text, 'html.parser')

            # "row" 클래스가 1개를 넘는 경우만 페이지를 리스트에 추가
            if len(soup.select('.row')) > 1:
                rating_pages.append(response.text)

# 테스트 코드
print(len(rating_pages)) # 가져온 총 페이지 수 
print(rating_pages[0]) # 첫 번째 페이지의 HTML 코드