3주차 Cursor 스터디 - 네이버 부동산 매물 뽀개기 (성동구 아파트 전수조사)

3주차에는 네이버 부동산 매물 정보 수집을 배웠습니다.

cURL(bash)와 curlconverter 같은 새로운 도구들도 익혔고요. 이번 주 3회차 교육까지 들으니, 이제는 제가 원하는 기능들을 거의 다 구현할 수 있겠다는 자신감이 생겼습니다. 필군님께서 지난주에 진행했던 ‘한방부동산 중개사 전화번호 수집’도 A/S를 해 주셔서, 그 부분도 훨씬 더 명확하게 이해하게 되었습니다.

저는 지난주에 서울시 25개 구의 아파트 단지 목록을 크롤링하는 작업을 구현했습니다. 이번 주에는 제가 매월 루틴으로 하고 있는 임장보고서에 필요한, 네이버 부동산에서 한 개 구의 전체 매물을 수집하는 작업을 해 보았습니다.

사실 제가 Cursor 스터디를 시작한 이유도 바로 네이버 부동산 크롤링을 직접 개발해 보고 싶어서였습니다. 저는 약 2년 정도 꾸준히 공부해 온 올해 제36회 공인중개사 시험에 합격한 부동산 투자자입니다. 매달 임장보고서를 작성할 때는 서울시 한 개 구를 정해서, 그 구에 있는 아파트 단지들의 네이버 부동산 호가를 전수 조사합니다. 그리고 제가 관심 있게 보고 있는 단지들의 호가를 매월 시세 트래킹하는 루틴을 유지하고 있습니다. (시세 트래킹 자동화는 4주차 때 구현해 볼 예정입니다.)

현재 제가 수기로 하고 있는 루틴은 이렇습니다.

서울의 한 개 구 단지 정보가 담긴 Input 엑셀 파일을 준비하고, 네이버 부동산에 접속해 각 단지의 평형별로 나뉜 네이버 부동산 호가(매매가, 전세가)를 일일이 확인해서 엑셀에 기록합니다. 제가 수집하는 것은 개별 매물 리스트 전체가 아니라, 해당 단지의 특정 평형에서 저층(3층 이하)과 탑층을 제외한 ‘실질적인 최저 호가’입니다. 전세가도 함께 입력합니다. 만약 매물이 없는 경우에는 최근 실거래가를 대신 입력하는데, 이 부분은 아직 자동화하지 못했고 추후에 업데이트할 계획입니다. (전세는 임대차 갱신과 신규 계약 금액이 달라서, 로직이 조금 복잡해질 것 같네요.)

이 작업을 손으로 하면 보통 약 5시간 정도 걸립니다. 처음에는 거의 하루 종일 걸렸는데, 지금은 익숙해져서 5시간 정도면 마무리가 가능합니다. 이제 이 과정을 Cursor로 코딩해서 자동화해 보려고 합니다.

루틴에 사용하는 Input 파일은 지난주에 구현했던 “서울시 전체 구의 단지 크롤링” 결과를 그대로 활용할 수 있어서, 충분히 완전 자동화가 가능해 보입니다. 이미 단지 정보가 담긴 Input 파일이 있으니, 이번에는 그 파일을 그대로 입력으로 사용했습니다.

Cursor로 코드를 짜는 데 약 5시간 정도 걸린 것 같습니다.

처음에는 Selenium으로 스크롤을 내리면서 정보를 하나씩 수집했는데, 중간에 생각해 보니 JavaScript로 한 번에 데이터를 가져올 수 있지 않을까? 하는 아이디어가 떠올랐습니다. 그래서 이것저것 시도해 보다가, 결국 JavaScript 한 번 실행으로 필요한 정보를 모두 가져오는 방식으로 구현하는 데 성공했습니다.

// 1단계: 매물 목록 컨테이너 찾기 const articleListArea = document.getElementById("articleListArea");
// 2단계: 모든 매물 요소 선택 const articleElements = articleListArea.querySelectorAll(":scope > div");
// 3단계: 각 매물에서 정보 추출 for (let i = 0; i < articleElements.length; i++) { const specElem = ele.querySelector("div.info_area .line .spec"); // 면적/층 const typeElem = ele.querySelector("div.price_line .type"); // 매매/전세 const priceElem = ele.querySelector("div.price_line .price"); // 가격
items.push({
    apt_info: specElem.textContent.trim(),      // "103/84m², 3/10층"
    trade_type: typeElem.textContent.trim(),   // "매매"
    trade_price: priceElem.textContent.trim(),  // "3억 5,000"
    spec: specDetailElem.textContent.trim()     // "세안고"
});

코드를 작성한 뒤에는 최적화를 요청했고, ChatGPT에게도 코드를 다시 보여주며 검증을 받았습니다. 그 과정에서

  • 전역 변수 선언 정리

  • 정규식 개선

  • 중복 로직 제거

  • JavaScript 최적화

등을 진행하며 속도를 한 번 더 끌어올렸습니다.

또한 Chrome 브라우저를 두 개 띄워 화면을 분할해서 일종의 ‘병렬 처리’처럼 돌려보기도 했습니다. 체감상 속도는 조금 더 빨라졌지만, 로그 파일이 두 군데에서 뒤섞여 작성되다 보니 오히려 관리가 불편해지더군요. 그래서 결국은 Chrome 브라우저 하나만 사용하는 방식이 더 낫겠다는 결론을 내렸습니다.

추후에는 브라우저를 직접 열지 않고, 백그라운드에서만 수행하는 방식으로 변경하면 속도가 조금 더 올라갈 여지도 있을 것 같습니다.

제가 11월단 임장 간 성동구로 한번 테스트 해보겠습니다.

초기화면 입니다.

Adobe Flash Player 한국어 버전의 스크린샷

Input 으로 사용한 성동구 단지 목록입니다. 컬럼 V에 있는 링크를 클릭하여 네이버 부동산에 들어가고, 데이터를 다운받아서, 컬럼 I부터 L 까지 채우는 작업입니다.

Microsoft Excel의 스프레드시트 스크린샷

종료후 화면입니다.

한국어가 포함된 한국 컴퓨터 스크린샷

이렇게 데이터가 잘 들어온것을 확인할 수 있습니다. 매물 수집이 안된경우에는 0이 들어가거나 숫자가 들어가지 않게 코딩을 하였습니다,

Microsoft Excel의 스프레드시트 스크린샷

다음은 작동되는 화면과

Debug 용으로 구현한 Terminal 창입니다.

이번 실습에서 배운 점 & 느낀 점

  • 크롤링할때 API 호출과 Selenium 뿐만 아니고, JavaScript 도 적용할 수 있구나를 배웠습니다.

  • 코드 자동화를 하게 되면 진짜 생산성이 올라가는구나를 배웠습니다. (한개 구 전수조사할때 5시간 걸렸는데, 코딩하는데 5시간 거렸습니다 ㅎㅎㅎ)

2

뉴스레터 무료 구독

👉 이 게시글도 읽어보세요