Beautiful Soup을 설치하고 웹 스크래핑 프로젝트에 사용하는 방법은 무엇입니까?

현대의 데이터 중심 환경에서는 기존의 수동 데이터 수집 방식이 더 이상 효율적이지 않습니다. 인터넷 연결이 가능한 컴퓨터가 보편화되면서 웹은 방대한 데이터 저장소가 되었습니다. 이러한 변화 속에서 웹 스크래핑은 더욱 효율적이고 시간 절약적인 최신 데이터 수집 방법으로 주목받고 있습니다. 웹 스크래핑 분야에서 파이썬은 ‘Beautiful Soup’이라는 강력한 도구를 제공합니다. 이 글에서는 웹 스크래핑을 처음 시작하는 사용자를 위해 Beautiful Soup의 설치 과정을 상세히 안내합니다.

Beautiful Soup를 설치하고 실제로 사용하기 전에 먼저 이 도구가 왜 필요한지 알아보겠습니다.

Beautiful Soup란 무엇인가?

만약 “COVID가 사람들의 건강에 미치는 영향”에 대한 연구를 진행 중이고, 관련 데이터를 담은 웹 페이지 몇 개를 찾았다고 가정해 봅시다. 하지만 그 웹 페이지들이 데이터를 편리하게 다운로드할 수 있는 옵션을 제공하지 않는다면 어떻게 해야 할까요? 바로 이때 Beautiful Soup의 역할이 빛을 발합니다.

Beautiful Soup은 특정 웹사이트에서 데이터를 추출하는 데 특화된 파이썬 라이브러리입니다. 이 라이브러리는 HTML이나 XML 형식으로 된 웹 페이지에서 원하는 데이터를 효율적으로 검색할 수 있도록 도와줍니다.

Beautiful Soup은 레너드 리처드슨(Leonard Richardson)에 의해 2004년에 처음 개발되었습니다. 웹 스크래핑을 보다 쉽게 만들고자 했던 그의 아이디어는 오늘날까지도 활발히 발전하고 있으며, 그는 트위터 계정을 통해 Beautiful Soup의 최신 업데이트 소식을 꾸준히 공유하고 있습니다.

Beautiful Soup은 파이썬 3.8을 기반으로 개발되었지만, 파이썬 3 및 파이썬 2.4 버전에서도 완벽하게 작동합니다.

웹사이트는 종종 캡차(Captcha)와 같은 보안 시스템을 사용하여 인공지능 도구로부터 데이터를 보호합니다. 이러한 경우 Beautiful Soup의 ‘user-agent’ 헤더를 수정하거나 캡차 해결 API를 사용하면 실제 브라우저처럼 작동하여 탐지 시스템을 우회할 수 있습니다.

그러나 Beautiful Soup을 자세히 알아볼 시간적 여유가 없거나, 보다 쉽고 효율적으로 스크래핑 작업을 처리하고 싶다면, URL만 제공하면 데이터를 추출해주는 웹 스크래핑 API를 이용하는 것도 좋은 선택입니다.

만약 프로그래밍 경험이 있다면, Beautiful Soup의 간단한 구문을 통해 웹 페이지를 탐색하고 조건부 파싱을 기반으로 원하는 데이터를 추출하는 것이 어렵지 않을 것입니다. 또한, 초보자에게도 사용자 친화적인 도구입니다.

Beautiful Soup은 고급 스크래핑에는 적합하지 않지만, 마크업 언어로 작성된 파일에서 데이터를 스크래핑하는 데 매우 효과적입니다.

상세하고 체계적인 문서화 또한 Beautiful Soup의 큰 장점 중 하나입니다.

이제 컴퓨터에 Beautiful Soup을 설치하는 방법을 알아보겠습니다.

웹 스크래핑을 위한 Beautiful Soup 설치 방법

pip는 2008년에 개발된 파이썬 패키지 관리 도구로, 파이썬 라이브러리나 의존성을 설치할 때 개발자들이 가장 많이 사용하는 표준 도구입니다.

pip는 최신 버전의 파이썬을 설치할 때 기본적으로 함께 설치됩니다. 따라서, 시스템에 최신 버전의 파이썬이 설치되어 있다면 바로 다음 단계를 진행할 수 있습니다.

