끄적끄적
2025.07.02 데이터 크롤링 세션 1 본문
| 튜터 | 김대영 튜터님 |
| 학습 목표 | 1. 웹의 동작 방식과 주요 구성 요소에 대해 이해합니다. 2. HTML과 CSS의 기본적인 구조 및 역할을 파악합니다. 3. 웹 개발자 도구의 핵심 기능을 활용하여 웹 페이지를 분석합니다. 4. requests 라이브러리의 기본적인 사용법을 익힙니다. |
웹의 이해와 데이터 추출의 기본
1️⃣ 웹의 동작 원리 이해
📌 HTTP/HTTPS 프로토콜
HTTP (HyperText Transfer Protocol):
- 웹 브라우저(Client)와 웹 서버(Server) 간에 데이터를 주고받는 데 사용되는 프로토콜.
- 텍스트 기반의 통신 규약으로, 요청(Request)과 응답(Response) 형태로 이루어진다.
HTTPS (Hypertext Transfer Protocol Secure):
- HTTP에 보안(SSL/TLS)이 강화된 버전.
- 데이터 암호화를 통해 안전한 통신을 제공한다.
- 특히 로그인 정보, 결제 정보 등 민감한 데이터를 다룰 때 필수적이다.
📌 클라이언트-서버 통신
- 클라이언트: 웹 브라우저 (Chrome, Firefox 등), 안드로이드 앱, 아이폰 앱와 같이 웹 서버에 요청을 보내는 주체.
- 서버: 웹 페이지, 이미지, 데이터 등을 저장하고 있다가 클라이언트의 요청에 응답하여 데이터를 전송하는 주체.
동작 과정:
- 클라이언트(브라우저)가 특정 웹사이트에 접속하기 위해 서버에 **요청(Request)**을 보냅니다.
- 서버는 해당 요청을 처리하고, 요청된 웹 페이지 데이터 등을 **응답(Response)**으로 클라이언트에 전송합니다.
- 클라이언트는 서버로부터 받은 데이터를 해석하여 사용자에게 웹 페이지를 보여줍니다.

