본문 바로가기
WEB/Web Scraping

네이버 영화 순위 페이지 웹 스크래핑 해보기

by SooooooooS 2023. 2. 9.
728x90

※ Mac OS 사용, VS Code 사용

 

1. 사전준비

  • Requests 설치

    pip3 install requests 를 VS Code의 터미널 창에 입력하여 설치한다.
  • BeautifulSoup4 설치

    pip3 install bs4 또는 pip3 install beautifulsoup4 를 VS Code의 터미널 창에 입력하여 설치한다.

2. 네이버 영화 순위 페이지 : https://movie.naver.com/movie/sdb/rank/rmovie.naver?sel=pnt&date=20230208 

 

랭킹 : 네이버 영화

영화, 영화인, 예매, 박스오피스 랭킹 정보 제공

movie.naver.com

Chrome으로 위의 링크를 연 후 F12(또는 우클릭 > 검사)를 눌러서 HTML 구조 파악


3. 원하는 데이터 확인하기!

  • 순위

순위 정보 확인

<td class="ac">의 <img> 태그 속 alt 속성이 순위를 나타낸다.

  • 제목

제목 정보 확인

<td class="title"> 의 <div> 의 <a> 내용이 제목이다.

  • 평점

평점 정보 확인

<td class="point"> 의 내용이 평점이다.


4. 코드 작성

import requests
from bs4 import BeautifulSoup

# 타겟 URL을 읽어서 HTML를 받아온다.
data = requests.get('https://movie.naver.com/movie/sdb/rank/rmovie.naver?sel=pnt&date=20230208')

# HTML을 BeautifulSoup이라는 라이브러리를 활용해 검색하기 용이한 상태로 만듦
soup = BeautifulSoup(data.text, 'html.parser')

# select를 이용해서, 영화 정보가 들어있는 tr들을 불러오기
# 위의 사진처럼 HTML 파일을 살펴보면서 가져올 부분 확인하여 작성
movies = soup.select('#old_content > table > tbody > tr')
    
# movies(tr들)의 반복문을 돌리기
for movie in movies:
	# 각각 필요한 정보들 가져오기
    a_rank = movie.select_one('td.ac > img')
    a_tag = movie.select_one('td.title > div > a')
    a_point = movie.select_one('td.point')
    
    # movie 안에 <a>가 있으면
    if a_tag is not None:
        print(a_rank['alt'],a_tag.text, a_point.text)

select() : 조건을 만족하는 모든 요소를 리스트에 담아 반환

select_one() : 그 중 가장 위에 나오는 요소 하나를 반환

코드 실행 결과

728x90