명령 프롬프트(또는 터미널)를 열고 다음 pip 명령어를 입력하여 Beautiful Soup을 설치합니다.

pip install beautifulsoup4

설치 과정이 완료되면 화면에 다음 스크린샷과 비슷한 내용이 표시될 것입니다.

설치 중 발생할 수 있는 일반적인 오류를 방지하려면 pip 설치 프로그램이 최신 버전인지 확인하는 것이 중요합니다.

pip 설치 프로그램을 최신 버전으로 업데이트하는 명령어는 다음과 같습니다.

pip install --upgrade pip

이제 기본적인 설치 과정은 성공적으로 완료되었습니다.

Beautiful Soup이 컴퓨터에 설치되었으니, 이제 웹 스크래핑에 실제로 어떻게 사용하는지 알아봅시다.

웹 스크래핑을 위해 Beautiful Soup을 가져오고 사용하는 방법

파이썬 개발 환경(IDE)에서 다음 명령어를 입력하여 Beautiful Soup을 현재 파이썬 스크립트로 가져옵니다.

from bs4 import BeautifulSoup

이제 Beautiful Soup을 스크래핑 작업에 사용할 파이썬 파일에 성공적으로 추가했습니다.

Beautiful Soup을 이용하여 원하는 데이터를 추출하는 방법을 알아보기 위해 간단한 코드 예제를 살펴보겠습니다.

Beautiful Soup을 사용하여 특정 웹사이트의 HTML 태그를 찾고 해당 태그 안에 포함된 데이터를 스크랩할 수 있습니다.

이 예제에서는 여러 회사의 실시간 주가를 제공하는 marketwatch.com 웹사이트를 활용합니다. Beautiful Soup 라이브러리에 익숙해지기 위해 이 웹사이트에서 일부 데이터를 추출해 보겠습니다.

HTTP 요청을 보내고 응답을 받을 수 있도록 ‘requests’ 패키지를 가져오고, URL에서 웹 페이지를 로드하기 위해 ‘urllib’를 가져옵니다.

from urllib.request import urlopen
import requests

나중에 쉽게 접근할 수 있도록 웹 페이지 링크를 변수에 저장합니다.

url="https://www.marketwatch.com/investing/stock/amzn"

다음으로, ‘urllib’ 라이브러리의 ‘urlopen’ 메서드를 사용하여 웹 페이지의 HTML 콘텐츠를 변수에 저장합니다. URL을 ‘urlopen’ 함수에 전달하고 그 결과를 변수에 저장합니다.

page = urlopen(url)

이제 Beautiful Soup 객체를 만들고, ‘html.parser’를 사용하여 원하는 웹 페이지를 파싱합니다.

soup_obj = BeautifulSoup(page, 'html.parser')

이제 대상 웹 페이지의 전체 HTML 코드가 ‘soup_obj’ 변수에 저장되었습니다.

코드를 더 진행하기 전에 HTML 코드와 태그에 대해 자세히 알아보기 위해 대상 웹 페이지의 소스 코드를 확인해 보겠습니다.

웹 페이지의 아무 곳이나 마우스 오른쪽 버튼을 클릭하면 ‘검사’ 옵션이 나타납니다.

‘검사’를 클릭하여 소스 코드를 확인합니다.

위의 소스 코드에서 웹사이트 인터페이스에 표시되는 모든 요소에 대한 태그, 클래스 및 상세 정보를 확인할 수 있습니다.

Beautiful Soup의 ‘find’ 메소드를 사용하면 특정 HTML 태그를 검색하고 그 안의 데이터를 추출할 수 있습니다. 이를 위해 추출하려는 데이터가 포함된 태그와 클래스 이름을 메서드에 입력합니다.

예를 들어, 웹 페이지에 표시되는 “Amazon.com Inc.”의 클래스 이름은 ‘h1’ 태그 아래에 있는 ‘company__name’입니다. 이 정보를 ‘find’ 메소드에 입력하여 해당 HTML 조각을 변수로 추출할 수 있습니다.

name = soup_obj.find('h1', attrs={'class': 'company__name'})

