본문 바로가기
파이썬/[파이썬을 활용한 웹 크롤링 완벽 가이드]

📌 2. requests와 BeautifulSoup을 활용한 기초 크롤링

by 배불뚝 아저씨 2025. 2. 9.
반응형

1. 이전 강의 리뷰

이전 강의에서는 웹 크롤링의 개념과 활용 사례, 크롤링 환경 설정 및 간단한 웹페이지 크롤링 실습을 다뤘습니다.

  • 웹 크롤링 개념: 웹에서 데이터를 자동으로 수집하는 기술
  • 크롤링 활용 사례: 뉴스 데이터 분석, 가격 비교, 부동산 정보 수집 등
  • 환경 설정: requests, BeautifulSoup, lxml 등의 필수 라이브러리 설치
  • 기본 크롤링 실습: requests를 활용하여 웹페이지의 HTML 가져오기 및 BeautifulSoup을 사용한 데이터 추출

이번 강의에서는 이를 바탕으로 더 깊이 있는 크롤링 기술을 배우고 실전 예제를 진행하겠습니다.


2. requests와 BeautifulSoup란?

웹 크롤링에서 가장 많이 사용되는 두 가지 라이브러리는 requests와 BeautifulSoup입니다.

  • requests: 웹페이지의 HTML을 가져오는 HTTP 클라이언트 라이브러리
  • BeautifulSoup: HTML을 파싱하여 원하는 데이터를 쉽게 추출할 수 있도록 돕는 라이브러리

이 두 라이브러리를 활용하여 웹페이지에서 원하는 정보를 가져오는 방법을 학습해보겠습니다.

3. HTTP 요청 및 응답 이해하기

웹 크롤러는 웹페이지의 데이터를 가져오기 위해 HTTP 요청을 보냅니다. HTTP 요청과 응답을 이해하는 것이 크롤링의 기본입니다.

✅ HTTP 응답 상태 코드

  • 200: 요청 성공
  • 301/302: 리다이렉트 (다른 URL로 이동됨)
  • 403: 접근 금지 (웹사이트에서 크롤러 차단 가능성 있음)
  • 404: 페이지를 찾을 수 없음
  • 500: 서버 내부 오류

🔹 requests를 활용한 GET 요청 예제

import requests

url = "https://example.com"
response = requests.get(url)

print("응답 상태 코드:", response.status_code)  # 200이면 정상
print("응답 데이터:", response.text[:500])  # HTML 데이터 일부 출력

🖥 실행 결과 (예시)

응답 상태 코드: 200
응답 데이터: <!doctype html>\n<html>\n<head><title>Example Domain</title>...</html>

위 결과는 example.com의 HTML을 가져온 것입니다. 상태 코드 200은 정상적인 요청을 의미합니다.

4. HTML 구조 분석하기

웹페이지에서 원하는 데이터를 추출하려면 HTML 구조를 이해해야 합니다.

✅ 기본적인 HTML 예시

<html>
<head>
    <title>예제 페이지</title>
</head>
<body>
    <h1>웹 크롤링 강좌</h1>
    <p class="description">이 페이지는 웹 크롤링 연습을 위한 예제입니다.</p>
</body>
</html>

이제 BeautifulSoup을 활용하여 위와 같은 HTML에서 원하는 정보를 가져오는 방법을 살펴보겠습니다.

반응형

5. BeautifulSoup을 활용한 데이터 추출

🔹 예제: 제목 태그 가져오기

from bs4 import BeautifulSoup

html = """
<html>
<head><title>예제 페이지</title></head>
<body>
<h1>웹 크롤링 강좌</h1>
<p class='description'>이 페이지는 웹 크롤링 연습을 위한 예제입니다.</p>
</body>
</html>
"""

soup = BeautifulSoup(html, "html.parser")

# 제목 태그 가져오기
print("페이지 제목:", soup.title.text)
print("헤더 제목:", soup.h1.text)
print("설명 문구:", soup.find("p", class_="description").text)

🖥 실행 결과

페이지 제목: 예제 페이지
헤더 제목: 웹 크롤링 강좌
설명 문구: 이 페이지는 웹 크롤링 연습을 위한 예제입니다.

6. CSS 선택자를 활용한 데이터 추출

CSS 선택자를 활용하면 더욱 효과적으로 데이터를 추출할 수 있습니다.

🔹 CSS 선택자를 이용한 데이터 추출 예제

html = """
<html>
<body>
    <div id="content">
        <p class="info">웹 크롤링을 배워보세요!</p>
        <p class="info">파이썬을 활용한 데이터 수집</p>
    </div>
</body>
</html>
"""

soup = BeautifulSoup(html, "html.parser")

# CSS 선택자로 데이터 추출
info_texts = soup.select("div#content p.info")
for text in info_texts:
    print(text.text)

🖥 실행 결과

웹 크롤링을 배워보세요!
파이썬을 활용한 데이터 수집

soup.select("div#content p.info")는 <div id="content"> 내부의 <p class="info"> 요소를 모두 가져옵니다.

7. 실전 예제: 뉴스 기사 제목 가져오기 (robots.txt 확인 포함)

import requests
from bs4 import BeautifulSoup

url = "https://news.ycombinator.com/"
robots_url = "https://news.ycombinator.com/robots.txt"

# robots.txt 확인
robots_response = requests.get(robots_url)
print("[robots.txt 내용]")
print(robots_response.text)

# 뉴스 데이터 크롤링
response = requests.get(url)
soup = BeautifulSoup(response.text, "html.parser")
titles = soup.select(".storylink")

print("[뉴스 기사 제목]")
for idx, title in enumerate(titles[:5], start=1):
    print(f"{idx}. {title.text} ({title['href']})")

🖥 실행 결과 (예시)

[robots.txt 내용]
User-agent: *
Disallow: 

[뉴스 기사 제목]
1. Python 3.11 Released (https://python.org/...)
2. OpenAI launches new AI model (https://openai.com/...)
...

🎯 추가 미션: 직접 해보기

  1. soup.select("a")를 활용하여 모든 링크를 가져와 출력해보세요.
  2. 크롤링한 뉴스 기사를 CSV 파일로 저장하는 기능을 추가해보세요.

🚀 다음 강의 예고

3부: selenium을 이용한 동적 웹페이지 크롤링

  • selenium 개요 및 설치
  • 웹 드라이버 설정 (Chrome, Firefox)
  • selenium을 활용한 버튼 클릭 및 폼 입력 자동화
  • WebDriverWait을 이용한 요소 대기
  • 동적 웹사이트 크롤링 실습
반응형

댓글