이번 글은 파이썬 입문자 눈높이에 맞게 웹 스크래핑을 수행하는 방법에 대해 설명하겠습니다. 웹 스크래핑은 웹사이트에서 데이터를 자동으로 수집하고 분석하는 기술로, 수작업으로 데이터를 수집하는 번거로움을 줄이고 데이터를 효율적으로 추출할 수 있도록 돕습니다.
웹 스크래핑이란
웹 스크래핑(Web Scraping)은 웹사이트의 데이터를 추출하여 분석하거나 저장하는 기술입니다. 이를 통해 수작업으로 일일이 데이터를 수집하지 않고, 자동으로 데이터를 모을 수 있습니다.
설치 파이썬으로 웹 스크래핑을 하려면 몇 가지 라이브러리를 설치해야 합니다. 주로 사용하는 라이브러리는 `requests`와 `BeautifulSoup`입니다.
pip install requests
pip install beautifulsoup4
기본적인 웹 스크래핑 과정
- 웹 스크래핑의 기본 과정은 다음과 같습니다
- 웹 페이지 요청(Request)
- 웹 페이지 데이터 가져오기(Response)
- HTML 파싱(Parsing)
- 데이터 추출(Extraction)
웹 스크래핑 예제
뉴스 헤드라인 추출 여기서는 특정 뉴스 웹사이트에서 헤드라인을 추출하는 간단한 예제를 통해 웹 스크래핑을 설명하겠습니다.
1) 웹 페이지 요청 및 HTML 가져오기
import requests
url = 'https://news.ycombinator.com/'
response = requests.get(url)
# 응답이 성공적인지 확인
if response.status_code == 200:
html = response.text
else:
print('Failed to retrieve the webpage')
2) HTML 파싱 및 데이터 추출
- `BeautifulSoup` 설치 방법
pip install beautifulsoup4
- `BeautifulSoup` 라이브러리는 HTML/XML 파일에서 데이터를 파싱(구문 분석)하는 데 사용됩니다.
import requests
from bs4 import BeautifulSoup
# 타겟 URL
url = "https://www.example.com"
# requests를 사용하여 웹 페이지 가져오기
response = requests.get(url)
# BeautifulSoup 객체 생성
soup = BeautifulSoup(response.content, "html.parser")
# 원하는 데이터 추출
title = soup.find("h1").text
print(title)
- `requests.get(url)`을 통해 웹 페이지의 HTML 코드를 가져옵니다.
- `BeautifulSoup` 객체를 만들어 HTML 코드를 파싱합니다.
- `find("h1")`을 사용하여 `h1` 태그를 찾고, `.text`로 태그 내 텍스트를 추출합니다.
다양한 추출 방법
1) 특정 태그 찾기
# <a> 태그 모두 찾기
links = soup.find_all("a")
# 첫 번째 <a> 태그 찾기
first_link = soup.find("a")
2) 속성으로 찾기
# id가 "logo"인 요소 찾기
logo = soup.find(id="logo")
# class가 "article"인 모든 요소 찾기
articles = soup.find_all(class_="article")
3) CSS 셀렉터로 찾기
# div 태그 중 class가 "content"인 요소 찾기
content = soup.select_one("div.content")
# class가 "article"인 모든 요소 찾기
articles = soup.select(".article")
4) 데이터 정제하기 스크래핑한 데이터는 추가 정제 작업이 필요할 수 있습니다.
# 공백 제거
text = text.strip()
# 특수문자 제거
import re
cleaned_text = re.sub(r'[?|$|.|!|,|)|(]', r'', text)
실제 예시 코드
import requests
from bs4 import BeautifulSoup
# 타겟 URL
url = "https://movie.naver.com/movie/sdb/rank/rmovie.nhn"
# requests를 사용하여 웹 페이지 가져오기
response = requests.get(url)
# BeautifulSoup 객체 생성
soup = BeautifulSoup(response.content, "html.parser")
# 영화 랭킹 데이터 추출
movies = soup.select(".tit3 > a")
# 결과 출력
for movie in movies:
title = movie.text
link = movie["href"]
print(f"영화 제목: {title}")
print(f"영화 링크: https://movie.naver.com{link}")
print("-" * 30)
위 코드는 네이버 영화 랭킹 페이지에서 영화 제목과 링크를 추출합니다. select(".tit3 > a")
는 CSS 선택자를 사용하여 'tit3' 클래스 내부의 'a' 태그를 선택합니다. 이 'a' 태그들이 영화 제목과 링크를 가지고 있습니다.
그 다음 for
반복문을 사용하여 선택된 각 'a' 태그에 대해 영화 제목과 링크를 추출합니다. 영화 제목은 movie.text
로 가져오고, 링크는 movie["href"]
를 통해 'href' 속성 값을 얻습니다. 링크 앞에 "https://movie.naver.com"
을 붙여서 완전한 URL을 만듭니다.
마지막으로 print
함수를 사용하여 추출한 영화 제목과 링크를 출력합니다. 가독성을 위해 -
문자로 각 영화 정보를 구분했습니다.
이 코드를 실행하면 네이버 영화 랭킹에 있는 영화들의 제목과 링크가 출력됩니다. 웹 페이지의 HTML 구조를 잘 파악하고 적절한 CSS 선택자를 사용하는 것이 스크래핑에 핵심적입니다."
웹 스크래핑 윤리와 법적 문제
웹 스크래핑을 할 때는 사이트의 `robots.txt` 파일을 확인하고, 사이트의 서비스 약관을 준수해야 합니다. 또한, 너무 빈번하게 요청을 보내는 것은 서버에 부담을 줄 수 있으므로 주의해야 합니다.
이 가이드북에서는 파이썬을 사용한 웹 스크래핑의 기본 개념과 간단한 예제를 다루었습니다. 웹 스크래핑을 통해 다양한 데이터를 자동으로 수집하고 분석할 수 있습니다.
'프로그래밍 언어 > Python' 카테고리의 다른 글
메타클래스와 데코레이터로 배우는 파이썬 고급 프로그래밍 - 고급 Python #2 (0) | 2024.12.20 |
---|---|
파이썬 함수형 프로그래밍과 람다 표현식 고계 함수와 실무 예제 - 고급 Python #1 (0) | 2024.12.17 |
파이썬 에러 및 예외 처리 완벽 가이드: 초보자를 위한 핵심 개념과 실전 예시 - Python 기초 #14 (0) | 2024.05.25 |
파이썬 데코레이터 가이드: 함수 래핑, 로깅, 캐싱 및 타임아웃 활용법 - Python 기초 #13 (0) | 2024.05.24 |
Python 상속 코드 재사용성 극대화를 위한 객체 지향 프로그래밍 가이드 - Python 기초 #12 (0) | 2024.05.23 |