Python
크롤링 (Beautiful Soup 라이브러리) - 네이버 영화 순위
usop
2023. 2. 1. 17:20
네이버에서 제공하는 영화 랭킹 사이트의 데이터를 크롤링 해보자
( 네이버 사이트 링크 : https://movie.naver.com/movie/sdb/rank/rmovie.naver?sel=cnt&date=20230131 )
import urllib.request
from bs4 import BeautifulSoup
from pandas import DataFrame
url = 'https://movie.naver.com/movie/sdb/rank/rmovie.naver'
html = urllib.request.urlopen(url)
soup = BeautifulSoup(html, 'html.parser')
tags = soup.findAll('div', attrs={'class':'tit3'})
print('-' * 30)
print( tags )
print('-' * 30)
print('\n # 영화 제목만 뽑아내기')
for tag in tags :
# 하위 <a> 태그 아래의 글자 영역
print(tag.a.string) # text 속성도 동일한 결과를 보여 준다
print('\n # 앵커의 href 속성')
url_header = 'https://movie.naver.com'
for tag in tags:
print('-' * 50)
print(url_header + tag.a['href'])
mytrs = soup.find_all('tr')
no = 0
totallist = []
for one_tr in mytrs :
title = ''
up_down = ''
mytd = one_tr.find('td', attrs={'class':'title'})
if(mytd != None) :
no += 1
newno = str(no).zfill(2)
mytag = mytd.find('div', attrs={'class':'tit3'})
title = mytag.a.string
mytd = one_tr.select_one('td:nth-of-type(3)')
myimg = mytd.find('img')
if myimg.attrs['alt'] =='up' :
up_down = '상승'
elif myimg.attrs['alt'] =='down' :
up_down = '강등'
else :
up_down = '불변'
change = one_tr.find('td', attrs={'class':'range ac'})
if change == None :
pass
else :
change = change.string
# print(newno + '/' + title + '/' + up_down + '/' + change)
totallist.append((newno, title, up_down, change))
mycolumn = ['순위', '제목', '변동', '변동값']
myframe = DataFrame(totallist, columns = mycolumn)
filename = 'naverMovie.csv'
myframe.to_csv(filename, encoding='utf-8', index=False)
print(filename + '파일이 저장되었습니다.', sep='')
<title / tit3 >
<alt 속성> up_down 구분
< naverMovie.csv > 가 저장되었다.