본문 바로가기

파이썬/크롤링

(파이썬) 국토교통부 실거래가 자료수집 크롤링

국토교통부_실거래가_자료수집

국토교통부 실거래가 자료수집 크롤링

통계청 경인지방통계청 경제조사과에서는 건설경기동향조사를 실시하고 있다.

건설경기동향조사는 매월 건설 동향을 파악하기 위해 건설의 수주액과 기성액을 조사하고 있다.

우리나라 GDP에서 투자 기준으로 봤을 때 건설투자는 15%를 차지하고 있으며 건설 종사자수는 200만명에 이른다.

건설경기동향과 부동산은 밀접한 관계를 맺고 있을 것으로 추측해 볼 수 있겠다.

그래서 경제조사과에서는 부동산 정보를 업무에 활용하고자 매월 실거래가 자료를 수집하여 건설경기동향조사의 보조 지표로 활용하고 있다.

여기에서는 서울 지역 아파트의 실거래가 내역을 시범적으로 수집해보고자 한다.

국토교통부 실거래가 자료 수집 방법을 요즘 인기 있는 언어인 파이썬으로 작성하였습니다.

업무나 공부에 관심 있는 분들은 코드를 목적에 맞게 변형하여 활용하시길 바랍니다.

(주의) 이 코드를 활용하기 위해서는 파이썬과 jupyter notebook이 설치되어 있어야 합니다.

Anaconda를 다운 받으시길 바랍니다. (파이썬과 jupyter notebook이 포함되어 있음)

퍼가시는 분은 출처만 달아주시면 자유롭게 변형 가공하셔도 상관 없습니다

궁금하신 점 있으면 언제든 문의해주시길 바라겠습니다.

mirykim@korea.kr

또는 댓글

In [39]:
from IPython.core.display import display, HTML

display(HTML("<style> .container{width:90% !important;}</style>"))
In [23]:
import pandas as pd            # 데이터 조작을 위한 Pandas 로드
from bs4 import BeautifulSoup  # API 요청을 통한 XML을 파싱하고 정리하기 위한 Beautifulsoup 로드
import requests                # API를 요청하기위한 requests 모듈 로드
import glob                    # 수집된 csv 파일을 다루기 위한 모듈
import os                      # 저장된 csv 파일을 다루기 위한 모듈
import time
In [24]:
## 서울 구별로 자료 수집을 위한 행정구 번호 정리
## 행정구 번호는 5자리임 -> 11110, 11130, ...., 11740
law_list = ["11"+str(i)+"0" for i in range(11,77,3)]
In [25]:
## 행정구 번호의 끝이 5인 경우도 3개 존재하니 추가해줌
## 서울시의 총 구 숫자가 25개가 되게 만들어 줌

law_list.append('11305')
law_list.append('11215')
law_list.append('11545')
In [26]:
law_list
Out[26]:
['11110',
 '11140',
 '11170',
 '11200',
 '11230',
 '11260',
 '11290',
 '11320',
 '11350',
 '11380',
 '11410',
 '11440',
 '11470',
 '11500',
 '11530',
 '11560',
 '11590',
 '11620',
 '11650',
 '11680',
 '11710',
 '11740',
 '11305',
 '11215',
 '11545']
In [27]:
## 작성중

## crawling 함수 정의 (인자는 i, ym, api_key)

## i 에는 구 행정번호가 들어가고 ex)11110, 11140, 11305, 
## ym에는 수집하고자하는 연월이 들어감 ex) 201910, 201911

# api_key는 data.go.kr에서 국토교통부 실거래가 api를 개별적으로 신청하셔서 입력하길 바랍니다.
# api_key를 공란으로 입력해 두었음. 꼭 data.go.kr에서 실거래가 api를 신청하셔야 합니다.

api_key = ""

