데이터 수집 방식

웹에서 데이터를 수집하는 방식은 크게 API와 웹 크롤링, 2가지가 존재한다.

항목API(Application Programming Interface)Web Crawling
데이터 제공공식적으로 제공하는 데이터 인터페이스 사용웹 페이지의 HTML을 직접 파싱
작동 방식서버로 요청 -> JSON 응답 처리HTTP요청 -> HTML 분석 후 데이터 추출
장점신뢰도 높고, 빠르고, 사용이 편리함API 없이도 원하는 데이터 추출 가능
단점사용량 제한, API 제공 범위 제한적느리고, HTML의 구조 변경시 코드 수정 필요
사용공식적으로 API가 제공될 때API가 없거나 추가 데이터가 필요할 때

e.g. 인스타그램의 경우 웹 크롤링을 시도하면 아이피 차단을 해버리기도 하기 때문에 주의해서 해야 한다!

API

API(Application Programming Interface)란?
-응용 프로그램이 서로 데이터를 주고 받는 방법을 제공하는 인터페이스
-특정 데이터 제공자가 정해진 규격으로 데이터를 전달 (JSON 또는 XML. 최근에는 JSON 형식을 주로 사용한다.)

+) 프론트엔드와 백엔드:
프론트엔드(Frontend): 사용자와 웹 브라우저 사이에서의 작업
백엔드(Backend): 데이터 베이스와 웹 서버 사이에서의 작업

-> 이 때, 웹 브라우저와 웹 서버 사이에서 일어나는 request와 response 등의 작업 인터페이스를 API라고 한다.

JSON (JavaScript Object Notation)

-데이터를 표시하는 방법 중 하나로, 데이터를 문자열의 형태로 나타내기 위해 사용
-네트워크를 통해 다른 시스템들이 소통할 때 사용하는 경량의 데이터 교환 방식
-자바스크립트에서 파생되었으나, 현재 다른 프로그래밍 언어에서도 지원하는 데이터 포맷

-> 가독성이 뛰어나 사람과 컴퓨터에게 모두 해석하기 편함
-> JavaScript의 Object를 기반으로 하는 텍스트 형식

-파이썬의 딕셔너리와 유사
-딕셔너리와는 key 이름을 큰 따옴표 ("key-name")으로 감싸는 차이점이 있다.
-문자열, 숫자(정수, 실수), boolean(true, false), 중첩된 객체와 배열 저장이 가능하다.

<JSON 예시>

{
"name" : "Sean",
"age" : 20,
"skills" : ["JavaScript", "JAVA", "Python"],
"family" : {
	"father" : "Jake",
    "mother" : "Sunny"
    },
"height": 120.9,
"isLogin": true
}

=> Client와 Server가 JSON 형식의 데이터를 주고 받는다!

API HTTP 통신

HTTP(Hypertext Transfer Protocol)란?
-인터넷 상에서 데이터를 주고 받기 위한 프로토콜(약속)
-클라이언트는 서버에게 자원을 요청(Request)하고, 서버는 클라이언트에세 요청을 처리해서 응답(Response)
-> API는 주로 HTTP 통신으로 이용해 데이터를 주고 받는다.
-> API는 Rest API, Restful API라고도 불린다.

Rest

Rest(Representational State Transfer)란?
-Roy Fielding이 2000년에 소개한 웹 아키텍쳐 스타일
-클라이언트와 서버간의 경량 통신을 가능하게 하며, 웹 기반 소프트웨어 어플리케이션에서 널리 사용된다.

<Rest 특징>
-Rest는 모든 것(데이터, 기능, 서비스 등 어떠한 형태의 정보든지!)을 리소스(Resource)로 간주
-각 리소스는 고유한 식별자인 URI(Uniform Resource Identifier)를 가지며, 이을 통해 리소스에 접근할 수 있다.
-HTTP 메서드의 활용: HTTP 메서드(GET, POST, PUT, DELETE 등)을 사용하여 리소스를 조작 ->이게 프로토콜(약속)!

-상태를 관리하지 않음(Stateless): Rest 아키텍쳐는 상태를 관리하지 않으며, 각 요청을 독립적으로 처리한다. 또한 서버는 요청에 필요한 모든 정보를 포함하고 있어야 한다.
(e.g. 로그인 상태를 관리하지 않고, 로그인한 상태를 계속 서버에 보내주기)
-캐시 처리 가능(Cacheable): Rest 리소스는 캐싱이 가능하도록 설계되어, 클라이언트나 중개 서버가 캐시를 활용하여 효율적으로 리소스를 관리할 수 있다.
-Client-Server: 클라이언트(사용자 인터페이스, 프론트엔드)와 서버(데이터 스토리지, 백엔드)가 분리되어 있어 각각 독립적으로 발전

