티비랭킹닷컴 사이트를 다시 크롤링해보려 합니다.
앞선 과제 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 코드
'코드잇' 카테고리의 다른 글
[코드잇] 알고리즘 - 재귀함수 (0) | 2021.03.06 |
---|---|
[코드잇] TV 시청률 최종 프로젝트 (0) | 2021.02.19 |
[코드잇] 검색어 순위 받아오기 (0) | 2021.02.18 |
[코드잇] 그녀의 전화번호를 찾아서 (0) | 2021.02.18 |
[코드잇] TV 시청률 크롤링 2 (0) | 2021.02.18 |