우리가 원하는 모든 기간의 데이터를 뽑아내기 위해, 티비랭킹닷컴 사이트를 자세히 살펴봅시다.
웹사이트의 주소 구조를 파악해보고, 제공되는 모든 데이터를 받아올 수 있도록 모든 페이지의 HTML 코드(response의 text)를 가져와서 rating_pages에 저장해 보세요.
2010년 1월부터 2012년 12월까지 모든 달에 대해, 1주차~5주차 페이지를 순서대로 리스트에 넣으면 됩니다. (모든 달에 5주차가 있다고 가정하세요.)
출력 예시
# 테스트 코드
print(len(rating_pages)) # 가져온 총 페이지 수
print(rating_pages[0]) # 첫 번째 페이지의 HTML 코드
티비랭킹닷컴의 주소 구조를 살펴보면, year, month, weekIndex 총 3개의 조건에 따라서 페이지 결과가 달라진다는 것을 알 수 있습니다.
예를 들어, 2011년 6월 셋째 주의 결과는
https://workey.codeit.kr/ratings/index?year=2011&month=6&weekIndex=2
에서 확인할 수 있습니다.
우리는 2010년 1월부터 2012년 12월까지 모든 달에 대해, 1주차~5주차 페이지를 순서대로 리스트에 넣어야 합니다.
그러면 아래와 같은 모든 주소에 대해 페이지를 받아와야 합니다.
https://workey.codeit.kr/ratings/index?year=2010&month=1&weekIndex=0
https://workey.codeit.kr/ratings/index?year=2010&month=1&weekIndex=1
https://workey.codeit.kr/ratings/index?year=2010&month=1&weekIndex=2
...
https://workey.codeit.kr/ratings/index?year=2012&month=12&weekIndex=2
https://workey.codeit.kr/ratings/index?year=2012&month=12&weekIndex=3
https://workey.codeit.kr/ratings/index?year=2012&month=12&weekIndex=4
이 모든 웹 페이지 주소를 requests.get() 메소드 괄호 안에 넣어서 실행하면 되죠.
이런 반복적인 동작은 반복문을 사용해서 해결할 수 있습니다.
year, month, week 단위로 중첩된 반복문을 만듭니다.
- year는 2010~2012,
- month는 1~12,
- weekIndex는 0~4까지 반복되면 되겠죠?
range() 함수는 다양한 사용법이 있는데요:
# range(b) -> 0에서 b-1을 뜻함
# range(a, b) -> a에서 b-1을 뜻함
두 번째 방식을 사용해서 반복문을 이렇게 쓸 수 있습니다.
years = range(2010, 2013)
months = range(1, 13)
weeks = range(0, 5))
for year in years:
for month in months:
for week in weeks:
이제 주어진 year, month, week 값을 통해, 페이지를 요청하고 빈 리스트에 추가하면 됩니다. 코드를 완성해 봅시다.
import requests
rating_pages = []
years = range(2010, 2013)
months = range(1, 13)
weeks = range(0, 5)
for year in years:
for month in months:
for week in weeks:
url = "https://workey.codeit.kr/ratings/index?year={}&month={}&weekIndex={}".format(year, month, week)
response = requests.get(url)
rating_pages.append(response.text)
# 출력 코드
print(len(rating_pages)) # 가져온 총 페이지 수
print(rating_pages[0]) # 첫 번째 페이지의 HTML 코드
이렇게 작성하면 우리가 원하는 전체 기간에 대해 페이지를 요청하고, rating_pages라는 리스트에 추가할 수 있습니다.
이 결과에 테스트 코드를 실행해보면, 원하는 결과를 얻을 수 있습니다.
'IT > Python' 카테고리의 다른 글
플라스크(Flask) | 웹 개발을 위한 파이썬(Python) 가상 환경 설치 (0) | 2023.09.16 |
---|---|
Python 파싱(Parsing) (1) | 2022.11.09 |
Python 분석 데이터 다운로드 받기 (0) | 2022.11.08 |
Python - 데이터 클리닝 (drop_duplicates) (0) | 2022.11.08 |
Python - 데이터 클리닝 (empty) (0) | 2022.11.08 |