[토이프로젝트] 네이버 부동산 크롤러

아재발자·2024년 7월 15일
1

토이 프로젝트

목록 보기
1/1

저는 2023년 10월쯤, 토이프로젝트로 네이버 부동산 크롤러를 만들었습니다.

지금도 제가 원하는 지역의 아파트 시세나 매물 등을 확인하는 용도로 사용을 하고 있는데요.

관련해서 작업했던 기록을 정리해보려고 합니다.

이 글에서는 네이버 부동산 매물 크롤러를 만들 때 설계한 내용을 정리하는 글입니다.

참고!
네이버는 부동산 매물 관련해서 공식 API를 지원하지 않습니다.

그래서 네이버 부동산 웹 사이트에서 호출하는 API를 기반으로 매물을 조회해서 가지고 와야 합니다.

네이버 부동산 API는 짧은 시간에 대량으로 요청하면 일시적으로 호출이 차단될 수 있으므로 호출량을 적절히 조절하여 호출하는 과정이 필요합니다.

관련해서 발생할 수 있는 법적 문제는 본인 책임입니다.


Github Repository

Repository: 링크

프로젝트에 대한 간단한 설명은 레포지토리 내 readme.md 파일에 기록해두었습니다.


토이 프로젝트의 목적

  1. NestJS 프레임워크에 익숙해지기
  2. 관심이 생긴 부동산 (언제가 될지는 모르겠지만 내집마련의 꿈)
  3. 심심풀이 땅콩

개발 환경

  • Node.js (with Typescript, NestJS)
  • MySQL (with TypeOrm)
  • Redis (with BullJS)
  • Docker

네이버 부동산 API 정리

Cluster API

/cluster/ajax/articleList

부동산 지도 화면에서 매물 목록을 누르면 호출되는 API입니다.

지정한 위도, 경도 좌표 범위 내에 존재하는 부동산 매물의 목록을 조회할 수 있습니다.

그 외 Filter 값을 통해 조회할 매물을 필터할 수 있습니다.

호출 예시:
https://m.land.naver.com/cluster/ajax/articleList?rletTpCd=APT%3AOPST&tradTpCd=A1%3AB2&z=19&lat=37.5236987&lon=126.8992539&btm=37.522901&lft=126.8958207&top=37.5244964&rgt=126.9026871&spcMin=33&spcMax=900000000&dprcMax=40000&wprcMax=10000&showR0=&totCnt=41

/cluster/ajax/complexList

부동산 지도 화면에서 단지 목록을 누르면 호출되는 API입니다.

지정한 위도, 경도 좌표 범위 내에 존재하는 단지 목록을 조회할 수 있습니다.

호출 시 필요한 QueryString은 /cluster/ajax/articleList와 동일합니다.

호출 예시:
https://m.land.naver.com/cluster/ajax/complexList?rletTpCd=APT%3AOPST&tradTpCd=A1%3AB2&z=19&lat=37.5236987&lon=126.8992539&btm=37.522901&lft=126.8958207&top=37.5244964&rgt=126.9026871&spcMin=33&spcMax=900000000&dprcMax=40000&wprcMax=10000&showR0=&totCnt=22&isOnlyIsale=false

위도, 경도 좌표 범위에 대해서

lat는 latitude, lon은 longitude, btm은 bottom, lft는 left, top은 top, rgt는 right의 약자로 위도, 경도의 좌표값을 가지고 있습니다.

위도에 해당하는 필드: lat, top, btm
경도에 해당하는 필드: lon, lft, rgt

위 지도를 기준으로 매물 목록 버튼을 누르면 아래의 QueryString으로 /cluster/ajax/articleList API가 호출됩니다.

QueryString

lat=37.5100191&lon=126.891867&btm=37.5056275&lft=126.8754734&top=37.5144105&rgt=126.9082607

이 때 각 필드의 의미는 아래와 같습니다.

보여지는 지도의 중앙 좌표: lat, lon
보여지는 지도의 상하좌우 끝단의 좌표: top, lft, rgt, btm

따라서 위 지도 기준으로 lat, lon 좌표의 위치는 신도림역이고, lftbtm 좌표의 위치는 왼쪽 하단의 월드메르디앙 아파트의 위치가 됩니다.


Front API

네이버 부동산 소스 코드를 뜯어보면 아래와 같이 front-api로 명시된 API 목록을 확인할 수 있습니다.

프론트 화면을 구성하기 위해 매물에 대한 추가 정보를 조회하는 API 모음일 것으로 예상하고 있으며, 이 중 몇가지 중요 API를 설명하도록 하겠습니다.

/front-api/v1/article/key

매물과 연관된 Key 정보를 조회할 수 있는 API 입니다.

이 API를 통해서 확인한 데이터는 다른 front-api를 호출할 때 사용됩니다.

요청 예시:
https://fin.land.naver.com/front-api/v1/article/key?articleId=2429861377

/front-api/v1/article/basicInfo

매물의 상세 정보를 조회할 수 있습니다.

매물 목록 조회 API를 통해서 알 수 있는 정보보다 더 자세한 매물 정보를 조회할 수 있습니다.

요청 예시:
https://fin.land.naver.com/front-api/v1/article/basicInfo?articleId=2429861377&realEstateType=A02&tradeType=A1

/front-api/v1/complex

매물의 단지 정보를 조회할 수 있습니다.

요청 예시:
https://fin.land.naver.com/front-api/v1/complex?complexNumber=127997

/front-api/v1/complex/evStaion (네이버에서 오타..낸듯..?)

단지 내 전기차 충전 시설 정보를 조회할 수 있습니다.

요청 예시:
https://fin.land.naver.com/front-api/v1/complex/evStaion?complexNumber=3210

/front-api/v1/article/transport

매물 주변의 대중교통 정보를 조회할 수 있습니다.

요청 예시:
https://fin.land.naver.com/front-api/v1/article/transport?itemId=2429861377&itemType=article


Rate Limit ?

네이버 부동산 API는 짧은 시간에 많은 요청을 보내면 일정 시간동안 접속이 차단되니 주의하셔야 합니다.

profile
안녕하세요. 아재 개발자입니다. 공부한 내용을 기록하고 잘못된 부분에 대해서 조언을 받기 위해 velog를 시작했습니다. :)

0개의 댓글