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

Python으로 웹 스크래핑하는 방법 (BeautifulSoup 활용)

by 미래로 나가자 2025. 3. 4.
반응형

1. 서론

웹 스크래핑(Web Scraping)은 웹사이트에서 데이터를 자동으로 수집하는 기술입니다. 이를 통해 원하는 정보를 빠르게 추출하고 분석할 수 있으며, 뉴스 크롤링, 가격 비교, 데이터 수집 등의 다양한 활용이 가능합니다. 이번 글에서는 Python의 BeautifulSoup 라이브러리를 활용하여 웹 스크래핑을 수행하는 방법을 단계별로 설명하겠습니다.


2. 웹 스크래핑 기본 개념

웹 스크래핑은 크게 다음과 같은 단계로 진행됩니다.

  1. 웹페이지 요청(Request): 웹사이트에서 HTML 데이터를 가져옵니다.
  2. HTML 파싱(Parsing): BeautifulSoup을 이용하여 HTML 구조를 분석합니다.
  3. 데이터 추출(Extracting Data): 원하는 정보를 찾아서 가져옵니다.
  4. 데이터 저장 및 활용: 추출한 데이터를 CSV, JSON 등 다양한 형식으로 저장할 수 있습니다.

주의: 웹사이트의 robots.txt 파일을 확인하여 웹 스크래핑이 허용되는지 반드시 확인해야 합니다.


3. 웹 스크래핑을 위한 환경 설정

3.1 라이브러리 설치

BeautifulSoup을 활용하기 위해 필요한 라이브러리를 설치합니다.

pip install requests beautifulsoup4

3.2 기본적인 웹페이지 요청 코드

import requests
from bs4 import BeautifulSoup

# 웹페이지 요청
url = "https://example.com"
response = requests.get(url)

# HTML 파싱
soup = BeautifulSoup(response.text, "html.parser")

# 웹페이지 제목 출력
print(soup.title.text)

위 코드를 실행하면 웹페이지의 제목을 가져올 수 있습니다.


4. 웹페이지에서 특정 데이터 추출하기

4.1 특정 태그 가져오기

# 모든 <a> 태그(링크) 가져오기
links = soup.find_all("a")
for link in links:
    print(link.get("href"))

4.2 클래스 선택자를 사용하여 특정 요소 찾기

# 특정 클래스의 내용 가져오기
content = soup.find("div", class_="content")
print(content.text)

4.3 CSS 선택자로 데이터 추출

# CSS 선택자로 특정 요소 가져오기
headers = soup.select("h2.title")
for header in headers:
    print(header.text)

5. 실전 예제: 뉴스 기사 제목 가져오기

url = "https://news.ycombinator.com/"
response = requests.get(url)
soup = BeautifulSoup(response.text, "html.parser")

# 기사 제목 가져오기
titles = soup.select(".titleline a")
for idx, title in enumerate(titles, 1):
    print(f"{idx}. {title.text} - {title.get('href')}")

위 코드를 실행하면 Hacker News에서 기사 제목과 해당 링크를 가져올 수 있습니다.


6. 데이터 저장 및 활용

웹 스크래핑을 통해 가져온 데이터를 CSV 또는 JSON 파일로 저장할 수 있습니다.

6.1 CSV 파일로 저장

import csv

with open("news.csv", "w", newline="", encoding="utf-8") as file:
    writer = csv.writer(file)
    writer.writerow(["번호", "제목", "링크"])
    for idx, title in enumerate(titles, 1):
        writer.writerow([idx, title.text, title.get("href")])

6.2 JSON 파일로 저장

import json

data = [{"title": title.text, "link": title.get("href")} for title in titles]

with open("news.json", "w", encoding="utf-8") as file:
    json.dump(data, file, ensure_ascii=False, indent=4)

7. 웹 스크래핑 시 주의할 점

  • 웹사이트의 robots.txt 파일을 확인하고 정책을 준수하세요.
  • 과도한 요청을 보내지 않도록 time.sleep()을 사용하여 서버 부하를 줄이세요.
  • API가 제공되는 경우 공식 API를 사용하는 것이 더 적절할 수 있습니다.

8. 결론

Python의 BeautifulSoup 라이브러리를 활용하면 쉽게 웹사이트의 데이터를 가져와 분석할 수 있습니다. 위에서 소개한 방법을 활용하여 뉴스 기사, 상품 정보, 블로그 게시물 등 원하는 데이터를 효율적으로 수집해 보세요!

이제 직접 코드를 실행하며 웹 스크래핑을 경험해 보세요!

반응형