이 글에서는 Python의 requests와 BeautifulSoup(bs4) 라이브러리를 사용해 위키백과(Wikipedia) 인포박스(Infobox)에서 텍스트를 스크래핑하는 방법을 소개합니다. 약 10분이면 충분할 만큼 과정이 간단하니, 웹 스크래핑 입문용 프로젝트로도 딱 좋습니다.
1. 필요한 라이브러리 설치
먼저 bs4와 requests 패키지가 필요합니다. 아래 명령어를 실행해 설치하세요.
pip install bs4 pip install requests
2. 구현 순서
인포박스에서 원하는 텍스트를 가져오는 코드는 다음 순서로 작성합니다.
bs4와requests모듈을 임포트합니다.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의 탐색 메서드로 접근하면 인포박스뿐 아니라 페이지 내 어떤 데이터든 자유롭게 추출할 수 있습니다. 튜토리얼 진행 중 궁금한 점이 있다면 댓글로 남겨주세요.