오늘날의 데이터 중심 세계에서 기존의 수동 데이터 수집 방법은 구식입니다. 모든 책상에 인터넷이 연결된 컴퓨터는 웹을 거대한 데이터 소스로 만들었습니다. 따라서 보다 효율적이고 시간을 절약하는 최신 데이터 수집 방법은 웹 스크래핑입니다. 그리고 웹 스크래핑과 관련하여 Python에는 Beautiful Soup이라는 도구가 있습니다. 이 게시물에서는 웹 스크래핑을 시작하기 위해 뷰티플수프의 설치 단계를 안내합니다.
뷰티풀수프를 설치하고 사용하기 전에 왜 사용해야 하는지 알아보자.
목차
아름다운 수프란?
“COVID가 사람들의 건강에 미치는 영향”을 조사하고 관련 데이터가 포함된 웹 페이지 몇 개를 찾았다고 가정해 보겠습니다. 그러나 그들이 데이터를 빌릴 수 있는 한 번의 클릭 다운로드 옵션을 제공하지 않는다면 어떻게 될까요? 아름다운 수프가 등장합니다.
Beautiful Soup은 대상 사이트에서 데이터를 추출하는 Python 라이브러리의 색인 중 하나입니다. HTML 또는 XML 페이지에서 데이터를 검색하는 것이 더 편합니다.
Leonard Richardson은 2004년 웹 스크래핑을 위한 Beautiful Soup의 아이디어를 빛으로 가져왔습니다. 그러나 이 프로젝트에 대한 그의 기여는 오늘날까지 계속되고 있습니다. 그는 자신의 트위터 계정에서 Beautiful Soup의 모든 새 릴리스를 자랑스럽게 업데이트합니다.
웹 스크래핑을 위한 Beautiful Soup은 Python 3.8을 사용하여 개발되었지만 Python 3 및 Python 2.4에서도 완벽하게 작동합니다.
종종 웹 사이트는 보안 문자 보호를 사용하여 AI 도구에서 데이터를 구합니다. 이 경우 Beautiful Soup의 ‘user-agent’ 헤더를 약간 변경하거나 Captcha 해결 API를 사용하면 신뢰할 수 있는 브라우저를 모방하고 탐지 도구를 속일 수 있습니다.
그러나 Beautiful Soup을 탐색할 시간이 없거나 효율적이고 쉽게 스크래핑을 수행하려는 경우 URL을 제공하고 데이터를 가져올 수 있는 이 웹 스크래핑 API를 확인하는 것을 놓치지 마십시오. 당신의 손.
이미 프로그래머라면 웹 페이지를 탐색하고 조건부 구문 분석을 기반으로 원하는 데이터를 추출하는 간단한 구문 때문에 Beautiful Soup을 스크래핑에 사용하는 것이 어렵지 않을 것입니다. 동시에 초보자에게도 친숙합니다.
Beautiful Soup은 고급 스크래핑용은 아니지만 마크업 언어로 작성된 파일에서 데이터를 스크래핑하는 데 가장 적합합니다.
명확하고 자세한 문서화는 Beautiful Soup이 제공하는 또 다른 브라우니 포인트입니다.
컴퓨터에 아름다운 수프를 넣을 수 있는 쉬운 방법을 찾아봅시다.
웹 스크래핑을 위해 아름다운 수프를 설치하는 방법?
Pip – 2008년에 개발된 손쉬운 Python 패키지 관리자는 이제 개발자들 사이에서 Python 라이브러리 또는 종속성을 설치하는 표준 도구입니다.
Pip은 최신 Python 버전 설치 시 기본적으로 제공됩니다. 따라서 시스템에 최신 Python 버전이 설치되어 있는 경우 계속 진행해도 됩니다.
명령 프롬프트를 열고 다음 pip 명령을 입력하여 아름다운 수프를 즉시 설치하십시오.
pip install beautifulsoup4
디스플레이에 다음 스크린샷과 유사한 내용이 표시됩니다.
일반적인 오류를 방지하려면 PIP 설치 프로그램을 최신 버전으로 업데이트했는지 확인하십시오.
pip 설치 프로그램을 최신 버전으로 업데이트하는 명령은 다음과 같습니다.
pip install --upgrade pip
우리는 이 게시물에서 절반의 기초를 성공적으로 다루었습니다.
이제 Beautiful Soup이 컴퓨터에 설치되었으므로 이를 웹 스크래핑에 사용하는 방법을 살펴보겠습니다.
웹 스크래핑을 위해 Beautiful Soup을 가져오고 작업하는 방법은 무엇입니까?
Python IDE에서 다음 명령을 입력하여 Beautiful Soup을 현재 Python 스크립트로 가져옵니다.
from bs4 import BeautifulSoup
이제 Beautiful Soup이 스크래핑에 사용할 Python 파일에 있습니다.
아름다운 수프로 원하는 데이터를 추출하는 방법을 알아보기 위해 코드 예제를 살펴보자.
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 웹사이트 스크랩
우리 중 많은 사람들이 영화를 보기 전에 IMBb 사이트에서 영화 등급을 찾습니다. 이 데모는 최고 등급의 영화 목록을 제공하고 웹 스크래핑을 위한 아름다운 수프에 익숙해지는 데 도움이 됩니다.
1단계: 아름다운 수프 및 요청 라이브러리를 가져옵니다.
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 페이지를 구문 분석하여 아름다운 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”와 달리 “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 설치 방법에 관심이 있으시므로 Python을 사용한 웹 스크래핑에 대해 자세히 알아보려면 이 이해하기 쉬운 가이드를 확인하는 것이 좋습니다.