def crawling(i, ym, api_key = api_key):
    url = "http://openapi.molit.go.kr:8081/OpenAPI_ToolInstallPackage/service/rest/RTMSOBJSvc/getRTMSDataSvcAptTrade?LAWD_CD=" + i + "&DEAL_YMD=" + str(ym) + "&serviceKey=" + api_key
    
    # 실거래가 자료를 요청하기 위해 접속 시도
    req = requests.get(url) 
    # 수집된 실거래가 자료가 축적될 dataframe 정의
    data = pd.DataFrame(columns = ["거래금액", "건축년도", "년", "법정동", "아파트", "월", "일", "전용면적", "지역코드", "지번", "층"])
    
    ## print(req.status_code)  req.status_code 값이 200이면 정상 접속(주석 처리)
    if (req.status_code == 200):
        html = req.text
        print("행정구역번호 {location}, 조사년월 {ym}의 수집이 정상적으로 시작됩니다.".format(location=i, ym=ym))   
        
        # xml 자료를 처리하기 위해 BeautifulSoup 모듈을 로드한다.
        soup = BeautifulSoup(html, 'lxml-xml')
    
        texts = soup.findAll("item")
        
        # 항목 하나하나마다 try except 문을 사용하여
        # 수집된 자료에서 해당 자료가 누락되어 있을 시에는 공백으로 넣어주어
        # 수집이 계속 진행되게 해준다.
        
        
        for text in texts:
            
            josa_ym = ym
            
            try:
                price = text.find("거래금액").text
            except:
                price = ""

            try:
                year = text.find("건축년도").text
            except:
                year = ""

            try:
                trade_year = text.find("년").text
            except:
                trade_year = ""


            try:
                law_name = text.find("법정동").text
            except:
                law_name = ""

            try:
                apt = text.find("아파트").text
            except:
                apt = ""
    
            try:
                month = text.find("월").text
            except:
                month = ""
            try:
                day = text.find("일").text
            except:
                day = ""
            
            try:
                exclusive_area = text.find("전용면적").text
            except:
                exclusive_area = ""
                
            try:
                location_code = i
            except:
                location_code = ""

            try:
                jibun = text.find("지번").text
            except:
                jibun = ""

            try:
                floor = text.find("층").text
            except:
                floor = ""
        
            # 1차적으로 정리된 자료를 임시 변수 temp에 저장하고
            temp = pd.DataFrame([[josa_ym, price, year, trade_year, law_name, apt, month, day, exclusive_area, location_code, jibun, floor]]\
                            , columns = ["조사년월", "거래금액", "건축년도", "년", "법정동", "아파트", "월", "일", "전용면적", "지역코드", "지번", "층"])
            
            # 수집된 자료를 data에 계속 누적시킨다
            data = pd.concat([data, temp])
        
    else:
        print("행정구역번호 {location}, 조사년월 {ym}의 접속이 원활하지 않습니다.".format(location=i, ym=ym))
    
    # 수집된 자료를 연월_행정구번호.csv로 저장함
    data.to_csv(str(ym)+"_"+str(i)+".csv", encoding='utf-8', index=False)
In [28]:
# 시범으로 데이터 수집을 시작해 봄
crawling('11140', 201905)
행정구역번호 11140, 조사년월 201905의 수집이 정상적으로 시작됩니다.
C:\Users\gerard kim\Anaconda3\lib\site-packages\ipykernel_launcher.py:98: FutureWarning: Sorting because non-concatenation axis is not aligned. A future version
of pandas will change to not sort by default.

To accept the future behavior, pass 'sort=False'.

To retain the current behavior and silence the warning, pass 'sort=True'.

In [29]:
# '19.03 ~ '19.10의 자료를 수집 시작함

# 이중 loop를 사용한다 (월별, 법정동별)

start_time = time.time()

for ym in [201903, 201904, 201905, 201906, 201907, 201908, 201909, 201910]: # 월별로 loop 시작
    for i in law_list: # 법정동별로 loop 시작
        try:
            crawling(i, ym)
        except:
            continue
end_time = time.time()

print("수집 소요 시간은 %f 초 입니다." % (end_time - start_time))
행정구역번호 11110, 조사년월 201903의 수집이 정상적으로 시작됩니다.
C:\Users\gerard kim\Anaconda3\lib\site-packages\ipykernel_launcher.py:98: FutureWarning: Sorting because non-concatenation axis is not aligned. A future version
of pandas will change to not sort by default.

To accept the future behavior, pass 'sort=False'.

To retain the current behavior and silence the warning, pass 'sort=True'.

