목적

- https://www.data.go.kr/ 에서 제공하는 분양권 데이터를 요청시마다 실시간으로 수신

- '국토교통부_아파트매매 실거래 상세 자료' 에 해당한느 API

 

 

1. 라이브러리 Import

# 1-1. 데이터 가져오기
import requests
import datetime
import json
import xmltodict
import pandas as pd 
from pandas import json_normalize
from sqlalchemy import create_engine
import pymysql
import pandas as pd
import numpy as np
import time
import datetime
import pytz
from datetime import datetime

 

 

2. API의 url 과 발급받은 service key 정의

url ="http://openapi.molit.go.kr/OpenAPI_ToolInstallPackage/service/rest/RTMSOBJSvc/getRTMSDataSvcSilvTrade?"
service_key = "Data.go.kr에서 신청해서 받은Key"

 

3. 입수일자와 시각을 알기위한 변수정의

- 프로그램 수행시 현재일자, 현재시각을 가지고옴

- base_dt 는 현재 수행되는 기준의 년월을 가지고옴 ex) 2023-02-06 수행시 2023-02 

- base_dt로 수행월에 발생한 데이터를 가지고옴

#  기준일자, 기준시각 추가
now = datetime.now(pytz.timezone('Asia/Seoul'))
nowDate = now.strftime('%Y%m%d')
nowTime = now.strftime('%H%M')

base_dt = nowDate[:6]

 

 

4. 행정동 Code를 df1에 미리 셋업해놓음

 

 

 

5. 크롤링 Main 부분

- XML형태이므로 각각 구조에 따라 파싱

- 현재까지 크롤링 기준으로 예외사항에 대해 각각 예외처리 하였으나, 추가로 발견시에는 코멘트 요망

for lawd_cd in df1['LAWD_CD']:
    payload = "LAWD_CD=" + lawd_cd + "&" + \
              "DEAL_YMD=" + base_dt + "&" + \
              "serviceKey=" + service_key + "&" 

    response = requests.get(url + payload) 

    res_json = xmltodict.parse(response.text) # 문자열을 XML을 JSON 형식으로 변환합니다.
    
    # 건수없으면 Skip 처리함.
    if(res_json['response']['body']['totalCount']!='0'):
        jsonString = json.dumps(res_json['response']['body']['items']['item'], ensure_ascii=False)      # 변환된 JSON 형식을 Dictionary 문자열로 변환합니다.
    else:
        print(lawd_cd,'건수없음')
        continue
        
        
    jsonObj = json.loads(jsonString) 
    if type(jsonObj) == list:
        df = pd.DataFrame.from_dict(jsonObj)
    else:
        #dict 반환후 전치시켜야 컬럼 읽기가능.
        df = pd.DataFrame.from_dict(jsonObj,orient='index').T
    
    if firstyn == 'Y':
        df2 = pd.DataFrame(index=range(0,0), columns=df.columns)
        firstyn = 'N'
        
    df2 = df2.append(df,ignore_index=True)
    time.sleep(1)
    print(type(jsonObj), lawd_cd)
    i=i+1

 

6. 분양권 실거래가 출력

반응형

+ Recent posts