이모저모👀
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&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일차] 웹 스크레이핑