2️⃣ HTML과 CSS 기본 구조 이해
📌 HTML (HyperText Markup Language)
- 웹 페이지의 구조와 내용을 정의하는 마크업 언어
- 다양한 태그(Tag)를 사용하여 텍스트, 이미지, 링크, 표 등을 표현한다.
- <p></p> ⇒ 글씨 ⇒ ‘P’aragraph
- <div></div> ⇒ 영역 ⇒ ‘Div’ider
- 모든 웹 페이지는 기본적으로 HTML로 작성된다.
기본 구조:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>웹 페이지 제목</title>
</head>
<body>
<h1>메인 제목</h1>
<p>단락 내용</p>
<a href="https://example.com">링크</a>
</body>
</html>
- <!DOCTYPE html>: 문서 유형을 HTML5로 지정한다. (없어도 됨)
- <html>: HTML 문서의 루트 요소(가장 기본)이다.
- <head>: 웹 페이지에 대한 메타 정보 (제목, 문자 인코딩, 외부 파일 연결 등)를 포함한다. 사용자에게 직접 보이지 않는다.
- <body>: 웹 페이지에 실제로 표시될 모든 콘텐츠 (텍스트, 이미지, 링크, 동영상 등)를 포함한다.
📌 CSS (Cascading Style Sheets)
- HTML로 작성된 웹 페이지의 스타일(디자인)을 정의하는 언어
- 글꼴, 색상, 레이아웃, 배경 등 시각적인 요소를 제어한다.
- HTML 문서와 분리하여 웹 페이지의 유지보수와 일관성을 높이는 데 기여한다.
적용 예시 (인라인 스타일):
<p style="color: blue; font-size: 16px;">파란색 글씨</p>
적용 예시 (외부 스타일 시트):
- HTML <head> 섹션에 CSS 파일을 연결한다.
<link rel="stylesheet" href="styles.css">
3️⃣ 웹 개발자 도구 활용법 (Chrome 기준)
웹 개발자 도구는 웹 페이지의 구조를 분석하고 디버깅하는 데 필수적인 도구이다.
📌 Elements 탭
- 웹 페이지의 HTML 구조를 실시간으로 확인하고 수정할 수 있다.
- 특정 요소에 마우스를 올리면 해당 요소의 CSS 스타일이 함께 표시된다.
- 크롤링 시 데이터를 추출할 태그와 속성을 파악하는 데 가장 많이 사용된다.
📌 Network 탭
- 웹 페이지가 로드될 때 서버와 주고받는 모든 네트워크 요청(Request) 및 응답(Response)을 모니터링한다.
- 요청의 종류 (GET, POST 등), 상태 코드 (200 OK, 404 Not Found 등), 헤더(Headers), 응답 내용(Response) 등을 확인할 수 있다.
- 특히 동적으로 로드되는 데이터(HTTP, AJAX 요청)를 파악하고 크롤링할 때 매우 중요하다.
활용 팁:
- Network 탭을 연 상태에서 웹 페이지를 새로고침하면 모든 요청이 기록된다.
- XHR 필터를 통해 AJAX 요청만 따로 볼 수 있다.
- 특정 요청을 클릭하여 상세 정보를 확인하고, Response 탭에서 서버가 보낸 원본 데이터를 볼 수 있다.
4️⃣ requests 라이브러리 기본 사용법
requests는 파이썬에서 HTTP 요청을 보내는 가장 인기 있고 강력한 라이브러리
📌 설치
pip install requests
📌 GET 요청 보내기
웹 페이지의 내용을 가져올 때 주로 사용한다.
import requests
# 웹 페이지 URL 정의
url = "<https://www.naver.com>"
# GET 요청 보내기
response = requests.get(url)
# 응답 상태 코드 확인 (200은 성공)
print(f"상태 코드: {response.status_code}")
# 응답 내용 (HTML 코드) 출력
# response.text는 응답 본문을 텍스트로 반환 (문자 인코딩 고려)
print(response.text[:500]) # 처음 500자만 출력
📌 응답 객체 활용
requests.get() 호출 결과로 반환되는 response 객체는 다양한 속성과 메서드를 제공한다.
- response.status_code: HTTP 상태 코드 (예: 200, 404, 500)
- response.text: 응답 본문을 유니코드 텍스트로 반환 (가장 흔하게 사용)
- response.content: 응답 본문을 바이트(bytes) 형태로 반환 (이미지, 파일 등)
- response.encoding: 응답의 문자 인코딩 정보
- response.url: 요청된 URL
- response.headers: 응답 헤더 정보 (딕셔너리 형태)
📌 요청 헤더 설정 (User-Agent)
일부 웹사이트는 봇 접근을 차단하기 위해 User-Agent를 확인합니다. 웹 크롤링 시 브라우저처럼 보이게 하려면 User-Agent를 설정하는 것이 좋다.
import requests
url = "<https://httpbin.org/headers>" # 요청 헤더를 확인할 수 있는 테스트 URL
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36"
}
response = requests.get(url, headers=headers)
print(response.json()) # JSON 응답 확인
📌 쿼리 파라미터 추가
URL에 ?key=value&key2=value2 형태로 데이터를 전달하는 방식입니다. 검색어 전달 등에 사용된다.
import requests
url = "<https://search.naver.com/search.naver>"
params = {
"query": "파이썬 크롤링",
"where": "web"
}
response = requests.get(url, params=params)
print(f"요청 URL: {response.url}")
print(response.text[:500])
📌 POST 요청 보내기
폼 제출이나 데이터 전송 시 주로 사용된다.
import requests
url = "https://httpbin.org/post"
data = {
"name": "홍길동",
"email": "hong@example.com"
}
response = requests.post(url, data=data)
print(response.json()) # JSON 응답 확인
'[스파르타]내일배움캠프 데이터 분석 트랙 > Session' 카테고리의 다른 글
| 2025.07.04 Pandas 실무 기초 세션 2 (0) | 2025.07.09 |
|---|---|
| 2025.07.03 통계 세션 5 (1) | 2025.07.09 |
| 2025.07.02 Pandas 실무 기초 세션 1 (1) | 2025.07.09 |
| 2025.07.01 머신러닝 세션 2 (4) | 2025.07.09 |
| 2025.07.01 통계 세션 4 (3) | 2025.07.09 |