[파이썬] 웹 스크래핑과 트렌드 정보 추출

원하는 정보를 얻기 위해 여러 웹 페이지를 돌아다니고 일일히 정보를 수집하는 것은 어려운 일입니다. 이러한 문제를 해결하기 위해 웹 스크래핑(Web Scraping) 기술이 등장했습니다. 웹 스크래핑은 웹 페이지의 구조를 분석하여 원하는 정보를 추출하는 프로세스를 의미합니다.

파이썬은 웹 스크래핑에 매우 유용한 도구입니다. 파이썬의 BeautifulSoup, Selenium 등의 라이브러리를 활용하면 웹 페이지의 HTML 문서를 파싱하고, 필요한 데이터를 추출할 수 있습니다.

웹 스크래핑 기초

웹 스크래핑을 시작하기 전에, 기초적인 개념을 이해해야 합니다. 웹 페이지는 HTML(HyperText Markup Language)로 작성되어 있으며 고유한 구조를 가지고 있습니다. 따라서 웹 스크래핑의 첫 번째 단계는 HTML 문서를 분석하여 필요한 정보를 추출할 요소를 찾는 것입니다.

HTML에서 데이터를 추출하기 위해서는 다음과 같은 단계를 따를 수 있습니다:

  1. 웹 페이지의 HTML 코드를 가져옵니다.
  2. BeautifulSoup과 같은 파이썬 라이브러리를 사용하여 HTML 코드를 파싱합니다.
  3. 필요한 정보가 있는 HTML 요소를 찾고, 원하는 데이터를 추출합니다.
import requests
from bs4 import BeautifulSoup

# 웹 페이지의 HTML 코드를 가져오기
url = "https://example.com"
response = requests.get(url)
html = response.content

# BeautifulSoup을 사용하여 HTML 코드 파싱하기
soup = BeautifulSoup(html, "html.parser")

# 필요한 정보가 있는 HTML 요소 찾기
title = soup.find("h1").text
description = soup.find("p").text

# 추출한 데이터 출력하기
print("Title:", title)
print("Description:", description)

동적 웹 페이지 스크래핑

일부 웹 페이지는 동적으로 생성되며, 보통 JavaScript를 사용하여 데이터를 동적으로 로드합니다. 이러한 경우, 단순히 HTML 코드를 파싱하는 것으로는 원하는 데이터를 얻을 수 없습니다.

이런 경우에는 Selenium과 같은 도구를 사용하여 웹 브라우저를 자동화하고, JavaScript를 실행하여 웹 페이지의 동적인 부분을 처리할 수 있습니다.

from selenium import webdriver
from selenium.webdriver.common.by import By

# 웹 드라이버 초기화
driver = webdriver.Chrome("chromedriver.exe")

# 웹 페이지 열기
url = "https://example.com"
driver.get(url)

# 동적인 데이터를 로드하기 위해 대기
driver.implicitly_wait(10)

# 필요한 정보가 있는 요소 찾기
title = driver.find_element(By.CSS_SELECTOR, "h1").text
description = driver.find_element(By.CSS_SELECTOR, "p").text

# 추출한 데이터 출력하기
print("Title:", title)
print("Description:", description)

# 웹 드라이버 종료
driver.quit()

트렌드 정보 추출 예제

마지막으로, 실제로 웹 스크래핑을 활용하여 트렌드 정보를 추출하는 예제를 살펴보겠습니다. 예를 들어, 네이버 실시간 검색어 순위를 스크래핑하여 트렌드 정보를 추출할 수 있습니다.

import requests
from bs4 import BeautifulSoup

# 네이버 실시간 검색어 순위 페이지 URL
url = "https://www.naver.com/"

# 웹 페이지의 HTML 코드를 가져오기
response = requests.get(url)
html = response.content

# BeautifulSoup을 사용하여 HTML 코드 파싱하기
soup = BeautifulSoup(html, "html.parser")

# 실시간 검색어 목록 가져오기
rankings = soup.find_all("span", {"class": "ah_k"})

# 추출한 데이터 출력하기
print("네이버 실시간 검색어 순위")
for rank, keyword in enumerate(rankings, start=1):
    print(f"{rank}. {keyword.text}")

이 예제 코드를 실행하면 네이버의 실시간 검색어 순위가 출력됩니다.

웹 스크래핑은 많은 데이터를 수집하고 분석하는 데 매우 유용한 도구입니다. 하지만 웹 사이트의 이용 약관을 준수하고, 각 사이트의 robots.txt 파일을 확인하여 법적인 이슈나 불편을 피할 수 있도록 주의해야 합니다.