권한부터 적는다
민간 플랫폼 매물을 모으려면 공개 API, 제휴, 크롤링 허용 범위를 먼저 확인해야 합니다. README 는 그 사실을 첫머리에 적고, 한 곳씩 확인하고 붙이라고 순서를 정해 둡니다.
서울 월세는 여러 곳의 매물을 한 모양으로 바꾸고, 같은 방을 한 번만 세고, 자치구·월세·보증금·면적·유형·역 키워드로 걸러 보는 작은 파이썬 프로그램입니다. 지금 화면의 매물은 데모 소스 두 개에서 불러온 14건이고, 합치면 11건이 됩니다. 공공데이터포털의 국토교통부 전월세 실거래 API 를 읽는 소스도 구현돼 있어, 서비스키를 넣으면 데모 대신 실거래 자료를 읽습니다.
README 가 한계부터 적습니다. 플랫폼마다 약관과 robots 정책, 봇 차단이 달라 ‘서울의 모든 매물’ 을 한 번에 모을 수는 없다고. 그래서 크롤러 대신 소스를 갈아 끼우는 구조를 먼저 세웠습니다.

/api/listings 를 다시 부릅니다.모든 소스는 BaseSource 를 상속하고 load() 하나만 구현합니다. 그 아래는 매물이 어느 소스에서 왔는지 모릅니다.
demo-alpha 는 월세를 rent_monthly 에 “85” 같은 글자로, demo-beta 는 price.monthly 에 숫자로 적습니다. 소스가 각자 자기 필드를 Listing 한 모양으로 바꾸고, 원본은 raw 에 그대로 둡니다.
주소와 보증금, 월세, 유형이 같고 면적이 0.5㎡ 단위로 같으면 한 방으로 봅니다. 제목이 달라도 합치고 등록일이 늦은 쪽을 남깁니다. ‘잠실’ 로 찾으면 두 소스에 있던 투룸이 4월 13일 한 건으로 나옵니다.
월세 80만 원 이하에 월세 낮은순을 고르면 11건이 5건으로 줄고 62만 원부터 올라갑니다. 역 키워드는 역 이름과 매물 제목을 함께 찾습니다.



서버는 파이썬 표준 라이브러리만 씁니다. 설치할 패키지가 없습니다.
출처가 남는 목록제목과 주소, 자치구, 보증금/월세, 면적, 유형, 역, 등록일 옆에 소스 배지까지 한 줄에 둡니다.
정렬 네 가지최신 등록순, 월세 낮은순, 보증금 낮은순, 면적 넓은순. 값이 같으면 다음 기준으로 한 번 더 가릅니다.
다시 불러오기버튼을 누르면 모든 소스를 다시 읽고 소스별 건수를 보고합니다. 한 소스가 실패해도 나머지는 뜨고, 실패한 소스는 경고로 따로 적습니다.
조건 여덟 칸자치구와 매물 유형 목록은 실제로 있는 값만 건수와 함께 채웁니다. 숫자 칸에 글자가 들어오면 서버가 400 으로 돌려보냅니다.
서비스키가 있으면 실거래 소스가 데모를 대신하고, RENT_INCLUDE_DEMO=true 일 때만 둘을 섞습니다.
민간 플랫폼 매물을 모으려면 공개 API, 제휴, 크롤링 허용 범위를 먼저 확인해야 합니다. README 는 그 사실을 첫머리에 적고, 한 곳씩 확인하고 붙이라고 순서를 정해 둡니다.
정규화는 소스 안에서 끝납니다. 필터와 정렬, 요약은 Listing 하나만 알기 때문에, 소스를 더해도 나머지 코드가 휘지 않습니다.
데모 소스 이름은 demo-alpha 와 demo-beta, 링크는 example.com 입니다. 겹치게 만든 매물에는 ‘alpha 소스와 중복되는 예시 매물’ 이라고 적어 두었습니다.
기본값이면 네 가지 유형 × 25개 구 × 2개월, 최소 200번을 호출합니다. 그래서 README 는 구 한두 개, 한 달로 먼저 돌려 보라고 권합니다.
실거래 자료에는 전세 거래도 섞여 옵니다. 월세가 0 인 행은 정규화 단계에서 버리고, 월세 거래만 목록에 올립니다.
불러온 매물은 서버 메모리에만 있어서 끄면 사라집니다. MVP 로는 충분하고, 실제 소스가 붙으면 SQLite 나 PostgreSQL 저장이 가장 먼저 바뀔 곳입니다.
http.server · 외부 패키지 없음/api/summary · /api/listings · /api/refresh · /api/health플랫폼마다 이용약관, robots 정책, 인증, 봇 차단이 다릅니다. 허락 없이 긁는 수집기는 언젠가 깨지거나 선을 넘습니다. 그래서 공개된 공공 API 를 먼저 붙이고, 민간 플랫폼은 한 곳씩 확인한 뒤 클래스 하나로 붙일 수 있는 자리만 만들어 두었습니다.
아닙니다. 국토부 자료는 이미 계약된 전월세 거래이고, 지금 광고 중인 매물이 아닙니다. README 도 그 차이를 적습니다. 그래서 실거래 행에는 매물 링크가 없고, 제목은 건물명과 유형으로, 설명은 건축년도와 계약구분, 계약기간으로 채웁니다.
글이 아니라 방을 봅니다. 주소와 유형의 공백을 지우고 소문자로 맞춘 뒤, 보증금과 월세가 같고 면적이 0.5㎡ 단위로 같으면 한 방입니다. 데모 소스 두 개에 겹친 세 쌍이 이렇게 합쳐져 14건이 11건이 됩니다.
아닙니다. 지금 보이는 11건은 데모 소스이고 링크도 example.com 입니다. 소스 배지를 demo-alpha, demo-beta 그대로 보이게 둔 이유입니다. 이 사이트의 데모는 앱이 내려준 API 응답을 저장해 서버 없이 띄운 것이라, 필터는 돌지만 정렬은 바뀌지 않습니다.
README 가 순서를 정해 두었습니다. 플랫폼 한 곳을 정해 붙이고, 필터 조건을 확정하고, 저장소와 정기 수집을 더한 뒤, 소스를 늘립니다. 희망 목록이 아니라 차례입니다.