본문 바로가기
Programming/Python_Web

Python Open API(XML) 활용하기 - 부동산 매매가격

by Wilkyway 2021. 11. 8.
반응형
import pandas as pd
import requests
from bs4 import BeautifulSoup

key = '내 서비스키'
# url='http://openapi.molit.go.kr:8081/OpenAPI_ToolInstallPackage/service/rest/RTMSOBJSvc/getRTMSDataSvcAptTrade?LAWD_CD=11110&DEAL_YMD=201512&serviceKey='+key
url='http://openapi.molit.go.kr:8081/OpenAPI_ToolInstallPackage/service/rest/RTMSOBJSvc/getRTMSDataSvcAptTrade?serviceKey='+key

rowList=[]  # 전체 행을 저장할 변수
nameList=[] # 열(칼럼) 이름을 저장할 변수
item_content=[] # 각 행별 칼럼값들을 저장할 임시공간

# 지역코드는 11000(서울)~39020(서귀포)
city_list=["26440","26410","26710","26290","26170","26260","26230","26320","26530","26380","26140","26500","26470","26200","26110","26350"]
for city in city_list:
    params ={'LAWD_CD' : city, 'DEAL_YMD' : '202110' } 
    response = requests.get(url, params=params).text #인코딩이 필요할 경우 .encode('utf-8')
    
    soup = BeautifulSoup(response, "lxml-xml")

    item_list = soup.find_all('item')   # 전체 contents를 담은 변수
    
    rowsLen = len(item_list)    # 전체 행 수
    for i in range(rowsLen):
        columns = item_list[i].find_all() # 1번째 행(row)의 모든 요소값들을 칼럼으로 한다.
        columnsLen = len(columns)    # 1번째 행(row)의 요소길이를 열(column) 길이로 한다.

        for j in range(0, columnsLen):
            if i == 0 and city=="26440":    # 첫번째 행 데이터 수집시 컬럼 값 저장
                nameList.append(columns[j].name)    # name 값만 추출한다

            eachColumn = columns[j].text    # 각 행(i)의 각 열(j)의 텍스트만 추출한다.
            item_content.append(eachColumn)   # 각 칼럼값을 append하여 1개 행을 만든다.
        rowList.append(item_content)    # 전체 리스트 공간에 개별 행을 append한다.
        item_content=[] # 다음 row의 값을 입력받기 위해 비워준다.

df = pd.DataFrame(rowList, columns=nameList)
df.head(50)

반응형

댓글