행정구역번호 11140, 조사년월 201903의 수집이 정상적으로 시작됩니다.
행정구역번호 11170, 조사년월 201903의 수집이 정상적으로 시작됩니다.
행정구역번호 11200, 조사년월 201903의 수집이 정상적으로 시작됩니다.
행정구역번호 11230, 조사년월 201903의 수집이 정상적으로 시작됩니다.
행정구역번호 11260, 조사년월 201903의 수집이 정상적으로 시작됩니다.
행정구역번호 11290, 조사년월 201903의 수집이 정상적으로 시작됩니다.
행정구역번호 11320, 조사년월 201903의 수집이 정상적으로 시작됩니다.
행정구역번호 11350, 조사년월 201903의 수집이 정상적으로 시작됩니다.
행정구역번호 11380, 조사년월 201903의 수집이 정상적으로 시작됩니다.
행정구역번호 11410, 조사년월 201903의 수집이 정상적으로 시작됩니다.
행정구역번호 11440, 조사년월 201903의 수집이 정상적으로 시작됩니다.
행정구역번호 11470, 조사년월 201903의 수집이 정상적으로 시작됩니다.
행정구역번호 11500, 조사년월 201903의 수집이 정상적으로 시작됩니다.
행정구역번호 11530, 조사년월 201903의 수집이 정상적으로 시작됩니다.
행정구역번호 11560, 조사년월 201903의 수집이 정상적으로 시작됩니다.
행정구역번호 11590, 조사년월 201903의 수집이 정상적으로 시작됩니다.
행정구역번호 11620, 조사년월 201903의 수집이 정상적으로 시작됩니다.
행정구역번호 11650, 조사년월 201903의 수집이 정상적으로 시작됩니다.
행정구역번호 11680, 조사년월 201903의 수집이 정상적으로 시작됩니다.
행정구역번호 11710, 조사년월 201903의 수집이 정상적으로 시작됩니다.
행정구역번호 11740, 조사년월 201903의 수집이 정상적으로 시작됩니다.
행정구역번호 11305, 조사년월 201903의 수집이 정상적으로 시작됩니다.
행정구역번호 11215, 조사년월 201903의 수집이 정상적으로 시작됩니다.
행정구역번호 11545, 조사년월 201903의 수집이 정상적으로 시작됩니다.
행정구역번호 11110, 조사년월 201904의 수집이 정상적으로 시작됩니다.
행정구역번호 11140, 조사년월 201904의 수집이 정상적으로 시작됩니다.
행정구역번호 11170, 조사년월 201904의 수집이 정상적으로 시작됩니다.
행정구역번호 11200, 조사년월 201904의 수집이 정상적으로 시작됩니다.
행정구역번호 11230, 조사년월 201904의 수집이 정상적으로 시작됩니다.
행정구역번호 11260, 조사년월 201904의 수집이 정상적으로 시작됩니다.
행정구역번호 11290, 조사년월 201904의 수집이 정상적으로 시작됩니다.
행정구역번호 11320, 조사년월 201904의 수집이 정상적으로 시작됩니다.
행정구역번호 11350, 조사년월 201904의 수집이 정상적으로 시작됩니다.
행정구역번호 11380, 조사년월 201904의 수집이 정상적으로 시작됩니다.
행정구역번호 11410, 조사년월 201904의 수집이 정상적으로 시작됩니다.
행정구역번호 11440, 조사년월 201904의 수집이 정상적으로 시작됩니다.
행정구역번호 11470, 조사년월 201904의 수집이 정상적으로 시작됩니다.
행정구역번호 11500, 조사년월 201904의 수집이 정상적으로 시작됩니다.
행정구역번호 11530, 조사년월 201904의 수집이 정상적으로 시작됩니다.
행정구역번호 11560, 조사년월 201904의 수집이 정상적으로 시작됩니다.
행정구역번호 11590, 조사년월 201904의 수집이 정상적으로 시작됩니다.
행정구역번호 11620, 조사년월 201904의 수집이 정상적으로 시작됩니다.
행정구역번호 11650, 조사년월 201904의 수집이 정상적으로 시작됩니다.
행정구역번호 11680, 조사년월 201904의 수집이 정상적으로 시작됩니다.
행정구역번호 11710, 조사년월 201904의 수집이 정상적으로 시작됩니다.
행정구역번호 11740, 조사년월 201904의 수집이 정상적으로 시작됩니다.
행정구역번호 11305, 조사년월 201904의 수집이 정상적으로 시작됩니다.
행정구역번호 11215, 조사년월 201904의 수집이 정상적으로 시작됩니다.
행정구역번호 11545, 조사년월 201904의 수집이 정상적으로 시작됩니다.
행정구역번호 11110, 조사년월 201905의 수집이 정상적으로 시작됩니다.
행정구역번호 11140, 조사년월 201905의 수집이 정상적으로 시작됩니다.
행정구역번호 11170, 조사년월 201905의 수집이 정상적으로 시작됩니다.
행정구역번호 11200, 조사년월 201905의 수집이 정상적으로 시작됩니다.
행정구역번호 11230, 조사년월 201905의 수집이 정상적으로 시작됩니다.
행정구역번호 11260, 조사년월 201905의 수집이 정상적으로 시작됩니다.
행정구역번호 11290, 조사년월 201905의 수집이 정상적으로 시작됩니다.
행정구역번호 11320, 조사년월 201905의 수집이 정상적으로 시작됩니다.
행정구역번호 11350, 조사년월 201905의 수집이 정상적으로 시작됩니다.
행정구역번호 11380, 조사년월 201905의 수집이 정상적으로 시작됩니다.
행정구역번호 11410, 조사년월 201905의 수집이 정상적으로 시작됩니다.
행정구역번호 11440, 조사년월 201905의 수집이 정상적으로 시작됩니다.
행정구역번호 11470, 조사년월 201905의 수집이 정상적으로 시작됩니다.
행정구역번호 11500, 조사년월 201905의 수집이 정상적으로 시작됩니다.
행정구역번호 11530, 조사년월 201905의 수집이 정상적으로 시작됩니다.
행정구역번호 11560, 조사년월 201905의 수집이 정상적으로 시작됩니다.
행정구역번호 11590, 조사년월 201905의 수집이 정상적으로 시작됩니다.
행정구역번호 11620, 조사년월 201905의 수집이 정상적으로 시작됩니다.
행정구역번호 11650, 조사년월 201905의 수집이 정상적으로 시작됩니다.
행정구역번호 11680, 조사년월 201905의 수집이 정상적으로 시작됩니다.
행정구역번호 11710, 조사년월 201905의 수집이 정상적으로 시작됩니다.
행정구역번호 11740, 조사년월 201905의 수집이 정상적으로 시작됩니다.
행정구역번호 11305, 조사년월 201905의 수집이 정상적으로 시작됩니다.
행정구역번호 11215, 조사년월 201905의 수집이 정상적으로 시작됩니다.
행정구역번호 11545, 조사년월 201905의 수집이 정상적으로 시작됩니다.
행정구역번호 11110, 조사년월 201906의 수집이 정상적으로 시작됩니다.
행정구역번호 11140, 조사년월 201906의 수집이 정상적으로 시작됩니다.
행정구역번호 11170, 조사년월 201906의 수집이 정상적으로 시작됩니다.
행정구역번호 11200, 조사년월 201906의 수집이 정상적으로 시작됩니다.
행정구역번호 11230, 조사년월 201906의 수집이 정상적으로 시작됩니다.
행정구역번호 11260, 조사년월 201906의 수집이 정상적으로 시작됩니다.
행정구역번호 11290, 조사년월 201906의 수집이 정상적으로 시작됩니다.
행정구역번호 11320, 조사년월 201906의 수집이 정상적으로 시작됩니다.
행정구역번호 11350, 조사년월 201906의 수집이 정상적으로 시작됩니다.
행정구역번호 11380, 조사년월 201906의 수집이 정상적으로 시작됩니다.
행정구역번호 11410, 조사년월 201906의 수집이 정상적으로 시작됩니다.
행정구역번호 11440, 조사년월 201906의 수집이 정상적으로 시작됩니다.
행정구역번호 11470, 조사년월 201906의 수집이 정상적으로 시작됩니다.
행정구역번호 11500, 조사년월 201906의 수집이 정상적으로 시작됩니다.
행정구역번호 11530, 조사년월 201906의 수집이 정상적으로 시작됩니다.
행정구역번호 11560, 조사년월 201906의 수집이 정상적으로 시작됩니다.
행정구역번호 11590, 조사년월 201906의 수집이 정상적으로 시작됩니다.
행정구역번호 11620, 조사년월 201906의 수집이 정상적으로 시작됩니다.
행정구역번호 11650, 조사년월 201906의 수집이 정상적으로 시작됩니다.
행정구역번호 11680, 조사년월 201906의 수집이 정상적으로 시작됩니다.
행정구역번호 11710, 조사년월 201906의 수집이 정상적으로 시작됩니다.
행정구역번호 11740, 조사년월 201906의 수집이 정상적으로 시작됩니다.
행정구역번호 11305, 조사년월 201906의 수집이 정상적으로 시작됩니다.
행정구역번호 11215, 조사년월 201906의 수집이 정상적으로 시작됩니다.
행정구역번호 11545, 조사년월 201906의 수집이 정상적으로 시작됩니다.
행정구역번호 11110, 조사년월 201907의 수집이 정상적으로 시작됩니다.
행정구역번호 11140, 조사년월 201907의 수집이 정상적으로 시작됩니다.
행정구역번호 11170, 조사년월 201907의 수집이 정상적으로 시작됩니다.
행정구역번호 11200, 조사년월 201907의 수집이 정상적으로 시작됩니다.
행정구역번호 11230, 조사년월 201907의 수집이 정상적으로 시작됩니다.
행정구역번호 11260, 조사년월 201907의 수집이 정상적으로 시작됩니다.
행정구역번호 11290, 조사년월 201907의 수집이 정상적으로 시작됩니다.
행정구역번호 11320, 조사년월 201907의 수집이 정상적으로 시작됩니다.
행정구역번호 11350, 조사년월 201907의 수집이 정상적으로 시작됩니다.
행정구역번호 11380, 조사년월 201907의 수집이 정상적으로 시작됩니다.
행정구역번호 11410, 조사년월 201907의 수집이 정상적으로 시작됩니다.
행정구역번호 11440, 조사년월 201907의 수집이 정상적으로 시작됩니다.
행정구역번호 11470, 조사년월 201907의 수집이 정상적으로 시작됩니다.
행정구역번호 11500, 조사년월 201907의 수집이 정상적으로 시작됩니다.
행정구역번호 11530, 조사년월 201907의 수집이 정상적으로 시작됩니다.
행정구역번호 11560, 조사년월 201907의 수집이 정상적으로 시작됩니다.
행정구역번호 11590, 조사년월 201907의 수집이 정상적으로 시작됩니다.
행정구역번호 11620, 조사년월 201907의 수집이 정상적으로 시작됩니다.
행정구역번호 11650, 조사년월 201907의 수집이 정상적으로 시작됩니다.
행정구역번호 11680, 조사년월 201907의 수집이 정상적으로 시작됩니다.
행정구역번호 11710, 조사년월 201907의 수집이 정상적으로 시작됩니다.
행정구역번호 11740, 조사년월 201907의 수집이 정상적으로 시작됩니다.
행정구역번호 11305, 조사년월 201907의 수집이 정상적으로 시작됩니다.
행정구역번호 11215, 조사년월 201907의 수집이 정상적으로 시작됩니다.
행정구역번호 11545, 조사년월 201907의 수집이 정상적으로 시작됩니다.
행정구역번호 11110, 조사년월 201908의 수집이 정상적으로 시작됩니다.
행정구역번호 11140, 조사년월 201908의 수집이 정상적으로 시작됩니다.
행정구역번호 11170, 조사년월 201908의 수집이 정상적으로 시작됩니다.
행정구역번호 11200, 조사년월 201908의 수집이 정상적으로 시작됩니다.
행정구역번호 11230, 조사년월 201908의 수집이 정상적으로 시작됩니다.
행정구역번호 11260, 조사년월 201908의 수집이 정상적으로 시작됩니다.
행정구역번호 11290, 조사년월 201908의 수집이 정상적으로 시작됩니다.
행정구역번호 11320, 조사년월 201908의 수집이 정상적으로 시작됩니다.
행정구역번호 11350, 조사년월 201908의 수집이 정상적으로 시작됩니다.
행정구역번호 11380, 조사년월 201908의 수집이 정상적으로 시작됩니다.
행정구역번호 11410, 조사년월 201908의 수집이 정상적으로 시작됩니다.
행정구역번호 11440, 조사년월 201908의 수집이 정상적으로 시작됩니다.
행정구역번호 11470, 조사년월 201908의 수집이 정상적으로 시작됩니다.
행정구역번호 11500, 조사년월 201908의 수집이 정상적으로 시작됩니다.
행정구역번호 11530, 조사년월 201908의 수집이 정상적으로 시작됩니다.
행정구역번호 11560, 조사년월 201908의 수집이 정상적으로 시작됩니다.
행정구역번호 11590, 조사년월 201908의 수집이 정상적으로 시작됩니다.
행정구역번호 11620, 조사년월 201908의 수집이 정상적으로 시작됩니다.
행정구역번호 11650, 조사년월 201908의 수집이 정상적으로 시작됩니다.
행정구역번호 11680, 조사년월 201908의 수집이 정상적으로 시작됩니다.
행정구역번호 11710, 조사년월 201908의 수집이 정상적으로 시작됩니다.
행정구역번호 11740, 조사년월 201908의 수집이 정상적으로 시작됩니다.
행정구역번호 11305, 조사년월 201908의 수집이 정상적으로 시작됩니다.
행정구역번호 11215, 조사년월 201908의 수집이 정상적으로 시작됩니다.
행정구역번호 11545, 조사년월 201908의 수집이 정상적으로 시작됩니다.
행정구역번호 11110, 조사년월 201909의 수집이 정상적으로 시작됩니다.
행정구역번호 11140, 조사년월 201909의 수집이 정상적으로 시작됩니다.
행정구역번호 11170, 조사년월 201909의 수집이 정상적으로 시작됩니다.
행정구역번호 11200, 조사년월 201909의 수집이 정상적으로 시작됩니다.
행정구역번호 11230, 조사년월 201909의 수집이 정상적으로 시작됩니다.
행정구역번호 11260, 조사년월 201909의 수집이 정상적으로 시작됩니다.
행정구역번호 11290, 조사년월 201909의 수집이 정상적으로 시작됩니다.
행정구역번호 11320, 조사년월 201909의 수집이 정상적으로 시작됩니다.
행정구역번호 11350, 조사년월 201909의 수집이 정상적으로 시작됩니다.
행정구역번호 11380, 조사년월 201909의 수집이 정상적으로 시작됩니다.
행정구역번호 11410, 조사년월 201909의 수집이 정상적으로 시작됩니다.
행정구역번호 11440, 조사년월 201909의 수집이 정상적으로 시작됩니다.
행정구역번호 11470, 조사년월 201909의 수집이 정상적으로 시작됩니다.
행정구역번호 11500, 조사년월 201909의 수집이 정상적으로 시작됩니다.
행정구역번호 11530, 조사년월 201909의 수집이 정상적으로 시작됩니다.
행정구역번호 11560, 조사년월 201909의 수집이 정상적으로 시작됩니다.
행정구역번호 11590, 조사년월 201909의 수집이 정상적으로 시작됩니다.
행정구역번호 11620, 조사년월 201909의 수집이 정상적으로 시작됩니다.
행정구역번호 11650, 조사년월 201909의 수집이 정상적으로 시작됩니다.
행정구역번호 11680, 조사년월 201909의 수집이 정상적으로 시작됩니다.
행정구역번호 11710, 조사년월 201909의 수집이 정상적으로 시작됩니다.
행정구역번호 11740, 조사년월 201909의 수집이 정상적으로 시작됩니다.
행정구역번호 11305, 조사년월 201909의 수집이 정상적으로 시작됩니다.
행정구역번호 11215, 조사년월 201909의 수집이 정상적으로 시작됩니다.
행정구역번호 11545, 조사년월 201909의 수집이 정상적으로 시작됩니다.
행정구역번호 11110, 조사년월 201910의 수집이 정상적으로 시작됩니다.
행정구역번호 11140, 조사년월 201910의 수집이 정상적으로 시작됩니다.
행정구역번호 11170, 조사년월 201910의 수집이 정상적으로 시작됩니다.
행정구역번호 11200, 조사년월 201910의 수집이 정상적으로 시작됩니다.
행정구역번호 11230, 조사년월 201910의 수집이 정상적으로 시작됩니다.
행정구역번호 11260, 조사년월 201910의 수집이 정상적으로 시작됩니다.
행정구역번호 11290, 조사년월 201910의 수집이 정상적으로 시작됩니다.
행정구역번호 11320, 조사년월 201910의 수집이 정상적으로 시작됩니다.
행정구역번호 11350, 조사년월 201910의 수집이 정상적으로 시작됩니다.
행정구역번호 11380, 조사년월 201910의 수집이 정상적으로 시작됩니다.
행정구역번호 11410, 조사년월 201910의 수집이 정상적으로 시작됩니다.
행정구역번호 11440, 조사년월 201910의 수집이 정상적으로 시작됩니다.
행정구역번호 11470, 조사년월 201910의 수집이 정상적으로 시작됩니다.
행정구역번호 11500, 조사년월 201910의 수집이 정상적으로 시작됩니다.
행정구역번호 11530, 조사년월 201910의 수집이 정상적으로 시작됩니다.
행정구역번호 11560, 조사년월 201910의 수집이 정상적으로 시작됩니다.
행정구역번호 11590, 조사년월 201910의 수집이 정상적으로 시작됩니다.
행정구역번호 11620, 조사년월 201910의 수집이 정상적으로 시작됩니다.
행정구역번호 11650, 조사년월 201910의 수집이 정상적으로 시작됩니다.
행정구역번호 11680, 조사년월 201910의 수집이 정상적으로 시작됩니다.
행정구역번호 11710, 조사년월 201910의 수집이 정상적으로 시작됩니다.
행정구역번호 11740, 조사년월 201910의 수집이 정상적으로 시작됩니다.
행정구역번호 11305, 조사년월 201910의 수집이 정상적으로 시작됩니다.
행정구역번호 11215, 조사년월 201910의 수집이 정상적으로 시작됩니다.
행정구역번호 11545, 조사년월 201910의 수집이 정상적으로 시작됩니다.
수집 소요 시간은 649.499876 초 입니다.
In [30]:
# 수집된 파일들의 리스트를 만듦
crawled_list = glob.glob("*0.csv") + glob.glob("*5.csv")
In [31]:
print(crawled_list)
Out[31]:
['201903_11110.csv',
 '201903_11140.csv',
 '201903_11170.csv',
 '201903_11200.csv',
 '201903_11230.csv',
 '201903_11260.csv',
 '201903_11290.csv',
 '201903_11320.csv',
 '201903_11350.csv',
 '201903_11380.csv',
 '201903_11410.csv',
 '201903_11440.csv',
 '201903_11470.csv',
 '201903_11500.csv',
 '201903_11530.csv',
 '201903_11560.csv',
 '201903_11590.csv',
 '201903_11620.csv',
 '201903_11650.csv',
 '201903_11680.csv',
 '201903_11710.csv',
 '201903_11740.csv',
 '201904_11110.csv',
 '201904_11140.csv',
 '201904_11170.csv',
 '201904_11200.csv',
 '201904_11230.csv',
 '201904_11260.csv',
 '201904_11290.csv',
 '201904_11320.csv',
 '201904_11350.csv',
 '201904_11380.csv',
 '201904_11410.csv',
 '201904_11440.csv',
 '201904_11470.csv',
 '201904_11500.csv',
 '201904_11530.csv',
 '201904_11560.csv',
 '201904_11590.csv',
 '201904_11620.csv',
 '201904_11650.csv',
 '201904_11680.csv',
 '201904_11710.csv',
 '201904_11740.csv',
 '201905_11110.csv',
 '201905_11140.csv',
 '201905_11170.csv',
 '201905_11200.csv',
 '201905_11230.csv',
 '201905_11260.csv',
 '201905_11290.csv',
 '201905_11320.csv',
 '201905_11350.csv',
 '201905_11380.csv',
 '201905_11410.csv',
 '201905_11440.csv',
 '201905_11470.csv',
 '201905_11500.csv',
 '201905_11530.csv',
 '201905_11560.csv',
 '201905_11590.csv',
 '201905_11620.csv',
 '201905_11650.csv',
 '201905_11680.csv',
 '201905_11710.csv',
 '201905_11740.csv',
 '201906_11110.csv',
 '201906_11140.csv',
 '201906_11170.csv',
 '201906_11200.csv',
 '201906_11230.csv',
 '201906_11260.csv',
 '201906_11290.csv',
 '201906_11320.csv',
 '201906_11350.csv',
 '201906_11380.csv',
 '201906_11410.csv',
 '201906_11440.csv',
 '201906_11470.csv',
 '201906_11500.csv',
 '201906_11530.csv',
 '201906_11560.csv',
 '201906_11590.csv',
 '201906_11620.csv',
 '201906_11650.csv',
 '201906_11680.csv',
 '201906_11710.csv',
 '201906_11740.csv',
 '201907_11110.csv',
 '201907_11140.csv',
 '201907_11170.csv',
 '201907_11200.csv',
 '201907_11230.csv',
 '201907_11260.csv',
 '201907_11290.csv',
 '201907_11320.csv',
 '201907_11350.csv',
 '201907_11380.csv',
 '201907_11410.csv',
 '201907_11440.csv',
 '201907_11470.csv',
 '201907_11500.csv',
 '201907_11530.csv',
 '201907_11560.csv',
 '201907_11590.csv',
 '201907_11620.csv',
 '201907_11650.csv',
 '201907_11680.csv',
 '201907_11710.csv',
 '201907_11740.csv',
 '201908_11110.csv',
 '201908_11140.csv',
 '201908_11170.csv',
 '201908_11200.csv',
 '201908_11230.csv',
 '201908_11260.csv',
 '201908_11290.csv',
 '201908_11320.csv',
 '201908_11350.csv',
 '201908_11380.csv',
 '201908_11410.csv',
 '201908_11440.csv',
 '201908_11470.csv',
 '201908_11500.csv',
 '201908_11530.csv',
 '201908_11560.csv',
 '201908_11590.csv',
 '201908_11620.csv',
 '201908_11650.csv',
 '201908_11680.csv',
 '201908_11710.csv',
 '201908_11740.csv',
 '201909_11110.csv',
 '201909_11140.csv',
 '201909_11170.csv',
 '201909_11200.csv',
 '201909_11230.csv',
 '201909_11260.csv',
 '201909_11290.csv',
 '201909_11320.csv',
 '201909_11350.csv',
 '201909_11380.csv',
 '201909_11410.csv',
 '201909_11440.csv',
 '201909_11470.csv',
 '201909_11500.csv',
 '201909_11530.csv',
 '201909_11560.csv',
 '201909_11590.csv',
 '201909_11620.csv',
 '201909_11650.csv',
 '201909_11680.csv',
 '201909_11710.csv',
 '201909_11740.csv',
 '201910_11110.csv',
 '201910_11140.csv',
 '201910_11170.csv',
 '201910_11200.csv',
 '201910_11230.csv',
 '201910_11260.csv',
 '201910_11290.csv',
 '201910_11320.csv',
 '201910_11350.csv&##39;,
 '201910_11380.csv',
 '201910_11410.csv',
 '201910_11440.csv',
 '201910_11470.csv',
 '201910_11500.csv',
 '201910_11530.csv',
 '201910_11560.csv',
 '201910_11590.csv',
 '201910_11620.csv',
 '201910_11650.csv',
 '201910_11680.csv',
 '201910_11710.csv',
 '201910_11740.csv',
 '201903_11215.csv',
 '201903_11305.csv',
 '201903_11545.csv',
 '201904_11215.csv',
 '201904_11305.csv',
 '201904_11545.csv',
 '201905_11215.csv',
 '201905_11305.csv',
 '201905_11545.csv',
 '201906_11215.csv',
 '201906_11305.csv',
 '201906_11545.csv',
 '201907_11215.csv',
 '201907_11305.csv',
 '201907_11545.csv',
 '201908_11215.csv',
 '201908_11305.csv',
 '201908_11545.csv',
 '201909_11215.csv',
 '201909_11305.csv',
 '201909_11545.csv',
 '201910_11215.csv',
 '201910_11305.csv',
 '201910_11545.csv']
