본문 바로가기
일상 다반사/부동산

파이썬으로 네이버 부동산에서 지역 정보 추출하기

by 크롱이크 2024. 4. 25.

 

파이썬을 활용하여 네이버 부동산의 api에서 전국의 시도 정보를 가져오고

이를 파일로 저장하는 방법을 공부했다.

 

필요한 라이브러리는 다음과 같다.

requests: 웹 서버에 http 요청을 보내기 위해 사용한다.
json: json 데이터를 파싱하고 처리하기 위해 사용한다.
pandas: 데이터를 효율적으로 관리하고 처리하기 위해 사용한다.

 

작성한 코드는 다음과 같다. 

 

import requests
import json
import pandas as pd


def get_sido_info():
    down_url = 'https://new.land.naver.com/api/regions/list?cortarNo=0000000000'
    response = requests.get(down_url, data={"sameAddressGroup": "false"}, headers={
        "Accept-Encoding": "gzip",
        "Host": "new.land.naver.com",
        "Referer": "https://new.land.naver.com/complexes/102378?ms=37.5018495,127.0438028,16&a=APT&b=A1&e=RETAIL",
        "Sec-Fetch-Dest": "empty",
        "Sec-Fetch-Mode": "cors",
        "Sec-Fetch-Site": "same-origin",
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36"
    })
    response.encoding = "utf-8-sig"
    temp = json.loads(response.text)

    with open('sido.json', 'w', encoding='utf-8') as file:
        json.dump(temp, file, ensure_ascii=False, indent=4)
    return list(pd.DataFrame(temp["regionList"])["cortarNo"])

 

1. api 요청 설정

requests.get() 함수를 사용하여 네이버 부동산 api 로부터 데이터를 요청한다. 이때, 특정 http 헤더들을 설정하여 브라우저에서 요청하는 것처럼 만들어 api 접근을 해야한다.

down_url = 'https://new.land.naver.com/api/regions/list?cortarNo=0000000000'
headers = {
    "Accept-Encoding": "gzip",
    "Host": "new.land.naver.com",
    ...
}
response = requests.get(down_url, data={"sameAddressGroup": "false"}, headers=headers)

 

2. 데이터 처리

받아온 데이터는 UTF-8 인코딩으로 설정한 후, JSON 형태로 파싱한다. pandas를 사용해서 시도 코드만 추출한다.

r.encoding = "utf-8-sig"
temp = json.loads(r.text)
sido_codes = list(pd.DataFrame(temp["regionList"])["cortarNo"])

 

3. 데이터 저장

추출한 데이터를 JSON 파일 형태로 로컬에 저장한다. 실행한 파일과 함께 있는 폴더에 저장된다.

with open('sido.json', 'w', encoding='utf-8') as file:
    json.dump(temp, file, ensure_ascii=False, indent=4)

 

 

결과

{
    "regionList": [
        {
            "cortarNo": "2644000000",
            "centerLat": 35.212035,
            "centerLon": 128.980525,
            "cortarName": "강서구",
            "cortarType": "dvsn"
        },
        {
            "cortarNo": "2641000000",
            "centerLat": 35.243068,
            "centerLon": 129.0921,
            "cortarName": "금정구",
            "cortarType": "dvsn"
        },
        {
            "cortarNo": "2671000000",
            "centerLat": 35.244507,
            "centerLon": 129.222173,
            "cortarName": "기장군",
            "cortarType": "dvsn"
        },
        {
            "cortarNo": "2629000000",
            "centerLat": 35.136649,
            "centerLon": 129.084175,
            "cortarName": "남구",
            "cortarType": "dvsn"
        },
        {
            "cortarNo": "2617000000",
            "centerLat": 35.13904,
            "centerLon": 129.0569,
            "cortarName": "동구",
            "cortarType": "dvsn"
        },
        {
            "cortarNo": "2626000000",
            "centerLat": 35.205001,
            "centerLon": 129.083625,
            "cortarName": "동래구",
            "cortarType": "dvsn"
        },
        {
            "cortarNo": "2623000000",
            "centerLat": 35.162874,
            "centerLon": 129.053137,
            "cortarName": "부산진구",
            "cortarType": "dvsn"
        },
        {
            "cortarNo": "2632000000",
            "centerLat": 35.197185,
            "centerLon": 128.990438,
            "cortarName": "북구",
            "cortarType": "dvsn"
        },
        {
            "cortarNo": "2653000000",
            "centerLat": 35.152624,
            "centerLon": 128.99125,
            "cortarName": "사상구",
            "cortarType": "dvsn"
        },
        {
            "cortarNo": "2638000000",
            "centerLat": 35.104476,
            "centerLon": 128.974763,
            "cortarName": "사하구",
            "cortarType": "dvsn"
        },
        {
            "cortarNo": "2614000000",
            "centerLat": 35.097582,
            "centerLon": 129.023425,
            "cortarName": "서구",
            "cortarType": "dvsn"
        },
        {
            "cortarNo": "2650000000",
            "centerLat": 35.14564,
            "centerLon": 129.113075,
            "cortarName": "수영구",
            "cortarType": "dvsn"
        },
        {
            "cortarNo": "2647000000",
            "centerLat": 35.176235,
            "centerLon": 129.079762,
            "cortarName": "연제구",
            "cortarType": "dvsn"
        },
        {
            "cortarNo": "2620000000",
            "centerLat": 35.091199,
            "centerLon": 129.067875,
            "cortarName": "영도구",
            "cortarType": "dvsn"
        },
        {
            "cortarNo": "2611000000",
            "centerLat": 35.10619,
            "centerLon": 129.032338,
            "cortarName": "중구",
            "cortarType": "dvsn"
        },
        {
            "cortarNo": "2635000000",
            "centerLat": 35.163207,
            "centerLon": 129.1637,
            "cortarName": "해운대구",
            "cortarType": "dvsn"
        }
    ]
}

 

 

 

앞으로 하나씩 차근히 올려야겠다✌️

반응형

'일상 다반사 > 부동산' 카테고리의 다른 글

2023년 12월 부동산 분석  (1) 2024.01.01

댓글