본문 바로가기
카테고리 없음

[파이썬 심화] 웹 크롤링, BeautifulSoup & Requests 활용, 실무 응용

by 개발자를 꿈꾸는 사람들과 함꼐 2025. 4. 5.

웹 크롤링의 기본 개념과 원리

웹 크롤링(Web Crawling)은 인터넷 상의 웹 페이지에서 필요한 데이터를 자동으로 수집하는 기술입니다.
사람이 직접 마우스로 정보를 복사하지 않고, 프로그램이 페이지를 요청하고 필요한 정보만 추출하는 방식입니다.

대표적인 웹 크롤링 활용 사례는 다음과 같습니다:

  • 뉴스 기사나 블로그 제목 수집
  • 쇼핑몰에서 상품명, 가격 정보 추출
  • 댓글, 리뷰, 공공데이터 자동 수집

파이썬에서는 requests 모듈로 웹 페이지의 HTML을 가져오고, BeautifulSoup 모듈로 HTML에서 원하는 부분을 선택해서 추출할 수 있습니다.

필수 모듈 설치

pip install requests
pip install beautifulsoup4

설치 후, 다음 단계부터 본격적인 웹 크롤링 예제를 실습해 보겠습니다.

BeautifulSoup와 Requests의 활용

1. 블로그 검색 결과에서 제목만 추출하기

import requests
from bs4 import BeautifulSoup

query = "파이썬 크롤링"
url = f"https://search.naver.com/search.naver?where=post&query={query}"

headers = {"User-Agent": "Mozilla/5.0"}
response = requests.get(url, headers=headers)

soup = BeautifulSoup(response.text, "html.parser")
titles = soup.select(".sh_blog_title")

for idx, title in enumerate(titles, 1):
    print(f"{idx}. {title['title']}")

해석:

  • requests.get()는 해당 URL의 HTML 소스를 가져옵니다.
  • User-Agent를 추가하면 봇 차단을 우회할 수 있습니다.
  • BeautifulSoup을 통해 HTML을 파싱합니다.
  • .select()는 CSS 선택자로 원하는 HTML 요소를 추출합니다.
  • title['title']은 링크 요소의 title 속성 값, 즉 블로그 제목을 가져옵니다.

2. 반복 페이지에서 여러 개의 결과 수집하기

for page in range(1, 4):  # 1~3페이지
    url = f"https://search.naver.com/search.naver?where=post&query=파이썬&page={page}"
    response = requests.get(url, headers=headers)
    soup = BeautifulSoup(response.text, "html.parser")
    titles = soup.select(".sh_blog_title")

    for title in titles:
        print(title["title"])

해석:
페이지 번호를 URL에 포함시켜 반복 요청하면 더 많은 데이터를 한 번에 수집할 수 있습니다.
페이지를 순회하는 반복문을 활용하면 여러 페이지의 블로그 제목을 연속으로 가져올 수 있습니다.

3. 크롤링한 결과 CSV 파일로 저장하기

import csv

with open("blog_titles.csv", "w", newline="", encoding="utf-8-sig") as f:
    writer = csv.writer(f)
    writer.writerow(["번호", "제목"])

    for idx, title in enumerate(titles, 1):
        writer.writerow([idx, title["title"]])

해석:

  • csv.writer()를 사용해 데이터를 엑셀에서 열 수 있는 CSV 형식으로 저장합니다.
  • utf-8-sig는 한글이 깨지지 않게 도와주는 인코딩입니다.
  • 실제 업무에서 크롤링 데이터를 저장하거나 분석할 때 자주 사용하는 방식입니다.

실무 응용과 크롤링 시 주의할 점

1. 크롤링 대상 HTML 구조 분석

브라우저에서 F12(개발자 도구)를 누르고, 원하는 정보에 마우스를 올린 후 HTML 구조를 확인해야 합니다.
해당 요소의 클래스명이나 태그를 정확히 파악해야 .select().find()를 제대로 쓸 수 있습니다.

2. robots.txt 파일 확인

사이트마다 robots.txt라는 파일을 통해 크롤링 허용/차단 정책을 명시해 둡니다.
https://example.com/robots.txt 주소에 접속해 확인하는 것이 예의이며, 정책을 무시하면 법적 책임이 따를 수 있습니다.

3. 요청 시간 간격 조절

import time

for page in range(1, 4):
    # 요청 코드 생략
    time.sleep(1.5)

해석:
짧은 시간에 과도한 요청을 보내면 서버가 요청을 차단할 수 있습니다.
time.sleep()을 사용해 요청 간 간격을 조절하는 것이 크롤링 예절입니다.

4. 동적 페이지 처리 필요 시 Selenium 사용

JavaScript로 동적으로 데이터가 생성되는 페이지(예: 무한 스크롤)는 requests/BeautifulSoup만으로는 수집이 어렵습니다. 이럴 땐 Selenium이라는 웹 브라우저 자동화 도구를 활용해야 합니다. 아래는 그 외 활용 방법입니다.

  • 키워드별 블로그 제목/요약 수집기
  • 뉴스 헤드라인 모아서 요약
  • 쇼핑몰 가격 비교 프로그램
  • 리뷰 크롤링 → 워드클라우드 만들기