1. HTML 문서 로드 및 파싱
기능 간단히 살펴보기
requests
라이브러리는 우리가 필요한 웹 페이지의 HTML 코드를 가져오는 "메신저"야.
마치 피자배달원이 HTTP 요청을 보내서 결과물을 가져오는 것처럼 작동하지. 물론 여기엔 "마르게리타" 피자나 박스는 없어.
BeautifulSoup
는 대신 HTML 코드를 태그, 속성, 텍스트 같은 재료로
깔끔히 분리해주는 우리의 "요리사" 같은 존재야. 원하는 요소들을 찾아내고
그 중요한 정보를 저장하는 데 아주 유용해.
requests 라이브러리 사용하기
자, 이제 우리가 첫 HTTP 요청을 보내고 웹 페이지의 HTML 코드를 얻을 준비가 됐어.
연습을 위해 example.com
페이지를 로드해 보자. 이 웹사이트는 인터넷의 "공룡" 같은 존재라
입문용으로 딱 좋아.
import requests
url = 'http://example.com'
response = requests.get(url)
# 모든 게 잘 작동하는지 확인
if response.status_code == 200:
print("페이지가 성공적으로 로드되었습니다!")
else:
print("뭔가 문제가 있는 것 같아요. 오류 코드:", response.status_code)
이 프로그램은 URL에 요청을 보내 결과에 따라 성공 또는 오류 메시지를 출력할 거야. 모든 게 잘 되면, HTML 코드가 텍스트 형태로 우리의 손에 들어오게 돼.
오류 코드 확인하기
만약 HTML 파싱을 자동화하려 한다면, 로드되었어야 할 페이지가 로드되지 않는 경우를 자주 마주칠 거야. 그래서 오류 코드를 분석하는 건 여러 페이지를 파싱하는 프로젝트에서 꼭 필요한 부분이지.
웹 사이트 소유자들은 자신의 데이터를 파싱하는 걸 별로 반기지 않아. 첫째, 동시다발적으로 수천 개의 페이지를 파싱하면 사이트에 부담이 되거든. 둘째, 그 데이터는 그들의 자산이고, 그걸로 돈을 벌고 있어. 그래서 CAPCHA, CloudFlare 같은 여러 가지 방법으로 파싱을 방해하기도 해.
사업적으로는 모든 경쟁자를 파싱하면서도 누구도 자신의 데이터를 파싱하지 못하게 하는 게 이상적이지. 말 그대로 냉전과 같아.
BeautifulSoup을 이용한 HTML 파싱
HTML 코드를 얻으면 이제 BeautifulSoup
로 이를 살펴볼 수 있어.
이건 마치 책을 열어 내용을 읽는 것과 같아:
from bs4 import BeautifulSoup
# HTML 코드 내용을 BeautifulSoup에 전달
soup = BeautifulSoup(response.text, 'html.parser')
# 안에 뭐가 있는지 살펴보자
print(soup.prettify())
prettify()
메서드는 HTML 코드를 보기 좋게 포맷해서
살펴볼 수 있게 해 줘. 다음 수업에서는 이 HTML을 더 자세히 들여다보고,
마치 아이가 모래사장에서 놀 듯 재미있게 찾아볼 거야.
그리고 집에 가면 지치고 더럽긴 해도 기분은 정말 좋을 거야 :)
3. 실습: HTML 로드 및 분석
개념을 더 잘 이해하기 위해 실제 연습을 해 보자.
example.com
에서 제목과 설명을 추출하려고 해 보자.
이를 위해 우리가 아는 HTML과 새로 배운 BeautifulSoup을 활용할 거야.
데이터 추출
# 페이지 제목 추출
title = soup.title.string
print("페이지 제목:", title)
# 메인 제목 (h1) 추출
main_heading = soup.h1.string
print("메인 제목:", main_heading)
# 첫 번째 단락 추출
paragraph = soup.find('p').text
print("첫 번째 단락:", paragraph)
이 예제에서 title
, h1
속성과
find()
메서드를 사용해 페이지에서 필요한 정보를 끄집어냈어.
우리는 범죄 현장에서 단서를 모으는 사이버 탐정이 된 거야!
4. 자주 발생하는 오류
웹 스크래핑 작업 중에는 HTTP 요청 처리 오류, 데이터 추출 오류 또는 HTML
파싱 오류 같은 일반적인 문제를 자주 겪게 될 거야.
견고하고 신뢰할 수 있는 스크립트를 작성하려면 인내심과 연습이 필요하지.
예를 들어, 항상
상태 코드 (response.status_code
)를 확인해서
요청이 성공했는지 확실히 해야 해.
find()
및 find_all()
메서드를 잘못 사용하면
HTML 구조를 고려하지 않았을 때 오류가 발생할 수 있어.
파싱을 시작하기 전에 항상 HTML을 분석해야 해.
웹 스크래핑은 데이터 수집부터 상품 가격 모니터링까지 다양한 실용적인 활용 사례가 있어. 면접에서도 이런 프로젝트 코드를 물어볼 수 있어. 실제로, 마케터는 경쟁사의 가격 모니터링을 위해, 개발자는 외부 사이트 통합을 위해 스크래핑을 사용하곤 하지.
뉴스 집계기와 분석 시스템을 위한 정보 처리에서도 웹 스크래핑 지식은 유용할 거야. 다양한 소스에서 데이터를 스스로 수집하는 스크립트를 작성해 반복 작업을 자동화할 수 있어. 계속해서 우리 가상의 애플리케이션을 발전시키고 진정한 웹 마스터로 거듭나 보자!
GO TO FULL VERSION