In [32]:
# 2019년 3월부터 2019년 10월까지의 자료를 모두 한 파일에 합침
total_data = pd.DataFrame(columns = ["조사년월","거래금액", "건축년도", "년", "법정동", "아파트", "월", "일", "전용면적", "지역코드", "지번", "층"])
for csv in crawled_list:
    data = pd.read_csv(csv, engine='python')
    total_data = pd.concat([total_data, data])
total_data.to_excel("2~10월자료수집.xlsx", index=False, encoding='utf-8')
C:\Users\gerard kim\Anaconda3\lib\site-packages\ipykernel_launcher.py:5: FutureWarning: Sorting because non-concatenation axis is not aligned. A future version
of pandas will change to not sort by default.

To accept the future behavior, pass 'sort=False'.

To retain the current behavior and silence the warning, pass 'sort=True'.

  """
In [33]:
total_data.to_excel("2~10월자료수집.xlsx", index=False, encoding='utf-8')
In [34]:
# 총 39,026개의 실거래가 정보가 수집되었음
print(total_data.shape)
(39026, 24)
In [35]:
# 파일이 정상적으로 합쳐졌으면 맨 처음에 수집한 csv 파일들을 다 삭제함
for file in glob.glob("2019*.csv"):
    os.remove(file)
In [36]:
glob.glob("2019*.csv")
Out[36]:
[]
In [ ]: