웹 크롤링이란 무엇인가?
파이썬으로 간단한 웹 데이터를 가져오는 방법을 배워봅니다.
인터넷에는 뉴스, 상품 정보, 주식 데이터, 날씨, 게시글 등 매우 많은 정보가 존재합니다.
이러한 정보를 사람이 웹사이트에 하나씩 접속해서 복사하려면 많은 시간과 노력이 필요합니다.
웹 크롤링(Web Crawling)은 프로그램이 웹사이트에 자동으로 접속하여 웹페이지의 정보를 수집하는 기술입니다.
사람이 웹 브라우저를 열고 사이트에 접속하여 내용을 확인하는 일을 프로그램이 대신 수행하도록 만드는 것이라고 생각하면 됩니다.
파이썬 프로그램이 특정 웹 주소(URL)에 요청을 보냅니다.
서버로부터 HTML과 같은 웹페이지 데이터를 전달받습니다.
가져온 HTML에서 제목, 가격, 링크, 글 내용 등 원하는 데이터를 찾아냅니다.
수집한 정보를 CSV, Excel, 데이터베이스 등에 저장하여 분석하거나 다른 프로그램에서 활용할 수 있습니다.
웹 크롤링을 공부하다 보면 웹 스크래핑(Web Scraping)이라는 용어도 자주 만나게 됩니다.
두 용어는 실제로 비슷한 의미로 사용되기도 하지만, 개념적으로는 약간의 차이가 있습니다.
| 구분 | 웹 크롤링 | 웹 스크래핑 |
|---|---|---|
| 목적 | 여러 웹페이지를 탐색하며 정보를 수집 | 특정 페이지에서 필요한 정보를 추출 |
| 예 | 사이트의 여러 게시글 주소 수집 | 게시글에서 제목과 작성자 추출 |
| 특징 | 웹페이지 탐색에 초점 | 데이터 추출에 초점 |
처음 공부할 때는 두 개념을 너무 엄격하게 구분할 필요는 없습니다.
일반적으로 파이썬을 이용하여 웹사이트에 접속하고 필요한 정보를 자동으로 가져오는 작업 전체를 웹 크롤링이라고 부르는 경우가 많습니다.
우리가 웹 브라우저에서 사이트를 보는 과정과 웹 크롤링 프로그램의 동작 과정은 기본적으로 비슷합니다.
웹페이지는 기본적으로 HTML(HyperText Markup Language)이라는 문서 구조로 만들어집니다.
예를 들어 다음과 같은 HTML이 있다고 가정해 보겠습니다.
<div class="product">
<h2>파이썬 입문서</h2>
<p class="price">25,000원</p>
</div>
크롤링 프로그램은 이 HTML을 분석하여 파이썬 입문서라는 상품명이나 25,000원이라는 가격 정보를 찾아낼 수 있습니다.
파이썬에서는 웹사이트에 요청을 보내기 위해 requests라는 라이브러리를 많이 사용합니다.
VS Code의 터미널이나 명령 프롬프트에서 다음 명령을 실행합니다.
pip install requests
크롤링 연습을 위해 만들어진 웹사이트에 접속해 보겠습니다.
import requests url = "https://quotes.toscrape.com/" response = requests.get(url, timeout=10) print(response.status_code)
웹 서버의 응답 상태 코드가 200이면 일반적으로 웹페이지 요청이 정상적으로 처리되었다는 의미입니다.
서버에서 받은 HTML은 response.text를 이용하여 확인할 수 있습니다.
import requests url = "https://quotes.toscrape.com/" response = requests.get(url, timeout=10) response.raise_for_status() print(response.text)
실행하면 웹페이지를 구성하는 HTML 코드가 화면에 출력됩니다.
requests를 사용하면 HTML 전체를 가져올 수 있지만, 우리가 필요한 것은 보통 HTML 전체가 아니라 특정 제목, 가격, 링크, 게시글 내용 등입니다.
이런 데이터를 쉽게 찾을 수 있도록 도와주는 라이브러리가 BeautifulSoup입니다.
pip install beautifulsoup4
import requests
from bs4 import BeautifulSoup
url = "https://quotes.toscrape.com/"
response = requests.get(url, timeout=10)
response.raise_for_status()
soup = BeautifulSoup(response.text, "html.parser")
quote = soup.select_one(".text")
print(quote.get_text(strip=True))
select()를 사용하면 조건에 맞는 여러 요소를 한꺼번에 찾을 수 있습니다.
import requests
from bs4 import BeautifulSoup
url = "https://quotes.toscrape.com/"
response = requests.get(url, timeout=10)
response.raise_for_status()
soup = BeautifulSoup(response.text, "html.parser")
quotes = soup.select(".text")
for quote in quotes:
print(quote.get_text(strip=True))
문장 2
문장 3
...
requests는 웹페이지를 가져오는 역할, BeautifulSoup은 가져온 HTML에서 원하는 부분을 찾는 역할을 한다고 이해하면 쉽습니다.
웹 크롤링은 반복적으로 웹 정보를 확인하고 정리해야 하는 다양한 업무에 활용할 수 있습니다.
여러 뉴스 페이지에서 제목이나 기사 링크를 수집하여 관심 있는 정보를 한곳에 정리할 수 있습니다.
허용된 범위 안에서 상품명, 가격, 재고 등의 정보를 자동으로 정리하는 프로그램을 만들 수 있습니다.
웹에서 공개된 데이터를 수집한 뒤 Python의 pandas 등을 이용해 통계와 분석에 활용할 수 있습니다.
사람이 매일 웹사이트에 접속하여 확인하던 작업을 프로그램으로 자동화할 수 있습니다.
연구나 학습 목적으로 공개된 웹 데이터를 수집하고 필요한 형태로 정리할 때 활용할 수 있습니다.
파이썬으로 웹페이지를 가져올 수 있다고 해서 모든 웹사이트의 정보를 마음대로 수집해도 된다는 의미는 아닙니다.
- 사이트의 이용약관과 정책을 확인합니다.
- robots.txt 등 사이트의 크롤링 관련 정책을 확인합니다.
- 로그인이 필요한 개인정보나 비공개 정보를 무단으로 수집하지 않습니다.
- 저작권이 있는 콘텐츠를 무단으로 복제하거나 배포하지 않습니다.
- 짧은 시간에 지나치게 많은 요청을 보내지 않습니다.
- 가능하다면 사이트에서 제공하는 공식 API를 우선 이용합니다.
반복문으로 수백 개의 페이지를 크롤링하면서 요청을 쉬지 않고 계속 보내면 상대 서버에 부담을 줄 수 있습니다.
학습 단계에서는 필요에 따라 요청 사이에 일정한 간격을 두는 방법을 사용할 수 있습니다.
import time
import requests
urls = [
"https://example.com/page1",
"https://example.com/page2",
"https://example.com/page3"
]
for url in urls:
response = requests.get(url, timeout=10)
print(response.status_code)
time.sleep(1)
프로그램 실행을 약 1초 동안 멈추는 코드입니다.
다만 적절한 요청 간격은 웹사이트의 정책과 상황에 따라 다르므로 대상 사이트의 규칙을 먼저 확인해야 합니다.
지금까지 배운 내용을 하나의 프로그램으로 정리해 보겠습니다.
아래 프로그램은 크롤링 연습 사이트에서 문장과 작성자를 함께 가져오는 예제입니다.
import requests
from bs4 import BeautifulSoup
url = "https://quotes.toscrape.com/"
response = requests.get(url, timeout=10)
response.raise_for_status()
soup = BeautifulSoup(response.text, "html.parser")
items = soup.select(".quote")
for item in items:
text = item.select_one(".text").get_text(strip=True)
author = item.select_one(".author").get_text(strip=True)
print("문장 :", text)
print("작성자 :", author)
print("-" * 50)
작성자 : Albert Einstein
--------------------------------------------------
문장 : “우리가 선택하는 것이 우리를 만든다...”
작성자 : J.K. Rowling
--------------------------------------------------
처음에는 전체 코드를 외우는 것보다 웹페이지 요청 → HTML 분석 → 원하는 요소 찾기라는 흐름을 이해하는 것이 중요합니다.
코드를 직접 입력하고 실행해 본 뒤 선택자나 출력 방법을 조금씩 변경해 보세요.
- 웹 크롤링은 프로그램을 이용해 웹사이트의 정보를 자동으로 수집하는 기술이다.
- 파이썬의 requests 라이브러리로 웹페이지를 요청할 수 있다.
- BeautifulSoup을 이용하면 HTML에서 원하는 데이터를 찾을 수 있다.
- 일반적인 과정은 URL 요청 → HTML 수신 → 분석 → 데이터 추출 순서이다.
- 뉴스, 상품 정보, 데이터 분석, 업무 자동화 등 다양한 분야에 활용할 수 있다.
- 크롤링 전에는 대상 사이트의 이용약관과 정책을 반드시 확인해야 한다.
- 처음에는 코드를 외우기보다 직접 실행하면서 전체 흐름을 이해하는 것이 중요하다.