반응형
1. 서론
웹 스크래핑(Web Scraping)은 웹사이트에서 데이터를 자동으로 수집하는 기술입니다. 이를 통해 원하는 정보를 빠르게 추출하고 분석할 수 있으며, 뉴스 크롤링, 가격 비교, 데이터 수집 등의 다양한 활용이 가능합니다. 이번 글에서는 Python의 BeautifulSoup 라이브러리를 활용하여 웹 스크래핑을 수행하는 방법을 단계별로 설명하겠습니다.
2. 웹 스크래핑 기본 개념
웹 스크래핑은 크게 다음과 같은 단계로 진행됩니다.
- 웹페이지 요청(Request): 웹사이트에서 HTML 데이터를 가져옵니다.
- HTML 파싱(Parsing): BeautifulSoup을 이용하여 HTML 구조를 분석합니다.
- 데이터 추출(Extracting Data): 원하는 정보를 찾아서 가져옵니다.
- 데이터 저장 및 활용: 추출한 데이터를 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 라이브러리를 활용하면 쉽게 웹사이트의 데이터를 가져와 분석할 수 있습니다. 위에서 소개한 방법을 활용하여 뉴스 기사, 상품 정보, 블로그 게시물 등 원하는 데이터를 효율적으로 수집해 보세요!
이제 직접 코드를 실행하며 웹 스크래핑을 경험해 보세요!
반응형