Python 웹 크롤링 초보자를 위한 입문 가이드

반응형

웹 크롤링은 요즘 데이터 기반의 업무에서 빼놓을 수 없는 기술 중 하나입니다. 블로그, 뉴스, 쇼핑몰, 커뮤니티 등 다양한 웹사이트에서 정보를 자동으로 수집할 수 있기 때문에, 마케팅, 분석, 리서치 등 수많은 분야에서 활용되고 있습니다.
특히 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을 활용한 웹 크롤링은 생각보다 어렵지 않습니다.
필요한 라이브러리를 설치하고, 크롤링할 웹페이지의 구조만 파악할 수 있다면 누구나 손쉽게 원하는 데이터를 자동으로 수집할 수 있습니다.

크롤링은 데이터를 수집하는 수단일 뿐, 그 이후의 데이터 처리 및 분석까지 연계하면 더욱 큰 가치를 창출할 수 있습니다.
이번 글을 통해 웹 크롤링의 기초를 잡았다면, 이제는 다양한 웹사이트에 직접 적용해보며 경험을 쌓아보세요!

 

반응형