Python/Crawling

[Python 실습 준비] 공공 데이터 오픈API 활용하기(1) 불러오기 및 저장하기

CocoJamjam 2023. 5. 18. 12:06
728x90
반응형

참고

 

이전글 [Python 실습 준비] 오픈API 활용하기(1) 오픈 API 요청키 생성

 

목차

1. Python 환경에서 불러오기

2. XML

3. JSON

4. DataFrame 변환

반응형

1. Python에서 불러오기

# 라이브러리 가져오기

import lxml
import requests
from bs4 import BeautifulSoup
import pandas as pd 
import time 
import math

service_key = '인증키 입력하기'  # 인증키
url = f'http://openapi.seoul.go.kr:8088/{service_key}/xml/tbLnOpendataRtmsV/1/5/' # 인증키 포함 주소

2. XML

# XML 생성하기

req = requests.get(url)
req.content

soup = BeautifulSoup(req.content, "lxml") # XML 생성
# 데이터 가공
# xml 형태를 pandas dataframe으로 만들기
years            = soup.find_all('acc_year')         # 접수년월
sgg_cds          = soup.find_all('sgg_cd')           # 자치구코드
sgg_nms          = soup.find_all('sgg_nm')           # 자치구명
bjdong_cds       = soup.find_all('bjdong_cd')        # 법정동코드
bjdong_nms       = soup.find_all('bjdong_nm')        # 법정동명
land_gbns        = soup.find_all('land_gbn')         # 지번구분
land_gbn_nms     = soup.find_all('land_gbn_nm')      # 지번구분명
land_gbn_nms     = soup.find_all('land_gbn_nm')      # 지번구분명
bonbeons         = soup.find_all('bonbeon')          # 본번
bubeons          = soup.find_all('bubeon')           # 부번
bldg_nms         = soup.find_all('bldg_nm')          # 건물명
deal_ymds        = soup.find_all('deal_ymd')         # 계약일
obj_amts         = soup.find_all('obj_amt')          # 물건금액(만원)
bldg_areas       = soup.find_all('bldg_area')        # 건물면적(㎡)
tot_areas        = soup.find_all('tot_area')         # 토지면적(㎡)
floors           = soup.find_all('floor')            # 층
right_gbns       = soup.find_all('right_gbn')        # 권리구분
cntl_ymds        = soup.find_all('cntl_ymd')         # 취소일
build_years      = soup.find_all('build_years')      # 건축년도
house_types      = soup.find_all('house_type')       # 건물용도
req_gbn          = soup.find_all('req_gbn')          # 신고구분
rdealer_lawdnms  = soup.find_all('rdealer_lawdnm')   # 신고한 개업공인중개사 시군구명

# 반복문 활용
year_list           = []
sgg_cd_list         = []
bldg_nm_list        = []
obj_amt_list        = []
house_type_list     = []
rdealer_lawdnm_list = []

for year, sgg_cd, bldg_nm, obj_amt, house_type, rdealer_lawdnm in zip(years, sgg_cds, bldg_nms, obj_amts, house_types, rdealer_lawdnms):
  year_list.append(year.get_text())
  sgg_cd_list.append(sgg_cd.get_text())
  bldg_nm_list.append(bldg_nm.get_text())
  obj_amt_list.append(obj_amt.get_text())
  house_type_list.append(house_type.get_text())
  rdealer_lawdnm_list.append(rdealer_lawdnm.get_text())

df = pd.DataFrame({
    "acc_year": year_list, 
    "sgg_cd": sgg_cd_list, 
    "bldg_nm" : bldg_nm_list,
    "obj_amt": obj_amt_list,
    "house_type" : house_type_list,
    "rdealer_lawdnm": rdealer_lawdnm_list
})

728x90

3. JSON

# JSON 형태로 바꾸기
req = requests.get(url)
content = req.json()

3. DataFrame

# JSON을 데이터프레임으로 전환
row = content['tbLnOpendataRtmsV']['row']
df = pd.DataFrame(row)

 

 

 

# 참고

https://dschloe.github.io/python/2023/01/seoul_real_estate_01/

 

728x90
반응형