본문 바로가기
PYTHON/PYTHON LIB 학습

데이터 크롤링 (1회)

by 쿙이콩 2025. 7. 2.
728x90
반응형

1. 웹의 이해와 데이터 추출의 기본

☑️ 1. 웹의 동작 원리 이해

✔️ HTTP / HTTPS 프로토콜

  • HTTP (Hyper Text Transfer Protocol)
    웹 브라우저(Client) - 웹 서버(Server) 간 데이터 주고 받기에 사용되는 프로토콜(텍스트 기반 통신 규약)
    요청(Request) - 응답(Response) 형태로 구성
  • HTTPS (Hypertext Transfer Protocol Secure)
    HTTP에 보안(SSL/TLS) 강화 버전 = 데이터 암호화 통한 안전 통신 제공 = 로그인/결제 등 민감 데이터 다룰 때 필수

 

✔️ 클라이언트 - 서버 통신

  • 클라리언트 웹 브라우저, 앱 등 웹 서버에 요청을 보내는 주체
  • 서버 웹 페이지, 이미지, 데이터 등을 저장하고 있다가 클라이언트 요청에 응답, 데이터 전송 주체
  • 동작과정 
    1) 클라이언트(브라우저) : 특정 웹 접속 위해 서버에 요청(request) 보냄
    2) 서버 : 해당 요청 처리, 요청된 웹 페이지 데이터 등을 응답(response)으로 - 클라이언트에게 전송
    3) 클라이언트 : 서버로부터 받은 데이터 해석 > 사용자에게 웹 페이지 보여줌

☑️ 2. HTML 과 CSS 기본 구조 이해

✔️ HTML HyperText Markup Language

  • 웹 페이지의 구조와 내용을 정의하는 마크업 언어(데이터를 기술한 언어)
  • 다양한 태그(Tag)로 테스트, 이미지, 링크, 표 등을 표현
    ex) <p></p> = 글씨(Paragraph) / <div></div> = 영역(Division)
  • 모든 웹 페이지는 기본적으로 HTML로 작성됨

✔️ 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 문서와 분리하여 웹 페이지의 유지보수와 일관성을 높이는 데 기여
  • 예시1. 인라인 스타일 = style 속성을 직접 태그에 써서, 해당 요소에만 스타일을 적용하는 방법
    예시2. 외부 스타일 시트 = 별도 CSS 파일(styles.css)에 디자인 규칙을 적어두고, HTML 파일에서 이 CSS 파일을 불러와서 전체 웹 페이지에 적용하는 방식
1. 인라인 스타일
<p style="color: blue; font-size: 16px;">파란색 글씨</p>

2. 외부 스타일 시트
<link rel="stylesheet" href="styles.css">

☑️ 3. 웹 개발자 도구 활용법 (chrome)

✔️ Elements 탭   마우스 오른쪽 클릭 → 검사(Inspect) or Ctrl + Shift + C

  • 웹 페이지의 HTML 구조를 실시간으로 확인하고 수정
  • 특정 요소에 마우스를 올리면 해당 요소의 CSS 스타일이 함께 표시
  • 크롤링 시 데이터를 추출할 태그와 속성을 파악하는 데 가장 많이 사용

✔️ Network 탭  마우스 오른쪽 클릭 → 검사(Inspect) or Ctrl + Shift + C

  • 웹 페이지가 로드될 때 서버와 주고받는 모든 네트워크 요청(Request) 및 응답(Response)을 모니터링
  • 요청의 종류 (GET, POST 등), 상태 코드 (200 OK, 404 Not Found 등), 헤더(Headers), 응답 내용(Response) 등을 확인
  • 특히 동적으로 로드되는 데이터(HTTP, AJAX 요청)를 파악하고 크롤링할 때 매우 중요
  • 활용팁
    - Network 탭을 연 상태에서 웹 페이지를 새로고침하면 모든 요청이 기록
    - XHR
    필터를 통해 AJAX 요청만 따로 볼 수 있음
    - 특정 요청을 클릭하여 상세 정보를 확인하고, Response 탭에서 서버가 보낸 원본 데이터 볼 수 있음

☑️ 4. requests 라이브러리

✔️ 1. 설치

pip install requests

 

✔️ 2. 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자만 출력

 

✔️ 3. requests.get( ) 속성과 메서드

  • response.status_code: HTTP 상태 코드 (예: 200, 404, 500)
  • response.text: 응답 본문을 유니코드 텍스트로 반환 (가장 흔하게 사용)
  • response.content: 응답 본문을 바이트(bytes) 형태로 반환 (이미지, 파일 등)
  • response.encoding: 응답의 문자 인코딩 정보
  • response.url: 요청된 URL
  • response.headers: 응답 헤더 정보 (딕셔너리 형태)

 

✔️ 4. requests.get(url, 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 응답 확인

 

 

✔️ 5. requests.get(url, params = ) 쿼리 파라미터 추가

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])

 

✔️ 6. requests.post(url, data = )  POST 요청 보내기

폼 제출, 데이터 전송 시 사용

import requests

url = "https://httpbin.org/post"
data = {
    "name": "홍길동",
    "email": "hong@example.com"
}

response = requests.post(url, data=data)
print(response.json()) # JSON 응답 확인
728x90
반응형

'PYTHON > PYTHON LIB 학습' 카테고리의 다른 글

Pandas - 1회차(정리)  (1) 2025.07.04
데이터 분석 및 시각화 - Pandas  (4) 2025.06.24
파이썬 전처리&시각화  (2) 2025.06.11