이 아름다운 수프 Python 튜토리얼로 웹사이트를 스크랩하세요

이 아름다운 수프 Python 튜토리얼로 웹사이트를 스크랩하세요

Beautiful Soup은 오픈 소스 Python 라이브러리입니다. 탐색 파서를 사용하여 XML 및 HTML 파일의 내용을 스크랩합니다. 여러 분석 목적을 위해 데이터가 필요합니다. 그러나 Python 및 웹 스크래핑이 처음이라면 Python의 Beautiful Soup 라이브러리를 웹 스크래핑 프로젝트에 사용해 볼 가치가 있습니다.





Python의 오픈 소스 Beautiful Soup 라이브러리를 사용하면 프로세스를 최대한 제어하면서 웹 페이지의 일부 또는 요소를 스크랩하여 데이터를 얻을 수 있습니다. 이 기사에서는 Beautiful Soup을 사용하여 웹사이트를 스크랩하는 방법을 살펴봅니다.





Beautiful Soup을 설치하고 시작하는 방법

계속 진행하기 전에 이 Beautiful Soup 튜토리얼 기사에서 Python 3 및 아름다운 수프4 , 아름다운 수프의 최신 버전입니다. 당신이 파이썬 가상 환경 만들기 로컬 컴퓨터에 있는 것과 프로젝트 및 패키지를 분리합니다.





아이폰 11 프로 개인 정보 보호 화면 보호기

시작하려면 가상 환경에 Beautiful Soup 라이브러리를 설치해야 합니다. Beautiful Soup은 모든 운영 체제용 PyPi 패키지로 제공되므로 다음을 사용하여 설치할 수 있습니다. 핍은 beautifulsoup4를 설치 터미널을 통한 명령.

그러나 Debian 또는 Linux를 사용하는 경우 위의 명령이 계속 작동하지만 다음을 실행하여 패키지 관리자로 설치할 수 있습니다. apt-get 설치 python3-bs4 .



Beautiful Soup은 URL을 직접 스크랩하지 않습니다. 기성품 HTML 또는 XML 파일에서만 작동합니다. 즉, URL을 직접 전달할 수 없습니다. 이 문제를 해결하려면 Python의 요청 라이브러리를 사용하여 대상 웹사이트의 URL을 Beautiful Soup에 제공해야 합니다.

해당 라이브러리를 스크레이퍼에서 사용할 수 있도록 하려면 다음을 실행하십시오. 핍 설치 요청 터미널을 통한 명령.





XML 파서 라이브러리를 사용하려면 다음을 실행하십시오. pip 설치 lxml 그것을 설치합니다.

스크랩하려는 웹페이지 검사

익숙하지 않은 웹사이트를 스크랩하기 전에 해당 요소를 검사하는 것이 가장 좋습니다. 브라우저를 개발자 모드로 전환하면 됩니다. 그것은 꽤 쉽습니다 Chrome 개발자 도구 사용 당신이 구글 크롬을 사용하는 경우.





그러나 HTML 태그, 속성, 클래스 및 ID에 대해 자세히 알아보려면 웹 페이지를 검사해야 합니다. 그렇게 하면 웹 페이지의 핵심 요소와 콘텐츠 유형이 노출됩니다.

또한 웹사이트에서 원하는 정확한 데이터를 얻는 데 사용할 수 있는 최상의 전략과 데이터를 얻을 수 있는 방법을 개발하는 데 도움이 됩니다.

Beautiful Soup으로 웹사이트 데이터를 스크랩하는 방법

이제 모든 것이 준비되었으므로 선호하는 코드 편집기를 열고 새 Python 파일을 만들어 선택한 이름을 지정합니다. 그러나 다음을 수행할 수도 있습니다. Jupyter Notebook과 같은 웹 기반 IDE 사용 명령줄을 통해 Python을 실행하는 데 익숙하지 않은 경우.

다음으로 필요한 라이브러리를 가져옵니다.

from bs4 import BeautifulSoup
import requests

먼저 요청 라이브러리가 어떻게 작동하는지 봅시다.

from bs4 import BeautifulSoup
import requests
website = requests.get('http://somewebpages.com')
print(website)

위의 코드를 실행하면 요청이 성공했음을 나타내는 200 상태가 반환됩니다. 그렇지 않으면 실패한 GET 요청을 나타내는 400 상태 또는 기타 오류 상태가 표시됩니다.

괄호 안의 웹사이트 URL은 항상 타겟 URL로 교체해야 합니다.

일단 웹사이트에 가져 오기 요청을 받은 다음 Beautiful Soup에 전달하면 선택한 형식에 따라 내장 XML 또는 HTML 파서를 사용하여 콘텐츠를 HTML 또는 XML 파일로 읽을 수 있습니다.

