susinlee 님의 블로그
[TIL] api를 통한 데이터 수집하기 본문
정리 요약
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 |