반응형
1. 이전 강의 리뷰
이전 강의에서는 웹 크롤링의 개념과 활용 사례, 크롤링 환경 설정 및 간단한 웹페이지 크롤링 실습을 다뤘습니다.
- 웹 크롤링 개념: 웹에서 데이터를 자동으로 수집하는 기술
- 크롤링 활용 사례: 뉴스 데이터 분석, 가격 비교, 부동산 정보 수집 등
- 환경 설정: requests, BeautifulSoup, lxml 등의 필수 라이브러리 설치
- 기본 크롤링 실습: requests를 활용하여 웹페이지의 HTML 가져오기 및 BeautifulSoup을 사용한 데이터 추출
이번 강의에서는 이를 바탕으로 더 깊이 있는 크롤링 기술을 배우고 실전 예제를 진행하겠습니다.
2. requests와 BeautifulSoup란?
웹 크롤링에서 가장 많이 사용되는 두 가지 라이브러리는 requests와 BeautifulSoup입니다.
- requests: 웹페이지의 HTML을 가져오는 HTTP 클라이언트 라이브러리
- BeautifulSoup: HTML을 파싱하여 원하는 데이터를 쉽게 추출할 수 있도록 돕는 라이브러리
이 두 라이브러리를 활용하여 웹페이지에서 원하는 정보를 가져오는 방법을 학습해보겠습니다.
3. HTTP 요청 및 응답 이해하기
웹 크롤러는 웹페이지의 데이터를 가져오기 위해 HTTP 요청을 보냅니다. HTTP 요청과 응답을 이해하는 것이 크롤링의 기본입니다.
✅ HTTP 응답 상태 코드
- 200: 요청 성공
- 301/302: 리다이렉트 (다른 URL로 이동됨)
- 403: 접근 금지 (웹사이트에서 크롤러 차단 가능성 있음)
- 404: 페이지를 찾을 수 없음
- 500: 서버 내부 오류
🔹 requests를 활용한 GET 요청 예제
import requests
url = "https://example.com"
response = requests.get(url)
print("응답 상태 코드:", response.status_code) # 200이면 정상
print("응답 데이터:", response.text[:500]) # HTML 데이터 일부 출력
🖥 실행 결과 (예시)
응답 상태 코드: 200
응답 데이터: <!doctype html>\n<html>\n<head><title>Example Domain</title>...</html>
위 결과는 example.com의 HTML을 가져온 것입니다. 상태 코드 200은 정상적인 요청을 의미합니다.
4. HTML 구조 분석하기
웹페이지에서 원하는 데이터를 추출하려면 HTML 구조를 이해해야 합니다.
✅ 기본적인 HTML 예시
<html>
<head>
<title>예제 페이지</title>
</head>
<body>
<h1>웹 크롤링 강좌</h1>
<p class="description">이 페이지는 웹 크롤링 연습을 위한 예제입니다.</p>
</body>
</html>
이제 BeautifulSoup을 활용하여 위와 같은 HTML에서 원하는 정보를 가져오는 방법을 살펴보겠습니다.
반응형
5. BeautifulSoup을 활용한 데이터 추출
🔹 예제: 제목 태그 가져오기
from bs4 import BeautifulSoup
html = """
<html>
<head><title>예제 페이지</title></head>
<body>
<h1>웹 크롤링 강좌</h1>
<p class='description'>이 페이지는 웹 크롤링 연습을 위한 예제입니다.</p>
</body>
</html>
"""
soup = BeautifulSoup(html, "html.parser")
# 제목 태그 가져오기
print("페이지 제목:", soup.title.text)
print("헤더 제목:", soup.h1.text)
print("설명 문구:", soup.find("p", class_="description").text)
🖥 실행 결과
페이지 제목: 예제 페이지
헤더 제목: 웹 크롤링 강좌
설명 문구: 이 페이지는 웹 크롤링 연습을 위한 예제입니다.
6. CSS 선택자를 활용한 데이터 추출
CSS 선택자를 활용하면 더욱 효과적으로 데이터를 추출할 수 있습니다.
🔹 CSS 선택자를 이용한 데이터 추출 예제
html = """
<html>
<body>
<div id="content">
<p class="info">웹 크롤링을 배워보세요!</p>
<p class="info">파이썬을 활용한 데이터 수집</p>
</div>
</body>
</html>
"""
soup = BeautifulSoup(html, "html.parser")
# CSS 선택자로 데이터 추출
info_texts = soup.select("div#content p.info")
for text in info_texts:
print(text.text)
🖥 실행 결과
웹 크롤링을 배워보세요!
파이썬을 활용한 데이터 수집
soup.select("div#content p.info")는 <div id="content"> 내부의 <p class="info"> 요소를 모두 가져옵니다.
7. 실전 예제: 뉴스 기사 제목 가져오기 (robots.txt 확인 포함)
import requests
from bs4 import BeautifulSoup
url = "https://news.ycombinator.com/"
robots_url = "https://news.ycombinator.com/robots.txt"
# robots.txt 확인
robots_response = requests.get(robots_url)
print("[robots.txt 내용]")
print(robots_response.text)
# 뉴스 데이터 크롤링
response = requests.get(url)
soup = BeautifulSoup(response.text, "html.parser")
titles = soup.select(".storylink")
print("[뉴스 기사 제목]")
for idx, title in enumerate(titles[:5], start=1):
print(f"{idx}. {title.text} ({title['href']})")
🖥 실행 결과 (예시)
[robots.txt 내용]
User-agent: *
Disallow:
[뉴스 기사 제목]
1. Python 3.11 Released (https://python.org/...)
2. OpenAI launches new AI model (https://openai.com/...)
...
🎯 추가 미션: 직접 해보기
- soup.select("a")를 활용하여 모든 링크를 가져와 출력해보세요.
- 크롤링한 뉴스 기사를 CSV 파일로 저장하는 기능을 추가해보세요.
🚀 다음 강의 예고
3부: selenium을 이용한 동적 웹페이지 크롤링
- selenium 개요 및 설치
- 웹 드라이버 설정 (Chrome, Firefox)
- selenium을 활용한 버튼 클릭 및 폼 입력 자동화
- WebDriverWait을 이용한 요소 대기
- 동적 웹사이트 크롤링 실습
반응형
'파이썬 > [파이썬을 활용한 웹 크롤링 완벽 가이드]' 카테고리의 다른 글
📌 5. Scrapy 프레임워크를 활용한 크롤링 (2) | 2025.02.12 |
---|---|
📌 4. 크롤링 데이터 정제 및 저장하기 (2) | 2025.02.11 |
📌 3. selenium을 이용한 동적 웹페이지 크롤링 (0) | 2025.02.10 |
📌 1. 웹 크롤링 개요 및 환경 설정 (0) | 2025.02.08 |
댓글