HTML 파서로 이 작업을 수행하는 방법을 보려면 다음 코드 스니펫을 살펴보세요.

from bs4 import BeautifulSoup
import requests
website = requests.get('http://somewebpages.com')
soup = BeautifulSoup(website.content, 'html.parser')
print(soup)

위의 코드는 콘텐츠와 함께 웹페이지의 전체 DOM을 반환합니다.

다음을 사용하여 DOM의 더 정렬된 버전을 얻을 수도 있습니다. 예쁘게 하다 방법. 출력을 보기 위해 다음을 시도할 수 있습니다.

from bs4 import BeautifulSoup
import requests
website = requests.get('http://somewebpages.com/')
soup = BeautifulSoup(website.content, 'html.parser')
print(soup.prettify())

또한 웹 페이지의 요소를 .텍스트 방법:

from bs4 import BeautifulSoup
import requests
website = requests.get('http://somewebpages.com/')
soup = BeautifulSoup(website.content, 'html.parser')
print(soup.text)

태그 이름으로 웹페이지 콘텐츠를 스크랩하는 방법

Beautiful Soup을 사용하여 특정 태그의 콘텐츠를 긁을 수도 있습니다. 이렇게 하려면 Beautiful Soup 스크레이퍼 요청에 대상 태그의 이름을 포함해야 합니다.

예를 들어 콘텐츠를 가져오는 방법을 살펴보겠습니다. h2 웹페이지의 태그.

from bs4 import BeautifulSoup
import requests
website = requests.get('http://somewebpages.com/')
soup = BeautifulSoup(website.content, 'html.parser')
print(soup.h2)

위의 코드 스니펫에서 수프.h2 첫 번째를 반환 h2 웹 페이지의 요소를 무시하고 나머지는 무시합니다. 모든 로드하려면 h2 요소, 당신은 사용할 수 있습니다 모두 찾기 내장 함수와 ~을위한 파이썬 루프:

소셜 미디어가 좋은 이유
from bs4 import BeautifulSoup
import requests
website = requests.get('http://somewebpages.com/')
soup = BeautifulSoup(website.content, 'html.parser')
h2tags = soup.find_all('h2')
for soups in h2tags:
print(soups)

해당 코드 블록은 h2 요소와 그 내용. 그러나 다음을 사용하여 태그를 로드하지 않고도 콘텐츠를 가져올 수 있습니다. .끈 방법:

from bs4 import BeautifulSoup
import requests
website = requests.get('http://somewebpages.com/')
soup = BeautifulSoup(website.content, 'html.parser')
h2tags = soup.find_all('h2')
for soups in h2tags:
print(soups.string)

모든 HTML 태그에 이 방법을 사용할 수 있습니다. 교체만 하면 됩니다 h2 당신이 좋아하는 태그.

그러나 태그 목록을 모두 찾기 방법. 예를 들어 아래 코드 블록은 다음 내용을 스크랩합니다. 에게 , h2 , 그리고 제목 태그:

from bs4 import BeautifulSoup
import requests
website = requests.get('http://somewebpages.com/')
soup = BeautifulSoup(website.content, 'html.parser')
tags = soup.find_all(['a', 'h2', 'title'])
for soups in tags:
print(soups.string)

ID와 클래스 이름을 사용하여 웹 페이지를 스크랩하는 방법

DevTools를 사용하여 웹사이트를 검사한 후 DOM의 각 요소를 보유하는 id 및 class 속성에 대해 더 많이 알 수 있습니다. 해당 정보가 있으면 이 방법을 사용하여 해당 웹페이지를 스크랩할 수 있습니다. 대상 구성 요소의 콘텐츠가 데이터베이스에서 반복될 때 유용합니다.

당신은 사용할 수 있습니다 찾기 id 및 클래스 스크레이퍼에 대한 메서드입니다. 달리 모두 찾기 반복 가능한 객체를 반환하는 메서드, 찾기 메서드는 반복할 수 없는 단일 대상에서 작동합니다. ID 이 경우. 따라서 사용할 필요가 없습니다. ~을위한 그것으로 루프.

id를 사용하여 아래 페이지의 콘텐츠를 스크랩하는 방법의 예를 살펴보겠습니다.

from bs4 import BeautifulSoup
import requests
website = requests.get('http://somewebpages.com/')
soup = BeautifulSoup(website.content, 'html.parser')
id = soup.find(id = 'enter the target id here')
print(id.text)

클래스 이름에 대해 이 작업을 수행하려면 ID ~와 함께 수업 . 그러나 글쓰기 수업 파이썬이 그것을 키워드로 보기 때문에 직접적으로 구문 혼란을 야기합니다. 해당 오류를 우회하려면 다음과 같이 클래스 앞에 밑줄을 작성해야 합니다. 수업_ .

