[PYTHON] 프로젝트 - 부동산 웹 만들기(1)

기타(임시) · 2023. 6. 4. 23:31

Python을 사용해서 부동산 웹을 만들어보자.

개요는 다음과 같다.

  1. 아파트 단지마다 주변 입지 정보를 보여준다.
  2. 입지 정보는 다음과 같은 사항이 있다.
    1) 강남과의 교통: 자차와 대중교통
    2) 학군
    3) 환경: 백화점, 대형병원, 스타벅스
    4) 직장: 종사자 수 범위로 구분
    5) 공급: 인구수 대비 공급량 비율
  3. 아파트 단지의 정보를 정리할 수 있으면, 지역별로 데이터를 통합한다.
  4. 지역 범위 선택에 따라 매물 순위를 나눈다.
    1) 가격 순위
    2) 선호도 순위
  5. 비교하고 싶은 선호도를 설정하면 그에 맞는 순위가 나오게 한다.

 

단지 정보 받아오기

현재는 특정 지역의 api을 가져와서 단지 정보를 추리는 단계이다.

Api preview 예시

네이버 부동산에서 정보를 따올 예정이고, 해당 화면은 크롬의 개발자 모드이다.

네트워크 탭을 선택 후 원하는 동작을 시작하면, 웹에서 해당 정보를 어떻게 가져오는지 보인다.

import requests
import json

위와 같은 간단한 패키지만 import 하면 돼서 편한 방법이다.

# down_url = 'https://new.land.naver.com/api/complexes/8928'
down_url = 'https://new.land.naver.com/api/complexes/single-markers/2.0?cortarNo=4146510100&zoom=17&priceType=RETAIL&markerId&markerType&selectedComplexNo&selectedComplexBuildingNo&fakeComplexMarker&realEstateType=APT&tradeType=&tag=%3A%3A%3A%3A%3A%3A%3A%3A&rentPriceMin=0&rentPriceMax=900000000&priceMin=0&priceMax=900000000&areaMin=0&areaMax=900000000&oldBuildYears&recentlyBuildYears&minHouseHoldCount&maxHouseHoldCount&showArticle=false&sameAddressGroup=false&minMaintenanceCost&maxMaintenanceCost&directions=&leftLon=127.086244&rightLon=127.1042684&topLat=37.3258406&bottomLat=37.3192454&isPresale=false'
r = requests.get(down_url,data={"sameAddressGroup":"false"},headers={
    "Accept-Encoding": "gzip, deflate, br",
    "Host": "new.land.naver.com",
    "Referer": "https://new.land.naver.com/complexes?ms=37.3221718,127.0894049,16&a=APT:PRE&e=RETAIL",
    "Sec-Fetch-Dest": "empty",
    "Sec-Fetch-Mode": "cors",
    "Sec-Fetch-Site": "same-origin",
    "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36"
})
r.encoding = "utf-8-sig"
temp = json.loads(r.text)

위와 같은 방식으로 원하는 페이지의 정보를 가져올 수 있다.

down_url에는 앞서 말한 개발자도구 -> network -> headers -> general에 있다.

down_url

위에서 보이는 Request URL을 그대로 입력해 주면 된다.

temp 변수에는 페이지에 있는 정보가 담겨있다.

페이지에 있는 정보는 개발자도구 -> network -> headers -> preview에서 확인할 수 있다.

preview

아래와 같이 Dict 구조체를 열어보면 위와 같은 정보가 담겨있는 것을 확인할 수 있다.

 

 

Dict 구조체 접근

제일 처음에 url을 조작하면 원하는 옵션을 선택해서 검색할 수 있다.

다음은 특정 순간의 url을 파싱하는 예이다.

'''
https://new.land.naver.com/api/complexes/single-markers/2.0?
cortarNo=4146510100&
zoom=17&
priceType=RETAIL&
markerId&markerType&selectedComplexNo&selectedComplexBuildingNo&fakeComplexMarker&
realEstateType=APT&
tradeType=A1&
tag=%3ATWOROOM%3A%3A%3A%3A%3A%3A%3A&
rentPriceMin=0&rentPriceMax=900000000&
priceMin=0&priceMax=70000&
areaMin=66&areaMax=165&
oldBuildYears&recentlyBuildYears&
minHouseHoldCount=300&maxHouseHoldCount&
showArticle=true&sameAddressGroup=false&
minMaintenanceCost&maxMaintenanceCost&
directions=&
leftLon=127.0874134&rightLon=127.1054379&topLat=37.3236564&bottomLat=37.3174877&
isPresale=false

'''
urlBase = 'https://new.land.naver.com/api/complexes/single-markers/2.0?'
#cortarNo = 'cortarNo=4146510100&' # 법정동 코드 (얘한테 영향은 받지 않는듯)
#zoom = 'zoom=17&' # 지도 확대 정도
priceType = 'priceType=RETAIL&' # 소매?
#option0 = 'markerId&markerType&selectedComplexNo&selectedComplexBuildingNo&fakeComplexMarker&'
realEstateType  = 'realEstateType=APT&'
tradeType = 'tradeType=A1&' # 매매, 전세 등 매매가 A1
tag = '%3ATWOROOM%3A%3A%3A%3A%3A%3A%3A&' # 상세매물검색옵션
rentalPrice = 'rentPriceMin=0&rentPriceMax=900000000&'
price = 'priceMin=0&priceMax=70000&' # 매매가격 범위
area = 'areaMin=66&areaMax=165&' # 평 수범위
buildYear = 'oldBuildYears&recentlyBuildYears&' # 사용승인일 범위
houseCount = 'minHouseHoldCount=300&maxHouseHoldCount&' # 세대수 범위
#option1 = 'showArticle=true&sameAddressGroup=false&'
#option2 = 'minMaintenanceCost&maxMaintenanceCost&'
direction = 'directions=&' # 남향 등
location = 'leftLon=127.084345&rightLon=127.1023694&topLat=37.3251239&bottomLat=37.3185286&'
#option3 = 'isPresale=false'
 
url = urlBase+priceType+realEstateType+tradeType+tag\
        +rentalPrice+price+area+buildYear+houseCount+direction+location

https://new.land.naver.com/api/complexes/single-markers/2.0?cortarNo=4146510100&zoom=17&priceType=RETAIL&markerId&markerType&selectedComplexNo&selectedComplexBuildingNo&fakeComplexMarker&realEstateType=APT&tradeType=A1&tag=%3ATWOROOM%3A%3A%3AMIDFLOOR%3ANOLOAN%3A%3A%3A&rentPriceMin=0&rentPriceMax=900000000&priceMin=0&priceMax=70000&areaMin=66&areaMax=165&oldBuildYears&recentlyBuildYears&minHouseHoldCount=300&maxHouseHoldCount&showArticle=true&sameAddressGroup=false&minMaintenanceCost&maxMaintenanceCost&directions=&leftLon=127.0872525&rightLon=127.1052769&topLat=37.3238356&bottomLat=37.3176669&isPresale=false 

이러한 url을 파싱해서 분석한 뒤에 각 옵션을 입맛에 맞게 수정할 수 있다.

url 파싱을 도와주는 사이트도 있어서 편하게 조작할 수 있다.

https://semalt.tools/ko/url-parser

 

URL 파서 온라인

 

semalt.tools

다음에는 원하는 지역명을 검색하면 해당 지역의 단지 리스트를 뽑아내는 부분을 구현해 보겠다.

반응형