티비랭킹닷컴의 데이터를 DataFrame으로 만들어서 분석해보려 합니다.
주어진 결과 예시와 같은 DataFrame을 만들어 보세요.
import time
import pandas as pd
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(soup)
else:
break
# 레코드를 담는 빈 리스트 만들기
records = []
# 각 페이지마다
for page in rating_pages:
period = soup.select('option[selected=selected]')[2] #[2018, 12, 2018.12.24~2019.12.30]
rank = soup.select('.row .rank')[1:]
channel = soup.select('.row .channel')[1:]
program = soup.select('.row .program')[1:]
rating_percent = soup.select('.row .percent')[1:]
for j in range(len(rank)):
record =[]
record.append(period.text)
record.append(rank[j].text.strip())
record.append(channel[j].text.strip())
record.append(program[j].text.strip())
record.append(rating_percent[j].text.strip())
rating_pages.append(record)
# DataFrame 만들기
df = pd.DataFrame(data=records, columns=["period", "rank", "channel","program","rating"])
# DataFrame 출력
df.head()
# 코드잇 답안
import pandas as pd
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(soup)
# 레코드를 담는 빈 리스트 만들기
records = []
# 각 페이지 파싱해서 정보 얻기
for page in rating_pages:
date = page.select('option[selected=selected]')[2].text
ranks = page.select('.row .rank')[1:]
channels = page.select('.row .channel')[1:]
programs = page.select('.row .program')[1:]
percents = page.select('.row .percent')[1:]
# 페이지에 있는 10개의 레코드를 리스트에 추가
for i in range(10):
record = []
record.append(date)
record.append(ranks[i].text)
record.append(channels[i].text)
record.append(programs[i].text)
record.append(percents[i].text)
records.append(record)
# DataFrame 만들기
df = pd.DataFrame(data=records, columns=['period', 'rank', 'channel', 'program', 'rating'])
# 결과 출력
df.head()
'코드잇' 카테고리의 다른 글
[코드잇] 알고리즘 - 재귀함수2 (0) | 2021.03.09 |
---|---|
[코드잇] 알고리즘 - 재귀함수 (0) | 2021.03.06 |
[코드잇] TV 시청률 크롤링 3 (0) | 2021.02.19 |
[코드잇] 검색어 순위 받아오기 (0) | 2021.02.18 |
[코드잇] 그녀의 전화번호를 찾아서 (0) | 2021.02.18 |