Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

Python으로 위키백과(Wikipedia) 인포박스 텍스트 추출하기 – requests & BeautifulSoup 완전 가이드

이 글에서는 Python의 requestsBeautifulSoup(bs4) 라이브러리를 사용해 위키백과(Wikipedia) 인포박스(Infobox)에서 텍스트를 스크래핑하는 방법을 소개합니다. 약 10분이면 충분할 만큼 과정이 간단하니, 웹 스크래핑 입문용 프로젝트로도 딱 좋습니다.

1. 필요한 라이브러리 설치

먼저 bs4requests 패키지가 필요합니다. 아래 명령어를 실행해 설치하세요.

pip install bs4
pip install requests

2. 구현 순서

인포박스에서 원하는 텍스트를 가져오는 코드는 다음 순서로 작성합니다.

  • bs4requests 모듈을 임포트합니다.
  • requests.get() 메서드로 데이터를 수집할 페이지에 HTTP 요청을 보냅니다.
  • 응답 텍스트를 bs4.BeautifulSoup 클래스로 파싱해 변수에 저장합니다.
  • 위키백과 페이지에서 원하는 요소를 개발자 도구(F12)로 직접 확인(inspect)합니다.
  • bs4가 제공하는 적절한 탐색 메서드(find(), find_all() 등)로 해당 요소를 찾습니다.

3. 예제 코드

아래 예제는 영문 위키백과 'India' 문서의 인포박스에서 국가 표어(motto)를 추출하는 코드입니다.

# 모듈 임포트
import requests
import bs4

# 대상 URL
URL = "https://en.wikipedia.org/wiki/India"

# HTTP 요청 전송
response = requests.get(URL)

# 응답 텍스트 파싱
soup = bs4.BeautifulSoup(response.text, 'html')

# HTML 파싱이 완료되었습니다.
# 이제 위키백과 페이지에서 '표어(motto)'를 가져오겠습니다.
# 요소 구조
# table - class="infobox"
# 3번째 tr에서 motto 추출

# infobox 테이블 찾기
infobox = soup.find('table', {'class': 'infobox'})

# 3번째 tr 요소 가져오기
third_tr = infobox.find_all('tr')[2]

# third_tr 안에서 첫 번째 'a' 요소와 'div' 요소를 찾아 필요한 데이터를 얻습니다
first_a = third_tr.div.find('a')
div = third_tr.div.div

# motto 조합
motto = f"{first_a.text} {div.text[:len(div.text) - 3]}"

# 결과 출력
print(motto)

4. 실행 결과

위 프로그램을 실행하면 다음과 같은 결과가 출력됩니다.

Satyameva Jayate "Truth Alone Triumphs"

5. 실전 팁

실제 프로젝트에서는 몇 가지를 더 신경 쓰면 좋습니다.

  • 요청 상태 확인: response.status_code가 200인지 먼저 확인하면 오류를 줄일 수 있습니다.
  • User-Agent 헤더 추가: 일부 사이트는 기본 Python 요청을 차단하므로, 헤더에 브라우저 정보를 넣어주는 것이 안전합니다.
  • 예외 처리: infobox가 존재하지 않는 경우를 대비해 if infobox is not None: 같은 조건문을 추가하세요.
  • 파서 지정: 'html.parser', 'lxml' 등 명시적인 파서를 지정하면 결과가 더 안정적입니다.

마무리

이처럼 위키백과 페이지에서 원하는 요소를 개발자 도구로 검사하고, bs4의 탐색 메서드로 접근하면 인포박스뿐 아니라 페이지 내 어떤 데이터든 자유롭게 추출할 수 있습니다. 튜토리얼 진행 중 궁금한 점이 있다면 댓글로 남겨주세요.