susinlee 님의 블로그

[TIL] api를 통한 데이터 수집하기 본문

학습/TIL

[TIL] api를 통한 데이터 수집하기

susinlee 2025. 1. 21. 01:23

정리 요약

 

api : 소프트웨어끼리 상호작용하기 위해 사용하는 인터페이스

 

1. api를 통해 데이터를 요청하고 받을 수 있으며, 이는 주로 HTTP 프로토콜을 사용함

→ HTTP 프로토콜 : 웹 브라우저가 서버와 통신하는 규칙

 

2. 대부분의 api는 사용자를 인증하기 위해 api 키를 요구함 

→ 서비스를 제공하는 플랫폼에서 api 키를 발급받아야 함

 

3. api 제공자는 일반적으로 api 문서를 제공하므로 확인할 것

→ 엔드포인트 : 데이터를 요청하는 URL // 파라미터 : 요청 시 필요한 변수들

 

4. 문서를 확인하고 요청

→ 엔드포인트와 HTTP 메서드를 사용하여 데이터 요청

→ 요청에는 헤더와 파라미터가 포함

  • 헤더 : api 키
  • 파라미터: 필터 조건, 데이터 범위 등

5. 응답

→ 서버는 요청에 대한 데이터를 반환. 반환 데이터는 보통 JSON 또는 XML 형식으로 제공

→ 응답 상태 코드로 요청의 성공 여부를 확인

  • 200 OK : 요청 성공
  • 400 Bad Request : 요청 오류
  • 401 Unauthorized : 인증 오류
  • 500 Internal Server Error : 서버 오류

6. 데이터 저장 및 처리

→ 받은 데이터를 로컬에 저장하거나 데이터베이스에 저장한 뒤, 필요 분석 수행

 

 

 

파이썬의 requests, json, xml.etree.ElementTree

import requests

# API 엔드포인트와 키
url = "https://api.example.com/data"
headers = {
    "Authorization": "Bearer YOUR_API_KEY"
}

# GET 요청
params = {
    "date": "2025-01-01",
    "location": "Seoul"
}
response = requests.get(url, headers=headers, params=params)

# 응답 데이터 처리
if response.status_code == 200:
    data = response.json()  # JSON 데이터를 파싱
    print(data)
else:
    print(f"Error: {response.status_code}, {response.text}")

 

 

데이터를 주고받을 때 일반적으로 JSON 또는 XML 형식을 사용함

# JSON : 키-값 쌍 및 배열 구조로 구성
{
  "name": "John Doe",
  "age": 30,
  "isStudent": false,
  "skills": ["Python", "JavaScript", "SQL"]
}

# XML : 태그 기반의 마크업 언어, 데이터의 구조를 정의. 계층적 트리 구조
<person>
    <name>John Doe</name>
    <age>30</age>
    <isStudent>false</isStudent>
    <skills>
        <skill>Python</skill>
        <skill>JavaScript</skill>
        <skill>SQL</skill>
    </skills>
</person>

 

# json → DataFrame
import pandas as pd
import json

# JSON 데이터
json_data = '''
[
    {"name": "Alice", "age": 25, "city": "New York"},
    {"name": "Bob", "age": 30, "city": "Los Angeles"},
    {"name": "Charlie", "age": 35, "city": "Chicago"}
]
'''

# JSON 문자열을 Python 객체로 변환
data = json.loads(json_data)

# DataFrame으로 변환
df = pd.DataFrame(data)

df

 

# XML → DataFrame
import pandas as pd
import xml.etree.ElementTree as ET

xml_data = '''
<people>
    <person>
        <name>Alice</name>
        <age>25</age>
        <city>New York</city>
    </person>
    <person>
        <name>Bob</name>
        <age>30</age>
        <city>Los Angeles</city>
    </person>
    <person>
        <name>Charlie</name>
        <age>35</age>
        <city>Chicago</city>
    </person>
</people>
'''

# XML 문자열 파싱
root = ET.fromstring(xml_data)

# XML 데이터를 딕셔너리로 변환
data = []
for person in root.findall("person"):
    entry = {
        "name": person.find("name").text,
        "age": int(person.find("age").text),
        "city": person.find("city").text
    }
    data.append(entry)

# DataFrame으로 변환
df = pd.DataFrame(data)

df

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

[TIL] 두 모집단의 비교  (0) 2025.01.21
[250114] TIL  (0) 2025.01.14
[250108] TIL  (0) 2025.01.08
[250105] WIL  (0) 2025.01.05
[240103] TIL  (0) 2025.01.03