"일꾼이 일을 잘하려면 먼저 도구를 갈고 닦아야 한다." - 공자, 『논어』.
첫 장 > 프로그램 작성 > Beautiful Soup을 사용하여 공개 웹에서 데이터를 추출하는 방법

Beautiful Soup을 사용하여 공개 웹에서 데이터를 추출하는 방법

2024-08-01에 게시됨
검색:155

How Beautiful Soup is used to extract data out of the Public Web

Beautiful Soup은 웹페이지에서 데이터를 스크랩하는 데 사용되는 Python 라이브러리입니다. HTML 및 XML 문서를 구문 분석하기 위한 구문 분석 트리를 생성하여 원하는 정보를 쉽게 추출할 수 있습니다.

Beautiful Soup은 웹 스크래핑을 위한 몇 가지 핵심 기능을 제공합니다:

  1. 구문 분석 트리 탐색: 구문 분석 트리를 쉽게 탐색하고 요소, 태그 및 속성을 검색할 수 있습니다.
  2. 구문 분석 트리 수정: 태그와 속성의 추가, 제거, 업데이트를 포함하여 구문 분석 트리를 수정할 수 있습니다.
  3. 출력 형식: 구문 분석 트리를 다시 문자열로 변환하여 수정된 내용을 쉽게 저장할 수 있습니다.

뷰티플수프를 사용하려면 lxml이나 html.parser 등의 파서와 함께 라이브러리를 설치해야 합니다. pip
를 사용하여 설치할 수 있습니다.

#Install Beautiful Soup using pip.
pip install beautifulsoup4 lxml

페이지 매김 처리

여러 페이지에 걸쳐 콘텐츠를 표시하는 웹사이트를 처리할 때 모든 데이터를 스크랩하려면 페이지 매김 처리가 필수적입니다.

  1. 페이지 매김 구조 식별: 웹사이트를 검사하여 페이지 매김 구조를 이해합니다(예: 다음 페이지 버튼 또는 번호가 매겨진 링크).
  2. 페이지 반복: 루프를 사용하여 각 페이지를 반복하고 데이터를 스크랩합니다.
  3. URL 또는 매개변수 업데이트: 다음 페이지의 콘텐츠를 가져오려면 URL 또는 매개변수를 수정하세요.
import requests
from bs4 import BeautifulSoup

base_url = 'https://example-blog.com/page/'
page_number = 1
all_titles = []

while True:
    # Construct the URL for the current page
    url = f'{base_url}{page_number}'
    response = requests.get(url)
    soup = BeautifulSoup(response.content, 'html.parser')

    # Find all article titles on the current page
    titles = soup.find_all('h2', class_='article-title')
    if not titles:
        break  # Exit the loop if no titles are found (end of pagination)

    # Extract and store the titles
    for title in titles:
        all_titles.append(title.get_text())

    # Move to the next page
    page_number  = 1

# Print all collected titles
for title in all_titles:
    print(title)

중첩된 데이터 추출

추출해야 하는 데이터가 여러 태그 레이어 내에 중첩되어 있는 경우가 있습니다. 중첩된 데이터 추출을 처리하는 방법은 다음과 같습니다.

  1. 상위 태그로 이동: 중첩된 데이터가 포함된 상위 태그를 찾습니다.
  2. 중첩 태그 추출: 각 상위 태그 내에서 중첩 태그를 찾아 추출합니다.
  3. 중첩 태그를 통해 반복: 중첩 태그를 반복하여 필요한 정보를 추출합니다.
import requests
from bs4 import BeautifulSoup

url = 'https://example-blog.com/post/123'
response = requests.get(url)
soup = BeautifulSoup(response.content, 'html.parser')

# Find the comments section
comments_section = soup.find('div', class_='comments')

# Extract individual comments
comments = comments_section.find_all('div', class_='comment')

for comment in comments:
    # Extract author and content from each comment
    author = comment.find('span', class_='author').get_text()
    content = comment.find('p', class_='content').get_text()
    print(f'Author: {author}\nContent: {content}\n')

AJAX 요청 처리

많은 최신 웹사이트에서는 AJAX를 사용하여 데이터를 동적으로 로드합니다. AJAX를 처리하려면 브라우저 개발자 도구를 사용하여 네트워크 요청을 모니터링하고 스크래퍼에서 해당 요청을 복제하는 등 다양한 기술이 필요합니다.

import requests
from bs4 import BeautifulSoup

# URL to the API endpoint providing the AJAX data
ajax_url = 'https://example.com/api/data?page=1'
response = requests.get(ajax_url)
data = response.json()

# Extract and print data from the JSON response
for item in data['results']:
    print(item['field1'], item['field2'])

웹 스크래핑의 위험

웹 스크래핑에는 법적, 기술적, 윤리적 위험을 신중하게 고려해야 합니다. 적절한 보호 장치를 구현하면 이러한 위험을 완화하고 책임감 있고 효과적으로 웹 스크래핑을 수행할 수 있습니다.

  • 서비스 약관 위반: 많은 웹사이트에서는 서비스 약관(ToS)에서 스크래핑을 명시적으로 금지하고 있습니다. 본 약관을 위반할 경우 법적 조치를 받을 수 있습니다.
  • 지적재산권 문제: 허가 없이 콘텐츠를 스크랩하는 경우 지적재산권이 침해되어 법적 분쟁으로 이어질 수 있습니다.
  • IP 차단: 웹사이트는 스크래핑 동작을 보이는 IP 주소를 감지하고 차단할 수 있습니다.
  • 계정 차단: 사용자 인증이 필요한 웹사이트에서 스크래핑을 수행할 경우, 스크래핑에 사용된 계정이 차단될 수 있습니다.

Beautiful Soup은 HTML 및 XML 문서 탐색 및 검색을 위한 사용하기 쉬운 인터페이스를 제공하여 웹 스크래핑 프로세스를 단순화하는 강력한 라이브러리입니다. 다양한 구문 분석 작업을 처리할 수 있으므로 웹에서 데이터를 추출하려는 모든 사람에게 필수적인 도구입니다.

릴리스 선언문 이 기사는 https://dev.to/marcosconci/how-beautiful-soup-is-used-to-extract-data-out-of-the-public-web-51gg?1 에서 복제됩니다. 침해가 있는 경우 , [email protected]로 문의해주세요.
최신 튜토리얼 더>

부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.

Copyright© 2022 湘ICP备2022001581号-3