๋ค์ด๋ฒ ์ํ ํ์
- https://movie.naver.com/movie/sdb/rank/rmovie.naver?sel=cur&tg=0&date=20220323
๋ญํน : ๋ค์ด๋ฒ ์ํ
์ํ, ์ํ์ธ, ์๋งค, ๋ฐ์ค์คํผ์ค ๋ญํน ์ ๋ณด ์ ๊ณต
movie.naver.com
- ๋ค์ด๋ฒ ์ํ์์ ์ํ ํ์ ์ ํฌ๋กค๋ง ํด๋ณด๋ ค๊ณ ํฉ๋๋ค.
- ํ์ต์ฉ ์๋ฒ์ ๋ถํ๋์ง ์์์ ๋๋ง ํฌ๋กค๋ง.
๋ค์ด๋ฒ ์ํ ํ์ด์ง๋ ๋งค์ผ ๋ค์๊ณผ ๊ฐ์ด ์ํ์ ์์๊ฐ ๋งค๊ฒจ์ง๊ณ ํ์ ์ด ํ์๋๋ ํ๋ฉด์ด ๋ํ๋๋ค.
ํฌ๋กค๋ง
1. URL ๋ณด๊ธฐ
'https://movie.naver.com/movie/sdb/rank/rmovie.naver?sel=cur&tg=0&date=20220323'
- URL ๋งจ ๋ค์ 20220323์ dateํ์, ๋ ์ง๋ฅผ ์กฐ๊ธ์ฉ ๋ฐ๊พธ๋ฉด ๋ค๋ฅด ํ์ด์ง์ ์ ์ ๊ฐ๋ฅ
2. ํํ์ด์ง ๋ณด๊ธฐ
from bs4 import BeautifulSoup
from urllib.request import urlopen
import pandas as pd
url="https://movie.naver.com/movie/sdb/rank/rmovie.naver?sel=cur&tg=0&date=20220323"
page=urlopen(url)
soup=BeautifulSoup(page, 'html.parser')
soup
-> htmlํ์์ beautifulsoup์ ์ฌ์ฉํ์ฌ ๊ฐ์ ธ์จ๋น
~3. ์ํ ์ ๋ชฉ๊ณผ ํ์ ๊ฐ์ ธ์ค๊ธฐ~
3-(1). ์ํ์ ๋ชฉ ๊ฐ์ ธ์ค๊ธฐ
ํฌ๋กฌ์์ F12๋ฒํผ์ ๋๋ฅธ ํ ๊ฐ๋ฐ์ ๋๊ตฌ๋ก ํ์ธํด๋ณธ ๊ฒฐ๊ณผ..!
divํ๊ทธ tit5ํด๋์ค๊ฐ ์ํ ์ ๋ชฉ์ ๋ํ๋ธ๋ค.
soup.find_all('div', 'tit5')[0].a.string
- beautifulSoup์ find_all ๋ช
๋ น์ด๋ก ์ ๋ชฉ์ ๋ชจ๋ ์ฐพ์ ์ ์์
- ๊ทธ์ค ์ฒซ๋ฒ์งธ([0])์ธ ๋ด์ฉ๋ง ๊ฐ์ ธ์๊ณ , string ํ์์ธ ์ ๋ชฉ๋ง ๊ฐ์ ธ์ด
#๋ฆฌ์คํธ ์ปดํ๋ฆฌํ์
์ ์ฌ์ฉํ์ฌ ํ ํ์ด์ง์ ์ํ ์ ๋ชฉ์ ๋ชจ๋ ๊ฐ์ ธ์ด
movie_name=[i.a.string for i in soup.find_all('div', 'tit5')]
movie_name
3-(2). ํ์ ๊ฐ์ ธ์ค๊ธฐ
ํฌ๋กฌ์์ F12๋ฒํผ์ ๋๋ฅธ ํ ๊ฐ๋ฐ์ ๋๊ตฌ๋ก ํ์ธํด๋ณธ ๊ฒฐ๊ณผ..!
tdํ๊ทธ pointํด๋์ค๊ฐ ์ํ ํ์ ์ ๋ํ๋ธ๋ค.
soup.find_all('td', 'point')[0].string
#ํํ์ด์ง ํ์ ์ ๊ฐ์ ธ์ด
movie_point=[i.string for i in soup.find_all('td', 'point')]
movie_point
4. ๋ ์ง ๋ง๋ค๊ธฐ
- 'https://movie.naver.com/movie/sdb/rank/rmovie.naver?sel=cur&tg=0&date=20220323'
- url ๋ค์ date๋ฅผ ๋ฐ๊พธ๋ฉด ์นํ์ด์ง๊ฐ ๋ฐ๋
=> ์ฌ๋ฌ ๋ ์ง์ ํ์ด์ง๋ฅผ ํฌ๋กค๋งํด์ค๊ธฐ ์ํด์ ๋ ์ง ๋ฐ์ดํฐ ์์ฑ
date=pd.date_range('2022.01.01', periods=60, freq='D')
date
- pandas์ date_range๋ฅผ ์ฌ์ฉํ์ฌ ๋ ์ง๋ฅผ ์์ฑ
- ์์๋ ์ง๋ฅผ ์ ์ด์ฃผ๊ณ , ๋ง๋ค๊ณ ์ถ์ ๋ ์ง ๊ฐฏ์์ ๋ ์ง ํํ๋ฅผ ์ ์ผ๋ฉด๋จ..!
print(date[0].strftime('%y-%m-%d'))
print(date[0].strftime('%y.%m.%d'))
print(date[0].strftime('%y%m%d'))
print(date[0].strftime('%Y%m%d')) #->์ด ํ์์ด url์ ํ์ํจ
5. ์ฌ๋ฌ ๋ ์ง์์ ์ํ์ ๋ชฉ๊ณผ ํ์ ๊ฐ์ ธ์ค๊ธฐ
์ผ๋จ 22๋ 1์ 1์ผ~2์ 14์ผ๊น์ง์ ์ํ ํ์ ์ ๊ฐ์ ธ์ด
ํํ์ด์ง๋ฅผ ํฌ๋กค๋งํ๊ณ ๋ ๋ฐ๋ก ํฌ๋กค๋งํ๋ฉด ๊ณผ๋ถํ ๋ฐ ์ ์์ฐจ๋จ์ด ๊ฑธ๋ฆด ์ ์์ผ๋ time.sleep์ ๊ฑธ์ด์ฃผ์๋ค..!
import time
movie_date=[]
movie_name=[]
movie_point=[]
date=pd.date_range('2022.01.01', periods=45, freq='D')
for today in date:
html='https://movie.naver.com/movie/sdb/rank/rmovie.nhn?sel=cur&date={date}'
response=urlopen(html.format(date=today.strftime('%Y%m%d')))
soup=BeautifulSoup(response, 'html.parser')
movie_date.extend([today]*len(soup.find_all('td', 'point')))
movie_name.extend([i.a.string for i in soup.find_all('div', 'tit5')])
movie_point.extend([i.string for i in soup.find_all('td', 'point')])
print(str(today))
time.sleep(0.5)
~์ด 924๊ฐ์ ์ํ ํ์ ์ ๊ฐ์ ธ์ด~
len(movie_date), len(movie_name), len(movie_point)
~๋ฐ์ดํฐ ํ๋ ์ ์์ฑ~
movie=pd.DataFrame({'date': movie_date, 'name':movie_name, 'point': movie_point})
movie.tail()
6. ๋ฐ์ดํฐ ํ์ ๋ณํ
movie.info()
#ํ์ float๋ก ๋ณ๊ฒฝ
movie['point']=movie['point'].astype(float)
movie.info()
7. ํฌ๋กค๋ง๋ ๋ฐ์ดํฐ csv๋ก ์ ์ฅ
movie.to_csv("naver_movie_points_2022.csv", sep=',', encoding='utf-8')