파이썬 웹크롤링 실전 예제: 5가지 사이트 크롤링 & 데이터 분석 완벽 가이드
웹에서 필요한 데이터를 자동으로 수집하는 웹 크롤링은 현대 데이터 분석의 필수 기술입니다. 하지만 이론만으로는 부족합니다. 실제로 다양한 웹사이트를 크롤링하고 데이터를 분석하는 경험이 필요하죠. 이 글에서는 파이썬을 활용하여 실제 웹사이트를 크롤링하고 데이터를 분석하는 5가지 실전 예제를 통해 웹 크롤링의 전 과정을 완벽하게 이해하도록 도와드리겠습니다. requests, BeautifulSoup, Selenium 등 필수 라이브러리 사용법부터 데이터 정제, 분석까지 자세히 다룹니다.
1. requests와 BeautifulSoup을 활용한 간단한 웹 크롤링
가장 기본적인 웹 크롤링은 requests 라이브러리를 사용하여 웹 페이지의 HTML 소스 코드를 가져오고, BeautifulSoup 라이브러리를 사용하여 원하는 데이터를 추출하는 것입니다. 예를 들어, 특정 뉴스 사이트의 헤드라인을 가져오는 방법을 살펴봅시다. requests는 웹 페이지를 요청하는 역할을 하고, BeautifulSoup는 HTML 구조를 파싱하여 원하는 정보를 추출하는 역할을 합니다.
다음은 간단한 예제 코드입니다:
import requestsfrom bs4 import BeautifulSoupurl = "https://www.example.com"response = requests.get(url)soup = BeautifulSoup(response.content, "html.parser")headlines = soup.select(".headline") # 클래스가 headline인 태그 선택for headline in headlines: print(headline.text)이 코드는 example.com에서 'headline' 클래스를 가진 모든 태그의 텍스트 내용(뉴스 헤드라인)을 출력합니다. 실제 사이트의 HTML 구조에 따라 선택자 (`.headline`)를 변경해야 합니다. 크롤링 대상 사이트의 robots.txt를 확인하고 robots.txt 규칙을 준수해야 함을 잊지 마세요.
2. Selenium을 이용한 동적 웹 페이지 크롤링
JavaScript를 사용하여 동적으로 콘텐츠를 로드하는 웹사이트는 BeautifulSoup만으로는 크롤링하기 어렵습니다. 이럴 때는 Selenium을 사용해야 합니다. Selenium은 웹 브라우저를 자동화하여 동적으로 로드되는 콘텐츠까지 크롤링할 수 있게 해줍니다. 예를 들어, 무한 스크롤 웹페이지의 데이터를 수집하는 경우 Selenium이 유용합니다.
Selenium을 사용한 예제 코드는 다음과 같습니다 (Chrome WebDriver 설치 필요):
from selenium import webdriverfrom selenium.webdriver.common.by import Byfrom selenium.webdriver.support.ui import WebDriverWaitfrom selenium.webdriver.support import expected_conditions as ECdriver = webdriver.Chrome()driver.get("https://www.example.com")# 무한 스크롤 페이지의 경우, 스크롤을 내려 더 많은 데이터를 로드해야 합니다. 이 부분은 웹사이트 구조에 따라 다릅니다. # ... (스크롤 다운 로직 추가)elements = WebDriverWait(driver, 10).until(EC.presence_of_all_elements_located((By.CLASS_NAME, "item"))) # 클래스가 'item'인 모든 요소를 기다립니다.for element in elements: print(element.text)driver.quit()3. API를 활용한 데이터 수집
많은 웹사이트는 공개적으로 API를 제공합니다. API를 사용하면 웹 크롤링보다 훨씬 효율적이고 안정적으로 데이터를 수집할 수 있습니다. API는 일반적으로 JSON 또는 XML 형식의 데이터를 반환하며, 파이썬의 `requests` 라이브러리를 사용하여 쉽게 접근할 수 있습니다. 예를 들어, 특정 영화 정보 사이트의 API를 이용하여 영화 제목과 평점을 가져올 수 있습니다.
API를 사용하는 방법은 API 문서를 참조해야 합니다. 일반적인 사용법은 다음과 같습니다:
import requestsurl = "https://api.example.com/movies"response = requests.get(url)data = response.json()for movie in data: print(movie["title"], movie["rating"])4. 데이터 정제 및 분석
크롤링한 데이터는 원하는 형태로 정제하고 분석해야 합니다. 데이터 정제 과정에는 불필요한 문자 제거, 데이터 형 변환, 중복 데이터 제거 등이 포함됩니다. 데이터 분석에는 Pandas, NumPy, Matplotlib, Seaborn 등의 라이브러리를 사용할 수 있습니다. 예를 들어, 크롤링한 뉴스 헤드라인의 긍정/부정 감정 분석을 수행하거나, 특정 키워드의 빈도를 분석할 수 있습니다.
Pandas를 사용한 데이터 분석 예제:
import pandas as pddf = pd.DataFrame({'headline': headlines, 'sentiment': sentiments}) # headlines와 sentiments는 크롤링 및 감정 분석 결과print(df.head()) # 데이터프레임 상위 5개 행 출력print(df['sentiment'].value_counts()) # 감정별 빈도 출력5. 크롤링 에러 처리 및 예외 처리
웹 크롤링 과정에서 네트워크 오류, 웹사이트 구조 변경 등 예상치 못한 에러가 발생할 수 있습니다. 이러한 에러를 효과적으로 처리하기 위해 `try-except` 블록을 사용하여 예외를 처리하고, 크롤링을 중단하지 않고 계속 진행하도록 해야 합니다. 또한, 사이트 서버에 과도한 부하를 주지 않도록 적절한 시간 간격을 두고 크롤링하는 것이 중요합니다.
에러 처리 예제:
try: response = requests.get(url, timeout=5) # timeout 설정 soup = BeautifulSoup(response.content, "html.parser")except requests.exceptions.RequestException as e: print(f"Error: {e}")결론적으로, 파이썬을 이용한 웹 크롤링은 다양한 라이브러리와 기술을 활용하여 실제 데이터를 수집하고 분석하는 강력한 도구입니다. 이 글에서 소개된 실전 예제들을 통해 웹 크롤링의 기본 원리를 이해하고, 실제 웹사이트를 크롤링하여 데이터 분석을 수행하는 능력을 키울 수 있습니다. 항상 윤리적인 측면을 고려하고, robots.txt를 준수하며 크롤링을 진행해야 합니다. 더 나아가, 여러분의 아이디어를 바탕으로 더욱 다양한 웹사이트를 크롤링하고, 의미있는 데이터 분석을 통해 가치있는 인사이트를 얻을 수 있기를 바랍니다.