웹 크롤링은 요즘 데이터 기반의 업무에서 빼놓을 수 없는 기술 중 하나입니다. 블로그, 뉴스, 쇼핑몰, 커뮤니티 등 다양한 웹사이트에서 정보를 자동으로 수집할 수 있기 때문에, 마케팅, 분석, 리서치 등 수많은 분야에서 활용되고 있습니다.
특히 Python은 웹 크롤링을 아주 손쉽게 시작할 수 있도록 도와주는 라이브러리들이 많아 초보자들에게도 매우 인기 있는 언어입니다.
이 글에서는 웹 크롤링이란 무엇인지, 그리고 Python을 사용하여 웹에서 정보를 어떻게 수집하는지를 단계별로 소개하겠습니다.
처음 웹 크롤링을 접하는 분들을 위해 비유와 예시, 직관적인 코드 예제와 함께 설명하니 부담 없이 따라와 주세요!
1. 웹 크롤링이란 무엇인가?
1) 웹 크롤링의 개념 이해하기
웹 크롤링은 마치 도서관에서 책장을 훑으며 원하는 책의 정보를 찾아 메모하는 것과 비슷합니다.
사람이 일일이 웹 페이지를 열고, 복사해서 붙여넣는 수고를 하지 않아도 컴퓨터가 자동으로 수많은 웹페이지를 방문하고, 원하는 데이터를 추출해주는 것이죠.
이 과정을 프로그램으로 처리하는 것이 웹 크롤러입니다.
(1) 웹 크롤링과 스크래핑의 차이
- 크롤링(Crawling): 여러 웹페이지를 자동으로 탐색하며 정보를 수집
- 스크래핑(Scraping): 특정 웹페이지에서 원하는 데이터만 골라 추출
🔍 비유하자면 크롤링은 도서관 전체를 둘러보는 행위이고, 스크래핑은 특정 책에서 원하는 문장을 베껴오는 작업입니다.
2. Python 웹 크롤링 준비하기
1) 필요한 라이브러리 설치
Python에서는 다음 라이브러리들이 웹 크롤링에 자주 사용됩니다:
requests
: 웹 페이지의 HTML 문서를 가져오는 역할BeautifulSoup
: 가져온 HTML에서 원하는 요소를 추출pandas
: 데이터를 표 형태로 정리할 때 활용lxml
: HTML 파싱을 빠르게 해주는 파서
pip install requests beautifulsoup4 pandas lxml
2) 크롤링 대상 웹페이지 살펴보기
크롤링을 시작하기 전에는 크롤링할 웹페이지의 구조(HTML)를 파악해야 합니다.
크롬 브라우저에서 F12
를 눌러 개발자 도구를 열고, Elements 탭에서 HTML 요소를 확인할 수 있습니다.
3. Python으로 웹 페이지 크롤링 실습
1) 기본적인 크롤링 코드 예제
예를 들어, 네이버 뉴스 검색 결과에서 뉴스 제목만 수집하는 코드를 작성해보겠습니다.
import requests
from bs4 import BeautifulSoup
# 검색 결과 페이지 URL
url = "https://search.naver.com/search.naver?query=파이썬+웹크롤링&where=news"
# HTML 문서 요청
response = requests.get(url)
soup = BeautifulSoup(response.text, "lxml")
# 뉴스 제목 추출
titles = soup.select("a.news_tit")
for idx, title in enumerate(titles):
print(f"{idx+1}. {title.text}")
✅ 위 코드에서는
requests
로 HTML을 요청하고,BeautifulSoup
으로 HTML 구조를 분석해서 뉴스 제목을 추출했습니다.
2) CSS Selector 이해하기
select()
함수는 CSS 선택자를 사용하여 원하는 요소를 찾습니다.
예를 들어 <a class="news_tit">
태그를 가져오려면 "a.news_tit"
이렇게 표현합니다.
CSS 선택자 기본 문법
tag.class
: 특정 클래스의 태그 선택 (ex.div.title
)#id
: 특정 ID 선택 (ex.#main
)tag[attr=value]
: 특정 속성값 선택 (ex.a[href*=news]
)
4. 예외 처리 및 우아한 크롤링 방법
1) 예외 처리 추가
인터넷 환경은 항상 변동성이 있기 때문에 예외 처리도 중요합니다.
try:
response = requests.get(url)
response.raise_for_status()
except requests.exceptions.RequestException as e:
print("에러 발생:", e)
2) User-Agent 설정
일부 웹사이트는 봇의 접근을 차단합니다. 이때 User-Agent 헤더를 설정하면 정상적으로 접근이 가능합니다.
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64)"
}
response = requests.get(url, headers=headers)
5. 데이터 저장하기
크롤링한 데이터를 CSV 파일로 저장하면 분석이나 가공이 편리합니다.
import pandas as pd
data = []
for title in titles:
data.append([title.text, title['href']])
df = pd.DataFrame(data, columns=['제목', '링크'])
df.to_csv("news_data.csv", index=False, encoding='utf-8-sig')
💡
utf-8-sig
인코딩을 사용하면 한글이 깨지지 않습니다. Excel에서도 바로 열 수 있어요.
6. 크롤링 실전 팁
1) robots.txt 확인하기
웹사이트마다 크롤링 허용 범위가 다르기 때문에, robots.txt를 확인하는 것이 예의입니다.
예시:
https://www.naver.com/robots.txt
2) 너무 빠른 요청은 자제
너무 빠르게 요청을 보내면 서버에 부담을 주고, IP 차단을 당할 수 있습니다.time.sleep()
함수를 이용해 딜레이를 줍시다.
import time
for page in range(1, 6):
url = f"https://example.com/page={page}"
response = requests.get(url)
print(response.status_code)
time.sleep(1) # 1초 쉬기
마무리
Python을 활용한 웹 크롤링은 생각보다 어렵지 않습니다.
필요한 라이브러리를 설치하고, 크롤링할 웹페이지의 구조만 파악할 수 있다면 누구나 손쉽게 원하는 데이터를 자동으로 수집할 수 있습니다.
크롤링은 데이터를 수집하는 수단일 뿐, 그 이후의 데이터 처리 및 분석까지 연계하면 더욱 큰 가치를 창출할 수 있습니다.
이번 글을 통해 웹 크롤링의 기초를 잡았다면, 이제는 다양한 웹사이트에 직접 적용해보며 경험을 쌓아보세요!