이모저모👀

CGV 무비 차트 🏆

오리는짹짹 2023. 1. 6. 22:55

오늘 배운 것들 중에서 가장 재미있었던 건 웹사이트 html을 이용해서 웹 스크레이핑을 하는 거였다.

집에 와서 다시 복습하는 의미로!! CGV 무비 차트 표를 만들어 보겠어유🤸🏻‍♀️🤸🏻‍♀️

 

1.  파싱

import requests
from bs4 import BeautifulSoup

url = 'http://www.cgv.co.kr/movies/?lt=1&ft=0'
html = requests.get(url).text
soup = BeautifulSoup(html,'lxml')

print(url)
>>> http://www.cgv.co.kr/movies/?lt=1&ft=0

파싱은 둘째치고, 내 노트북에는 requrests와 beautifulsoup가 깔려있지 않아서 처음엔 실행조차 되지 않았다.

학원 노트북 그냥 들고 올 걸..^^ 아주 약간 후회했지만, 깔았다!

pip install 을 통해서 깔았고, 아름다운 수프는 beatifulsoup4라고 쳐야 하더라..ㅎㅎ

새로운 것을 알았으니 오히려 조와ヾ(•ω•`)o

 

2. 영화 리스트 movies 만들기

movies = soup.select('div.box-contents')
movies[0]

이렇게 쳤더니

<div class="box-contents">
<a href="/movies/detail-view/?midx=86072">
<strong class="title">아바타-물의 길</strong>
</a>
<div class="score">
<strong class="percent">예매율<span>60.0%</span></strong>
<!-- 2020.05.07 개봉전 프리에그 노출, 개봉후 골든에그지수 노출변경 (적용 범위1~ 3위)-->
<div class="egg-gage small">
<span class="egg great"></span>
<span class="percent">96%</span>
</div>
</div>
<span class="txt-info">
<strong>
                                2022.12.14 
                                <span>개봉</span>
</strong>
</span>
<span class="like">
<a class="link-reservation" href="/ticket/?MOVIE_CD=20031534&amp;MOVIE_CD_GROUP=20030160">예매</a>
</span>

이렇게 나왔다. 

나한테 필요한 건 오직 영화 이름과 링크뿐.. 제가 한 번 해보도록 하죠.

 

3. 영화 이름과 링크를 가진 리스트 만들기

# 텍스트만 추출
ranking_title = movies[0].select('strong.title')[0].text
ranking_href = movies[0].find('a')['href']

[ranking_title, ranking_href]

이렇게 치면

['아바타-물의 길', '/movies/detail-view/?midx=86072']

이렇게 나온다. 

실은 ranking_title이 배운 것과 좀 달라서 애 좀 먹었다.

아까 개인 시간 때도 헤맸던 부분을 똑같이 헤맨 나,, 제법 멋져

 

4. 통합 코드

import pandas as pd

title_hrefs = [] # 빈 리스트 생성
base_url = 'http://www.cgv.co.kr/movies/?lt=1&ft=0'

for movie in movies:
    ranking_title = movie.select('strong.title')[0].text
    ranking_href = movie.find('a')['href']
    
    title_hrefs.append([ranking_title, base_url + ranking_href])
    
# DataFrame 만들기
ranking = range(1,len(movies)+1)
df_movie = pd.DataFrame(title_hrefs, index = ranking, columns= ["영화 제목", "링크"])

df_movie.head(10).style.set_properties(subset=["링크"], **{'width' : '400px'}, color = "blue")

이렇게 짜면 

이런 결과를 만날 수 있다 💙💙

 

다음엔 어떤 웹사이트를 해볼까 매우 고민중인 상황이다. 

영화가 아닌 다른 장르로 해봐야지 우히히

 

2023.01.06 - [데이터 엔지니어링 과정/python] - [13일차] 웹 스크레이핑