반응형

국토교통부의 API를 통해 아파트 매매 실거래가 구하는 방법을 파이썬으로 구현해보려고 합니다.

 

1. 먼저 오픈API 인 공공데이터 포털(https://www.data.go.kr/)에 접속 후 가입합니다.

 

 

공공데이터 포털

국가에서 보유하고 있는 다양한 데이터를『공공데이터의 제공 및 이용 활성화에 관한 법률(제11956호)』에 따라 개방하여 국민들이 보다 쉽고 용이하게 공유•활용할 수 있도록 공공데이터(Datase

www.data.go.kr

 

2. 국토교통부 실거래가 정보 > '아파트 매매 실거래 상세자료' 를 클릭합니다.

국토교통부_아파트매매 실거래 상세 자료 | 공공데이터포털 (data.go.kr)

 

국토교통부_아파트매매 실거래 상세 자료

부동산 거래신고에 관한 법률에 따라 신고된 주택의 실거래 자료를 제공

www.data.go.kr

 

3. [활용신청] 버튼을 클릭합니다.

4. 아래와 같이 활용목적 선택 및 활용목적 내용을 입력한 후, 라이선스 표시의 이용허락범위 동의 체크 후 [활용신청] 버튼을 클릭합니다.

5. [활용신청] 하면 아래와 같이 표시가 됩니다. '[승인] 국토교통부_아파트매매 실거래 상세 자료' 를 클릭합니다.

 

 

6. 아래와 같은 화면이 나오며, 일반 인증키를 받으실 수 있습니다.

7. API 를 어떻게 활용할지는 6번의 기본정보의 데이터명에 있는 [상세설명] 버튼을 클릭하면 아래와 같이 나옵니다.

8. Pycharm 실행 후 python 파일을 생성하여 하기와 같이 코드를 입력 후 실행합니다.

 

코드 : 

import requests
import bs4

# 인증키 입력
encoding = 'Mh45mSa9bTrEqu9HdNvBuYelMlMfdArTBrivw7ExPdSSiiY0IbsWWkGq%2BJCbNkSkWrIqN59QWdXSAnxn1HWQ4Q%3D%3D'
decoding = 'Mh45mSa9bTrEqu9HdNvBuYelMlMfdArTBrivw7ExPdSSiiY0IbsWWkGq+JCbNkSkWrIqN59QWdXSAnxn1HWQ4Q=='

# 법정동 코드
areacode = 11110  # 종로구

# 조회기간 변수
month = ['01', '02', '03', '04', '05', '06', '07', '08', '09', '10', '11', '12']
year = '2022'

# 총 거래내역
count = []

for each in month:
    year_month = year + each

    # url 입력
    url = 'http://openapi.molit.go.kr/OpenAPI_ToolInstallPackage/service/rest/RTMSOBJSvc/getRTMSDataSvcAptTradeDev'
    params = {'serviceKey': decoding, 'pageNo': '1', 'numOfRows': '10000', 'LAWD_CD': areacode, 'DEAL_YMD': year_month}

    response = requests.get(url, params=params).text
    xmlobj = bs4.BeautifulSoup(response, 'lxml-xml')
    rows = xmlobj.findAll('item')

    i = 0
    count.append(len(rows))  # 해당 기간의 거래내역 개수 저장

    # 거래별 세부 항목 정리
    while i <= len(rows) - 1:
        columns = rows[i].find_all()

        # 세부 항목 추출
        for item in columns:
            if item.name == "아파트":
                complex = item.text
            if item.name == "거래유형":
                type = item.text
            if item.name == "년":
                year = item.text
            if item.name == "월":
                month = item.text
            if item.name == "일":
                day = item.text
            if item.name == "전용면적":
                size = item.text
            if item.name == "층":
                floor = item.text
            if item.name == "거래금액":
                amount = item.text.strip()

        try:
            # 해당 기간 거래 전체 조회
            print(f'{year}년 {month}월 {day}일 | {size}m\u00b2 | {floor}층 | {amount}만원 | {complex} | {type}')

        except NameError:  # 에러
            pass

        i += 1

print(f'총 {sum(count)}건이 거래됐습니다.')

결과값 : 

 

 

 

반응형

+ Recent posts