[부동산 API2] 오픈API를 이용하여 부동산DB 만들기

목차

    2018. 2. 13. 06:30

    이전 글에서 부동산 실거래가 데이터를 가져오기 위한 API가 공공데이터 포탈에서 있는 것을 확인했다. (참조: 공공데이터 활용하여 전월세 실거래가 가져오기)

    오늘은 이 오픈API를 이용하여 부동산 전월세 거래 데이터를 데이터베이스 형태로 PC에 저장하려고 한다. 이전에도 블로글에 비슷한 유형의 작업을 포스팅을 해서 새로 설명할 내용은 없지만,  그래도 처음 보시는 분들도 있을 거라고 생각하고 작성하도록 하겠다. 오픈API를 활용한 작업이 더 궁금하다면 아래 링크를 참조해 보자. (참조: 오픈API로 할 수 있는 것은 어떤 것들이 있을까?)


    전월세_실거래가_글



    공공데이터 포탈에서 제공하는 url에 원하는 파라미터값을 입력해서 보내면, 원하는 데이터값을 xml형태로 리턴해 준다. 그러면 우리는 해당 결과값을 파싱해서 저장을 하면 된다.

    전월세 거래 데이터의 url은 다음과 같다.

    - http://openapi.molit.go.kr:8081/OpenAPI_ToolInstallPackage/service/rest/RTMSOBJSvc/getRTMSDataSvcAptRent 


    여기에 원하는 파라미터 값을 붙이면 된다. 해당 API에서 사용할 수 있는 파라미터 값은 년월, 지역코드, 행의 갯수로 총 3개이다. 차례대로 DEAL_YMD, LAWD_CD, numOfRows이다. 행의 갯수는 생략해도 데이터 수신은 가능했다. 그래서 중구, 2017년 10월 데이터를 가져온다고 했을 때 url은 아래와 같이 사용하면 된다.

    - http://openapi.molit.go.kr:8081/OpenAPI_ToolInstallPackage/service/rest/RTMSOBJSvc/getRTMSDataSvcAptRent?&LAWD_CD=11110&DEAL_YMD=201710&serviceKey=(제공받은 API키) 


    해당 주소로 브라우저를 이용해 접속하면, 아래와 같은 데이터가 나온다.

    회신데이터


    이 데이터를 형식에 맞게 파싱해서 저장하면 되는데, 이 작업은 그 동안 많이 해서 코드를 남겨놓는 것으로 대체하도록 하겠다.


    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    def collect_lent(ym,lawd_cd):
     
        API_KEY = (제공받은 API키)
     
        url="http://openapi.molit.go.kr:8081/OpenAPI_ToolInstallPackage/service/rest/RTMSOBJSvc/getRTMSDataSvcAptRent"
     
        # &numOfRows=1000"+
        url=url+"?&LAWD_CD="+lawd_cd+"&DEAL_YMD="+ym+"&serviceKey="+API_KEY
     
        # webbrowser.open(url)
        resultXML = urlopen(url)
        result = resultXML.read()
        xmlsoup = BeautifulSoup(result, 'lxml-xml')
     
        te=xmlsoup.findAll("item")
     
        sil=pd.DataFrame()
     
        for t in te:
            build_y=t.find("건축년도").text
            year=t.find("년").text
            month=t.find("월").text
            day=t.find("일").text
            dong=t.find("법정동").text
            bo_price=t.find("보증금액").text
            mo_price=t.find("월세금액").text
            apt_nm=t.find("아파트").text
            size=t.find("전용면적").text
     
            try:
                jibun=t.find("지번").text
            except:
                jibun=""
     
            ji_code=t.find("지역코드").text
            floor=t.find("층").text
     
            temp = pd.DataFrame(([[build_y,year,month,day,dong,bo_price,mo_price,apt_nm,size,jibun,ji_code,floor]]), columns=["build_y","year","month","day","dong","bo_price","mo_price","apt_nm","size","jibun","ji_code","floor"])
     
            sil=pd.concat([sil,temp])
     
        sil=sil.reset_index(drop=True)
     
        return sil
        
    cs


    뒤에 for문을 이용해서  기간과 지역코드 값을 바꿔가면서 데이터를 가져오려고 함수 형태로 작성하였다.


    금융데이터_파이썬


    작업을 하다 보면 지역코드 때문에 어려움에 빠지게 된다. 지역코드가 우리가 아는 우편번호도 아니고 행정구역코드라고 해서 별도의 코드값이다. 찾기 좀 어려운 부분이 있어서 url을 남겨 놓았다. 이게 계속 업데이트 되고 있어, 최신 버전을 원하시면 행정안전부에서 검색해 보면 좋을 듯 하다.

    - 지역코드 url: http://www.mois.go.kr/frt/bbs/type001/commonSelectBoardArticle.do?bbsId=BBSMSTR_000000000052&nttId=61552


    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    if __name__ == "__main__":
     
        # 지역코드 가져오기
        code=pd.read_excel("KIKcd_B.20180122.xlsx")
        code_seo=code[(code["시도명"]=="서울특별시"| (code["시도명"]=="경기도")]
        code_seo=code_seo[code_seo["읍면동명"].isnull()==True]
        code_seo = code_seo[code_seo["시군구명"].isnull() == False]
        code_seo["ji_code"= code_seo["법정동코드"].astype(str).str[0:5]
        sil_trade=pd.DataFrame()
     
        ym=list(["201701","201702","201703","201704","201705","201706","201707","201708","201709","201710","201711","201712","201801"])
     
        for m in ym:
            for co in code_seo["ji_code"]:
                temp=collect_lent(m,co)
                sil_trade=pd.concat([sil_trade,temp])
                print(co+", "+str(len(temp))+" is compleded")
            print("*"+str(m)+" is completed")
     
        con = sqlite3.connect("./data/real_trade.db")
        sil_trade.to_sql('lent', con, if_exists='append', index=False)
        con.close()
    cs


    위와 같이 실행하여 서울, 경기 지역의 17년 1월부터 18년 1월까지 전월세 실거래가 데이터를 가져오는데 성공하였다. 가지고 온 데이터는 sqlite를 통해서 데이터베이스 형태로 저장하였다. 수집한 데이터를 가지고 서울, 경기 지역의 전월세 실거래가를 비교해보았다. 자세한 내용은 아래 포스팅을 참조하기 바란다.
    ( 참조: [부동산 API3] 전월세 실거래가 현황(17년1월~18년1월, 서울&경기지역) 분석하기 )


    위에서는 API를 이용해 부동산 데이터를 수집하는 방법을 다루었다. 하지만, 최근에 더 쉽게 부동산 관련 데이터를 수집할 수 있는 방법을 알았다. 파이썬 패키지를 이용하는 방법이고, 자세한 내용은 아래 포스팅 3-2)를 참조하기 바란다.
    ( 참조: 가장 쉬운 아파트 실거래가 조회하고, 데이터 수집하는 방법은?! )


    오픈API를 사용하면 다양한 재미있는 일들을 해 볼 수 있다. 파이썬을 활용한 오픈API 사용이 궁금하다면 아래 글을 참조해보자.
    (참조: 오픈API를 활용한 사례는 어떤 것들이 있을까?)


    이 글 공유하기