본질적으로 id를 포함하는 줄은 다음과 같습니다.

my_classes = soup.find(class_ = 'enter the target class name here')
print(my_classes.text)

그러나 해당 ID 또는 클래스로 특정 태그 이름을 호출하여 웹페이지를 스크랩할 수도 있습니다.

data = soup.find_all('div', class_ = 'enter the target class name here')
print(data)

아름다운 수프로 재사용 가능한 스크레이퍼 만드는 방법

클래스를 만들고 이전 코드를 모두 해당 클래스의 함수에 넣어 일부 태그와 해당 ID의 내용을 가져오는 재사용 가능한 스크레이퍼를 만들 수 있습니다. URL, 두 개의 태그 이름, 해당 ID 또는 클래스의 다섯 가지 인수를 허용하는 함수를 만들어 이를 수행할 수 있습니다.

전자 상거래 웹 사이트에서 셔츠 가격을 긁어모으고 싶다고 가정합니다. 아래의 예제 스크레이퍼 클래스는 해당 ID 또는 클래스로 가격 및 셔츠 태그를 추출한 다음 'Price' 및 Shirt_name이 열 이름인 Pandas 데이터 프레임으로 반환합니다.

당신이 pip 설치 판다 아직 수행하지 않은 경우 터미널을 통해.

import pandas as pd
class scrapeit:
try:
def scrape(website=None, tag1=None, id1=None, tag2=None, id2=None):
if not (website and tag1 and id1 and tag2 and id2)==None:
try:
page = requests.get(website)
soup = BeautifulSoup(page.content, 'html.parser')
infotag1 = soup.find_all(tag1, id1)
infotag2 = soup.find_all(tag2, id2)
priced = [prices.text for prices in infotag1]
shirt = [shirts.text for shirts in infotag2]
data = {
'Price':priced,
'Shirt_name':shirt}
info = pd.DataFrame(data, columns=['Price', 'Shirt_name'])
print(info)
except:
print('Not successful')
else:
print('Oops! Please enter a website, two tags and thier corresponding ids')
except:
print('Not successful!')

방금 만든 스크레이퍼는 재사용 가능한 모듈이며 다른 Python 파일에서 가져와서 사용할 수 있습니다. 에 전화하려면 긁다 해당 클래스의 함수를 사용하면 scrapeit.scrape('웹사이트 URL', 'price_tag', 'price_id', 'shirt_tag', 'shirt_id') . URL 및 기타 매개변수를 제공하지 않으면 또 다른 명령문은 그렇게 하라는 메시지를 표시합니다.

다른 Python 파일에서 해당 스케이퍼를 사용하려면 다음과 같이 가져올 수 있습니다.

from scraper_module import scrapeit
scrapeit.scrape('URL', 'price_tag', 'price_id', 'shirt_tag', 'shirt_id')

메모: 스크레이퍼_모듈 스크레이퍼 클래스를 포함하는 Python 파일의 이름입니다.

당신은 또한 확인할 수 있습니다 아름다운 수프 문서 그것을 최대한 활용하는 방법에 대해 더 깊이 알고 싶다면.

아름다운 수프는 귀중한 웹 스크래핑 도구입니다

Beautiful Soup은 스크래핑하는 동안 데이터가 전달되는 방식을 제어할 수 있는 강력한 Python 화면 스크래퍼입니다. 가격, 시장 동향 등과 같은 경쟁업체의 웹 데이터에 액세스할 수 있으므로 귀중한 비즈니스 도구입니다.

텍스트 소프트웨어에 대한 최고의 자유 연설

이 기사에서 태그 스크레이퍼를 만들었지만 이 강력한 Python 라이브러리를 사용하여 더 유용한 스크레이핑 도구를 만들 수 있습니다.

공유하다 공유하다 트위터 이메일 최고의 웹 스크래핑 도구 온라인

분석 목적으로 웹사이트에서 데이터를 수집해야 합니까? 이러한 웹 스크래핑 도구를 사용하면 쉽게 할 수 있습니다.

다음 읽기
관련 항목
  • 프로그램 작성
  • 파이썬
저자 소개 이디소 오미솔라(94건의 기사 게재)

Idowu는 스마트 기술과 생산성에 대한 열정을 가지고 있습니다. 여가 시간에는 코딩을 하거나 지루할 때 체스판으로 전환하지만 가끔씩 일상에서 벗어나는 것도 좋아합니다. 사람들에게 현대 기술에 대한 방법을 보여주고자 하는 그의 열정은 그가 더 많은 글을 쓰도록 동기를 부여합니다.

Idowu Omisola가 참여한 작품 더보기

뉴스레터 구독

기술 팁, 리뷰, 무료 전자책 및 독점 거래에 대한 뉴스레터에 가입하십시오!

구독하려면 여기를 클릭하세요.