본문 바로가기

프로그래밍 상식

[웹 크롤링] Selenium과 BS4

오늘은 웹 크롤링에 관련된 Selenium과 BS4에 대해서 간단하게 알아보겠다.

Selenium은 웹 브라우저를 자동으로 제어할 수 있게 해주는 패키지이다.

제어하고자 하는 웹 브라우저의 Driver를 설치해야 하며, 보통은 Chrome을 사용한다. 

그에 따른 설치법은 따로 있기에 따로 설치해 주길 바란다.


처음 설명을 듣고 이해가 안 갔었다. 그래서 찾아보고 사용해 보니 간단하게 정의할 수 있었다.

Selenium은 특정 웹 브라우저를 통해서 원하는 웹 사이트 내에서 원하는 정보를 불러온다 또는 가져온다 라는 게 정의로 알맞다고 생각한다.

Selenium만 사용하기에는 부족하다. 원하는 데이터를 추출하려면 파일 종류를 잘 분류해야 하는데 이럴 때 사용하는 게

BeautifulSoup이다.

BeautifulSoup은 Html, xml문서를 Parsing 하기 위한 패키지로 Html에서 데이터를 추출하는데 유용하다.

정리하자면

  • Selenium: 웹 브라우저를 이용하여 웹 사이트에서 자동적으로 제어할 수 있게 함.
  • BeautifulSoup : Html,xml문서를 Parsing하기 위한 패키지로 Html에서 데이터를 추출하는데 유용하다.

간단하게 예시를 통해 웹 크롤링을 해보자

 

< 네이버 영화에서 영화 평점 불러오기>

1. 먼저 각 패키지를 Import 한다.

from bs4 import BeautifulSoup
from urllib.request import urlopen

2.url주소를 입력하고 원하는 데이터를 찾는다.

url = " http://movie.naver.com/movie/sdb/rank/rmovie.nhn?sel=cur&date=20230101 "
page= urlopen(url)
soup= BeautifulSoup(page, "html.parser")
soup

 

3. 검색 기능을 통해 빠르게 값이 출력되는 div부분을 찾는다.

값을 찾게 되면

soup.find_all('div','tit5')

라는 명령어를 통해 한번 더 정제를 한다.

4. 값이 정제된 걸 확인한 후에는 

title_n =  soup.find_all('div','tit5')
# 전체 영화의 제목 뽑아옴
movie_name = [soup.find_all('div','tit5')[n].a.string for n in range(0,len(title_n))]

#전체 영화의  평점 뽑아옴
movie_point = [soup.find_all('td','point')[n].string for n in range(0,len(title_n))]

movie_dict = {}

for i in range(0,len(title_n)):
    movie_dict[movie_name[i]]= movie_point[i]
    
movie_dict

5. 값을 보기 쉽게 정리를 해준다. name, point로 분류해서 각각 출력되도록 해준다.

6. 원하는 대로 출력되는 걸 확인할 수 있다.

 

반응형