GET(조회)

-역할: 서버로부터 리소스를 조회
-URL로 리소스의 정보를 요청
-서버는 요청한 리소스의 정보를 응답으로 전달 -> 서버의 상태나 데이터의 정보를 변경시키지 않음.
-캐싱을 활용하여 자주 요청되는 데이터를 효율적으로 전달

POST(생성)

-역할: 서버에 새로운 리소스를 생성 (e.g. 회원가입)
-URL로 요청 시 새로운 데이터를 서버로 전송
-서버는 요청 데이터를 처리하여 새로운 리소스를 생성하거나 해당 데이터를 저장
+)서버의 상태나 데이터를 변경시키는 메서드임으로 주의해서 사용할 것.

PUT/PATCH(갱신)

-역할: 서버의 자원을 갱신
-PUT: 리소스 전체를 업데이트
-PATCH: 리소스의 일부분을 업데이트
-클라이언트는 수정하고자 하는 리소스의 새 데이터를 서버로 보낸다.
-서버는 이 데이터를 이용하여 리소스를 업데이트하고, 성공 여부를 클라이언트에게 알린다.

DELETE(삭제)

-역할: 리소스를 삭제
-클라이언트가 특정 리소스의 삭제를 요청하면, 서버는 해당 리소스를 삭제하고 결과를 클라이언트에게 알림.
+)서버의 데이터가 삭제되므로 주의해서 사용할 것.

=>이 GET, POST, PUT, PATCH, DELETE를 모두 API 요청(Request) HTTP 메서드라고 한다. 이때 PUT, PATCH, DELETE는 사실상 POST를 세분화한 것이다.
+) 토큰을 받아올 때는 요청을 보내야 정보가 생성되므로 POST방식의 요청을 필요로 한다.

Request (요청)

-요청은 보안 문제로 인해 볼 수 없으나, GET방식은 정보를 조회하는 목적이기 때문에 볼 수 있다.

<요청의 구조>
-URL: 요청 대상의 주소
-HTTP 메서드: 요청의 종류 (GET, POST 등)
-Headers: 요청의 부가 정보 (e.g. 인증 토큰, Content-Type)
-Body: 요청에 포함되는 데이터 (POST, PUT, PATCH에서 사용)

Response (응답)

<응답의 구조>
-HTTP 상태 코드: 요청 성공 또는 실패를 나타냄.
-Headers: 응답의 부가 정보 (e.g. Content-Type, 날짜)
-Body: 요청 결과 데이터 (JSON, XML 등)

requests 모듈

-HTTP 요청을 간단하고 효율적으로 보낼 수 있도록 도와주는 라이브러리
-외부 모듈로 pip install requests로 설치하여 사용 가능하다.

HTTP 응답 코드

번호상태예시
200번대성공200(OK), 201(Created)
300번대리다이렉션301(Moved Permanently)
400번대클라이언트 오류400(Bad Request), 401(Unauthorized), 404(Not Found)
500번대서버 오류500(Internal Server Error)

<requests 모듈 활용 코드 예시>

import requests
import json

url = "https://koreanjson.com/posts"
res = requests.get(url)

if res.status_code == 200: #HTTP 응답코드 200번: OK
    data = res.json()
    for i in data:
        print(f"ID: {i["id"]}, 제목: {i["title"]}")
else:
    print("요청 실패")

with open("data.json", "w", encoding = "utf-8") as file:
    json.dump(data, file, ensure_ascii=False, indent=4)

웹 크롤링과 웹 스크래핑

웹 크롤링(Web Crawling)

-웹 페이지의 HTML 데이터를 직접 가져와 필요한 정보를 직접 추출하는 기술
-웹사이트에서 제공하는 데이터가 API로 제공되지 않을 때 사용
-주로 HTML 문서나 URL 목록과 같은 원시 데이터를 수집
e.g.) 구글 검색 엔진

웹 스크래핑(Web Scraping)

-웹 페이지에서 특정 데이터를 추출하고 가공하는 작업
-특정한 텍스트, 이미지, 표 등 유용한 정보만을 선별하여 수집
e.g.) 상품 가격 목록, 뉴스 기사, 리뷰 등

->웹 크롤링과 웹 스크래핑의 개념은 혼용해서 사용하는 경우가 대다수이며 그 경계가 모호하지만, 개념과 목적이 다르다.
=> 우리가 앞으로 활용하는 것은 웹 스크래핑이다!

0개의 댓글