엔지니어

OPENAPI로 국토부 실거래가 조회할 때 python으로 정규식 사용해서 파싱하기 (20180130)

Nj 2018. 1. 30. 11:25

url 정보를 세팅하고 이에 대해서 request 요청하면 응답 정보를 주는데

http://openapi.molit.go.kr:8081/OpenAPI_ToolInstallPackage/service/rest/RTMSOBJSvc/getRTMSDataSvcAptTrade?LAWD_CD=11440&DEAL_YMD=201801&serviceKey=###SERVICE_KEY###



얼마전에 수정이 있었는지
응답되는 정보가 변경되었습니다.

    req = urllib.request.Request(request_url)
    try:
        res = urllib.request.urlopen(req)
    except UnicodeEncodeError:
        print('[OpenAPI] UnicodeEncodeError')
        return


    data = res.read().decode('utf-8')
    soup = BeautifulSoup(data, 'html.parser')
    if (soup.resultcode.string != '00'):
        print('[OpenAPI] ',  soup.resultmsg.string)
        return

    items = soup.findAll('item')
    print(items)


가져온 정보를 보니 주석과 <, > 정보들이 섞여 있었습니다.

<item>&lt;거래금액&gt;    83,000<!--거래금액-->&lt;
건축년도&gt;2005<!--건축년도-->&lt;년&gt;2018<!--년-->&lt;
법정동&gt; 상암동<!--법정동-->&lt;아파트&gt;상암월드컵파크6단지<!--아파트-->&lt;
월&gt;1<!--월-->&lt;일&gt;11~20<!--일-->&lt;전용면적&gt;104.32<!--전용면적-->&lt;
지번&gt;1689<!--지번-->&lt;지역코드&gt;11440<!--지역코드-->&lt;층&gt;6<!--층--></item>


기존 코드를 수정해서 text 정보만 가져왔습니다.

item = item.text

HTML 태그들이 없어졌습니다.

<거래금액>    83,000<건축년도>2005<년>2018<법정동> 상암동<아파트>상암월드컵파크6단지<월>1<일>11~20<전용면적>104.32<지번>1689<지역코드>11440<층>6


이걸 다시 파싱하려니 정규표현식을 사용해야 했습니다.
결과만 보면 간단합니다.

split_item = re.split('<.*?>', item)


이렇게 하고나니 List형으로 잘 분리합니다.

['', '    83,000', '2005', '2018', ' 상암동', '상암월드컵파크6단지',
'1', '11~20', '104.32', '1689', '11440', '6']


반응형

'엔지니어' 카테고리의 다른 글

[MS Word 2016] 자체 번역기능 사용하기  (10) 2018.02.13
LDAP 설치 실패 (Fedora 24)  (12) 2018.02.07
Windows OS에서 용지당 4페이지 인쇄하기  (16) 2018.01.29
Lua (루아)  (453) 2018.01.05
Python3로 naver 카페에 글쓰기  (18) 2017.12.27