이제 변수 이름에 저장된 HTML 코드와 추출된 텍스트를 화면에 출력해 보겠습니다.

print(name)

print(name.text)

화면에 추출된 데이터가 출력되는 것을 확인할 수 있습니다.

IMDb 웹사이트 스크랩하기

대부분의 사람들은 영화를 보기 전에 IMDb 웹사이트에서 영화 평점을 확인합니다. 이 예제에서는 최고 평점의 영화 목록을 가져와 웹 스크래핑을 위한 Beautiful Soup 사용법을 익히는 데 도움이 될 것입니다.

1단계: Beautiful Soup과 requests 라이브러리를 가져옵니다.

from bs4 import BeautifulSoup
import requests

2단계: 스크랩하려는 URL을 ‘url’이라는 변수에 저장하여 코드에서 쉽게 접근할 수 있도록 합니다.

‘requests’ 패키지를 사용하여 URL에서 HTML 페이지를 가져옵니다.

url = requests.get('https://www.imdb.com/search/title/?count=100&groups=top_1000&sort=user_rating')

3단계: 다음 코드 스니펫은 현재 URL의 HTML 페이지를 파싱하여 Beautiful Soup 객체를 생성합니다.

soup_obj = BeautifulSoup(url.text, 'html.parser')

변수 “soup_obj”에는 이제 다음 이미지와 같이 원하는 웹 페이지의 전체 HTML 코드가 포함됩니다.

스크랩하려는 데이터의 HTML 코드를 찾기 위해 웹 페이지의 소스 코드를 검사해 보겠습니다.

추출하려는 웹 페이지 요소 위에 커서를 놓고, 마우스 오른쪽 버튼을 클릭한 다음 ‘검사’ 옵션으로 이동하여 해당 특정 요소의 소스 코드를 확인합니다. 다음 이미지를 참고하면 더욱 쉽게 이해할 수 있습니다.

‘lister-list’ 클래스는 연속된 div 태그의 하위 구분으로 최고 평점 영화 관련 데이터를 모두 포함하고 있습니다.

각 영화 카드의 HTML 코드에서 ‘lister-item mode-advanced’ 클래스 아래에는 영화 제목, 평점, 개봉 연도 등의 정보를 담고 있는 ‘h3’ 태그가 있습니다. 아래 이미지를 참고하세요.

참고: Beautiful Soup의 ‘find’ 메소드는 주어진 이름과 일치하는 첫 번째 태그를 검색합니다. 반면 ‘find_all’ 메소드는 주어진 입력과 일치하는 모든 태그를 찾습니다.

4단계: ‘find’ 및 ‘find_all’ 메소드를 사용하여 모든 영화의 제목, 평점, 개봉 연도의 HTML 코드를 리스트 변수에 저장합니다.

top_movies = soup_obj.find('div',attrs={'class': 'lister-list'}).find_all('h3')

5단계: ‘top_movies’ 변수에 저장된 영화 목록을 반복하고, 아래 코드를 사용하여 각 영화의 이름, 순위, 개봉 연도를 HTML 코드에서 텍스트 형식으로 추출합니다.

for movie in top_movies:
    movi_name = movie.a.text
    rank = movie.span.text.rstrip('.')
    year = movie.find('span', attrs={'class': 'lister-item-year text-muted unbold'})
    year = year.text.strip('()')
    print(movi_name + " ", rank+ " ", year+ " ")

출력된 결과를 보면 제목, 평점, 개봉 연도와 함께 영화 목록이 표시되는 것을 확인할 수 있습니다.

추출된 데이터는 파이썬 코드를 사용하여 엑셀 시트로 쉽게 옮겨 분석에 활용할 수 있습니다.

마무리

이 글은 웹 스크래핑을 위한 Beautiful Soup 설치 방법을 안내합니다. 또한, 소개된 스크래핑 예제들은 Beautiful Soup을 처음 접하는 사용자들에게 도움이 될 것입니다.

웹 스크래핑을 위한 Beautiful Soup 설치에 관심이 있다면 파이썬을 사용한 웹 스크래핑에 대한 더 자세한 정보를 담고 있는 이 가이드를 확인해 보는 것이 좋습니다.