>백엔드 개발 >파이썬 튜토리얼 >Beautiful Soup을 사용하여 공개 웹에서 데이터를 추출하는 방법

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

WBOY
WBOY원래의
2024-08-02 09:20:53748검색

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

위 내용은 Beautiful Soup을 사용하여 공개 웹에서 데이터를 추출하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.