인증키 신청(생략) 및 URL 확인
라이브러리 호출
import requests
import pprint
import json
import pandas as pd
from dotenv import load_dotenv
import os
API 데이터 요청(JSON)
# .env 파일 로드
load_dotenv()
# 환경 변수에서 API 키 가져오기
SEOUL_API = os.getenv('SEOUL_API')
# API 요청 URL 설정
# URL 중 XML -> JSON으로 변경
base_url = "http://openapi.seoul.go.kr:8088"
endpoint = f"{base_url}/{SEOUL_API}/json/trdarNcmCnsmp/1/1000/20241"
try:
response = requests.get(endpoint)
if response.status_code == 200:
data = response.json()
df = pd.DataFrame(data['trdarNcmCnsmp']['row']) # json file 형식을 dataframe 으로 받아주기
print(df)
else:
print(f"Error: {response.status_code}, {response.text}")
except Exception as e:
print(f'An error occurred: {e}')
- 환경 변수 로드
from dotenv import load_dotenv
import os
SEOUL_API = os.getenv('SEOUL_API') # API 키 가져오기
•`dotenv` 라이브러리를 사용하여 `.env` 파일에 저장된 환경 변수를 로드합니다.
•`.env` 파일에는 민감한 정보(예: API 키)를 저장하며, 코드에서 직접 키를 하드코딩하지 않도록 합니다.
•`os.getenv()`를 사용하여 `.env` 파일에서 `SEOUL_API`라는 키 이름으로 저장된 값을 가져옵니다.
•이 값은 서울시 열린데이터광장의 인증키(API Key)입니다.
- API 요청 URL 설정
base_url = "http://openapi.seoul.go.kr:8088"
endpoint = f"{base_url}/{SEOUL_API}/json/trdarNcmCnsmp/1/5/"
•`base_url`은 서울시 열린데이터광장의 기본 URL입니다.
•`endpoint`는 API 호출을 위한 완전한 URL로, 인증키와 요청 형식(`json`) 및 데이터 범위(`/1/1000/`)를 포함합니다.
•`/1/1000/`는 첫 번째부터 1000 번째(최대) 데이터까지를 요청한다는 의미입니다.
- API 요청 보내기
response = requests.get(endpoint)
•`requests.get()` 메서드를 사용하여 API에 HTTP GET 요청을 보냅니다.
•`endpoint`는 호출할 API의 URL입니다.
- 응답 처리
try:
response = requests.get(endpoint)
if response.status_code == 200:
data = response.json()
df = pd.DataFrame(data['trdarNcmCnsmp']['row']) # json file 형식을 dataframe 으로 받아주기
print(df)
else:
print(f"Error: {response.status_code}, {response.text}")
except Exception as e:
print(f'An error occurred: {e}')
•응답 상태 코드가 `200`(성공)일 경우:
•`response.json()`을 사용하여 JSON 형식의 응답 데이터를 Python 딕셔너리로 변환합니다.
•`data'trdarNcmCnsmp''row'`: JSON 응답에서 필요한 데이터가 포함된 부분을 추출합니다.
•`pd.DataFrame()`: 추출한 데이터를 Pandas DataFrame으로 변환하여 출력합니다.
•상태 코드가 `200`이 아닌 경우:
•오류 메시지와 상태 코드를 출력합니다.
• 네트워크 문제, 잘못된 URL, 또는 기타 예외 상황에서 발생하는 오류를 처리합니다.
• 예외가 발생하면 오류 메시지를 출력합니다.
- 데이터 확인
- json file 의 key 값 확인 (각 딕셔너리 값으로 이뤄져있음)
data['trdarNcmCnsmp'].keys()
>>> dict_keys(['list_total_count', 'RESULT', 'row'])
- json 파일의 row 데이터 로드
data['trdarNcmCnsmp']['row']
[{'STDR_YYQU_CD': '20231',
'TRDAR_SE_CD': 'A',
'TRDAR_SE_CD_NM': '골목상권',
'TRDAR_CD': '3110005',
'TRDAR_CD_NM': '세검정',
'MT_AVRG_INCOME_AMT': 3768541.0,
'INCOME_SCTN_CD': '08',
'EXPNDTR_TOTAMT': 884701599.0,
'FDSTFFS_EXPNDTR_TOTAMT': 221446948.0,
'CLTHS_FTWR_EXPNDTR_TOTAMT': 109882417.0,
'LVSPL_EXPNDTR_TOTAMT': 64738346.0,
'MCP_EXPNDTR_TOTAMT': 111988892.0,
'TRNSPORT_EXPNDTR_TOTAMT': 149822911.0,
'LSR_EXPNDTR_TOTAMT': 37478670.0,
'CLTUR_EXPNDTR_TOTAMT': 25606895.0,
'EDC_EXPNDTR_TOTAMT': 126544371.0,
'PLESR_EXPNDTR_TOTAMT': 37192149.0},
{'STDR_YYQU_CD': '20231',
'TRDAR_SE_CD': 'A',
'TRDAR_SE_CD_NM': '골목상권',
'TRDAR_CD': '3110006',
'TRDAR_CD_NM': '부암동주민센터',
'MT_AVRG_INCOME_AMT': 3963935.0,
'INCOME_SCTN_CD': '08',
'EXPNDTR_TOTAMT': 267177363.0,
...
'[업무 지식] > Crawling' 카테고리의 다른 글
[네이버 뉴스] '이커머스' 검색 타이틀 크롤링 (0) | 2025.01.06 |
---|---|
[ETL] ETL(Extract, Transform, Load) 프로세스 스케줄링 (1) | 2025.01.03 |
[NAVER API] 쇼핑인사이트 (0) | 2025.01.03 |
[Selenium] CGV review Crawling (0) | 2025.01.03 |
[ETL] Weather, MySQL 클래스를 객체화 (0) | 2025.01.02 |