클로드 코드를 이용해 신탁공매 물건 취합하여 레포트 자동화 제작기

소개

안녕하세요, 이번에 지피터스에 처음 가입하게 된 원펜스입니다.

우선, 이번에 참여하게 된 스터디는 AI로 시작하는 부동산 투자인데요. 첫 OT 때, 분위기를 보니 스터디장님들과 스터디원 분들이 이미 AI 스터디 경험이 많으신 것 같더라고요! 초보다보니 위축이 들지만 열심히 해보도록 하겠습니다!

일단 제가 개인적으로 이번에 진행할 과제는 '신탁 공매'물건 취합 및 레포트 작성 자동화입니다. 제가 주마다 신탁 공매 물건을 하나 골라서 업로드 하는데 물건 찾을 때마다 엄청 품이 많이 드는 작업이라 이번에 스터디에 참여하면서 개인적으로 진행하고자 하는 프로젝트인데요. 아직 작업 중이지만 로그성으로 과제글로 남기고자 합니다.

  • 목표: 신탁 공매 물건 취합 및 레포트 작성

  • 내용: 금주의 업로드된 물건 중 우선순위에 따라 10개의 물건을 추리고 그 중 상위 2건의 물건을 레포트 형식으로 작성하여 옵시디언에 저장

  • 우선 순위: 지역, 가격, 물건 유형 등을 비교하여 조사

  • 특징: 상위 2건의 물건을 레포트 형식. 레포트 형식에는 물건지(공매 공고 URL), 공매회차별 정보(최저입찰가, 동호수, 공매개시일자 등을 표 형식으로 작성), 위치(네이버지도), 주변 물건 비교(네이버부동산) 등. 이외의 나머지 8건은 간단한 정보만 포함(공고 URL, 공매물건이름, 유형, 최저입찰가)

진행 방법

어떤 도구를 사용했고, 어떻게 활용하셨나요?

  • 사용 도구: 클로드 코드

  • 활용 방법

    • 클로드와의 대화를 통해 자동화를 위한 프롬프트 전문 작성

    • 작성된 프롬프트를 클로드 코드를 통해 프로그램 소스 작성

한국어 텍스트가 있는 페이지의 스크린샷
프로그램을 보여주는 컴퓨터 화면의 스크린샷
  • 사용 프롬프트 전문(로그)


---

# 🎯 신탁공매 자동 크롤링 및 레포트 생성 프로젝트

## 📋 프로젝트 개요

매주 14개 신탁사 웹사이트에서 공매 물건을 자동으로 수집하고, 조건에 맞는 상위 5개 물건을 선정하여 투자 레포트를 생성하는 시스템

---

## 🔍 크롤링 대상 사이트 (14개)

```python

TRUST_SITES = {

'KB부동산신탁': 'https://kbret.co.kr/auction',

'한국토지신탁': 'https://www.koreit.co.kr/land-trust/sale/short-notice',

'리츠피아': 'https://www.reitpia.com/info/02.php',

'신한부동산신탁': 'https://www.shinhantrust.kr/biz-information/auction-properties?category=all',

'케이에이신탁': 'https://www.kait.com/sale-info/',

'하나자산신탁': 'https://www.hanatrust.com/ko/publicSale/goodsForPublicSale',

'코람코자산신탁': 'https://koramco.co.kr/ko/pubsaleList',

'우리자산신탁': 'https://www.wooriat.com/item/vendue/list',

'교보자산신탁': 'https://www.kyobotrust.co.kr/front/bbsList.do?bbsId=BBS_0005&preNoteid=&searchOp6=',

'엠지신탁': 'http://www.mgtrust.co.kr/auction/disposal/list.do',

'케이신탁': 'https://www.ktrust.co.kr/index.html?pages=thing&subs=thing02',

'신영신탁': 'http://www.shinyoungret.com/?pages=public&subs=sub01&pageno=1&startpage=1&q=',

'대신자산신탁': 'https://trust.daishin.com/thing_1',

'한국투자부동산신탁': 'https://kitrust.kr/property/auction?view=card'

}

```

---

## 🎯 필터링 조건

### 1차 필터 (필수 조건)

- ✅ 1회차 최저입찰가: 20억 이하

- ✅ 물건유형: 아파트, 상가, 오피스텔만

- ✅ 공매상태: 진행중 또는 수의계약 가능

- ✅ 수집기간: 조회 기준일 기준 10일 이내 공고

### 2차 우선순위 정렬 (상위 5개 선정)

1. 서울 아파트

2. 수도권 아파트 (경기도, 인천)

3. 지방 아파트

4. 서울 상가

5. 수도권 상가

6. 서울 오피스텔

7. 수도권 오피스텔

8. 지방 상가

9. 지방 오피스텔

같은 우선순위 내: 1회차 입찰가 낮은 순

---

## 📊 수집 데이터 항목

```python

property_data = {

'trust_name': '', # 신탁사명

'page_url': '', # 공고 페이지 URL

'title': '', # 물건명(제목)

'address': '', # 물건 주소(소재지)

'property_type': '', # 물건유형 (아파트/상가/오피스텔)

'status': '', # 공매상태

'rounds': [ # 회차별 공매정보 (리스트)

{

'round': 1, # 공매회차

'start_date': '', # 공매시작일시

'open_date': '', # 공매개찰일시

'unit': '', # 동/호수 (있는 경우만)

'price': 0, # 회차별 공매예정가

'area': 0, # 전용면적 (㎡)

'area_pyeong': 0, # 전용면적 (평)

'tenant': '' # 임대차 정보

}

]

}

```

---

## 📄 공매공고문 처리

### PDF 파일 (13개 신탁사)

```python

# 파일명 키워드: "공매공고", "공매공고문", "입찰공고"

# 라이브러리: pdfplumber 또는 PyPDF2

import pdfplumber

def extract_pdf_data(pdf_path):

with pdfplumber.open(pdf_path) as pdf:

# 표 데이터 추출

tables = pdf.pages[0].extract_tables()

# 텍스트 추출

text = pdf.pages[0].extract_text()

return tables, text

```

### HWP 파일 (한국토지신탁)

```python

# 라이브러리: olefile + hwp5 또는 pyhwpx

from hwp5 import Hwp5File

def extract_hwp_data(hwp_path):

hwp = Hwp5File(hwp_path)

# 텍스트 및 표 추출

return hwp

```

---

## 🗺️ 네이버 지도/부동산 자동 조회

### 1. 네이버 지도 URL 생성

```python

def get_naver_map_url(address):

"""

주소를 네이버 지도에서 검색하여 URL 반환

"""

import urllib.parse

from playwright.sync_api import sync_playwright

search_url = f"https://map.naver.com/v5/search/{urllib.parse.quote(address)}"

with sync_playwright() as p:

browser = p.chromium.launch()

page = browser.new_page()

page.goto(search_url)

page.wait_for_load_state('networkidle')

# 최종 URL 추출

final_url = page.url

browser.close()

return final_url

```

### 2. 네이버 부동산 조회

```python

def get_naver_land_url(address, property_type):

"""

네이버 부동산에서 물건 조회

- 아파트: 아파트명으로 조회 (조회 가능)

- 상가/오피스텔: 조회 불가능 시 그대로 반환

"""

if property_type == '아파트':

# 아파트명 추출 로직

apt_name = extract_apartment_name(address)

search_url = f"https://new.land.naver.com/complexes?ms=37.5,127.0,16&a=APT&q={urllib.parse.quote(apt_name)}"

else:

# 상가/오피스텔은 주소로만 검색

search_url = f"https://new.land.naver.com/offices?ms=37.5,127.0,16&q={urllib.parse.quote(address)}"

# 조회 시도 후 결과 없으면 빈 문자열 반환

return search_url if result_exists else ""

```

---

## 📝 레포트 생성 형식

### Obsidian Markdown 형식

```markdown

---

tags:

---

---

# [실행 주차] 신탁공매 과제

## 📌 추천 물건 TOP 2

### 🏆 1위: [물건명]

#### 1. 물건지

- [신탁사명](URL)

#### 2. 공매공고

| 공매호수 | 1차(날짜) | 2차(날짜) | 3차(날짜) | 4차(날짜) | 5차(날짜) | 6차(날짜) | 임대차 | 공고대상 | 전용평수 | 평형 |

|---------|----------|----------|----------|----------|----------|----------|--------|----------|----------|------|

| [호수] | [금액] | [금액] | [금액] | [금액] | [금액] | [금액] | [임차인] | [대상] | [면적] | [평] |

#### 3. 위치

- [주소](네이버지도 URL)

#### 4. 주변시세

- [네이버부동산 링크](URL)

#### 5. 개인의견

(비워둠)

---

### 🥈 2위: [물건명]

(동일 형식 반복)

---

## 📋 기타 관심 물건 (3-5위)

| 순위 | 물건명 | 공매개찰일 | 링크 |

|------|--------|-----------|------|

| 3 | [제목] | YYYY-MM-DD | [바로가기](URL) |

| 4 | [제목] | YYYY-MM-DD | [바로가기](URL) |

| 5 | [제목] | YYYY-MM-DD | [바로가기](URL) |

```

---

## 💾 저장 경로 및 파일명

```python

import datetime

def get_report_filename():

"""

실행 날짜 기준으로 파일명 생성

예: "1월 2주차 신탁공매 과제.md"

"""

now = datetime.datetime.now()

month = now.month

# 주차 계산

day = now.day

week = (day - 1) // 7 + 1

filename = f"{month}월 {week}주차 신탁공매 과제.md"

return filename

# 저장 경로

SAVE_PATH = ""

```

---

## ⚙️ 실행 설정

### 1. 수동 실행

```bash

python trust_auction_crawler.py

```

### 2. 자동 실행 (매주 토요일 오전 6시)

#### Cron (Mac/Linux)

```bash

# crontab -e

0 6 * * 6 cd /path/to/project && /usr/bin/python3 trust_auction_crawler.py

```

#### n8n 자동화 (추후)

```json

{

"nodes": [

{

"name": "Schedule Trigger",

"type": "n8n-nodes-base.scheduleTrigger",

"parameters": {

"rule": {

"interval": [

{

"field": "cronExpression",

"expression": "0 6 * * 6"

}

]

}

}

},

{

"name": "Execute Python Script",

"type": "n8n-nodes-base.executeCommand",

"parameters": {

"command": "python3 /path/to/trust_auction_crawler.py"

}

}

]

}

```

---

## 🛠️ Python 구현 구조

```python

# trust_auction_crawler.py

import asyncio

from datetime import datetime, timedelta

from playwright.async_api import async_playwright

import pdfplumber

from hwp5 import Hwp5File

class TrustAuctionCrawler:

def init(self):

self.trust_sites = {...} # 14개 신탁사 URL

self.properties = []

async def crawl_all_sites(self):

"""모든 신탁사 사이트 크롤링"""

for trust_name, url in self.trust_sites.items():

properties = await self.crawl_site(trust_name, url)

self.properties.extend(properties)

async def crawl_site(self, trust_name, url):

"""개별 신탁사 크롤링"""

# 1. 페이지 접속

# 2. 10일 이내 공고 필터링

# 3. 상세 페이지 데이터 수집

# 4. 필요시 PDF/HWP 다운로드 및 파싱

pass

def filter_properties(self):

"""필터링 조건 적용"""

filtered = []

for prop in self.properties:

# 1회차 입찰가 20억 이하

if prop['rounds'][0]['price'] <= 2_000_000_000:

# 물건유형 확인

if prop['property_type'] in ['아파트', '상가', '오피스텔']:

# 공매상태 확인

if prop['status'] in ['진행중', '수의계약가능']:

filtered.append(prop)

return filtered

def sort_by_priority(self, properties):

"""우선순위 정렬"""

priority_map = {

('서울', '아파트'): 1,

('수도권', '아파트'): 2,

('지방', '아파트'): 3,

('서울', '상가'): 4,

('수도권', '상가'): 5,

('서울', '오피스텔'): 6,

('수도권', '오피스텔'): 7,

('지방', '상가'): 8,

('지방', '오피스텔'): 9,

}

def get_priority(prop):

region = self.classify_region(prop['address'])

key = (region, prop['property_type'])

priority = priority_map.get(key, 99)

price = prop['rounds'][0]['price'] # 같은 우선순위 내 가격순

return (priority, price)

return sorted(properties, key=get_priority)[:5]

def classify_region(self, address):

"""지역 분류"""

if '서울' in address:

return '서울'

elif '경기' in address or '인천' in address:

return '수도권'

else:

return '지방'

async def get_naver_map_url(self, address):

"""네이버 지도 URL 생성"""

pass

async def get_naver_land_url(self, address, property_type):

"""네이버 부동산 URL 생성"""

pass

def generate_report(self, top5_properties):

"""마크다운 레포트 생성"""

report = self.create_frontmatter()

# Top 2: 상세 레포트

for i, prop in enumerate(top5_properties[:2], 1):

report += self.create_detailed_report(i, prop)

# 3-5위: 간단 리스트

report += self.create_simple_list(top5_properties[2:])

return report

def save_report(self, report, filename):

"""레포트 저장"""

save_path = ""

full_path = f"{save_path}/{filename}"

with open(full_path, 'w', encoding='utf-8') as f:

f.write(report)

async def main():

crawler = TrustAuctionCrawler()

# 1. 크롤링

await crawler.crawl_all_sites()

# 2. 필터링

filtered = crawler.filter_properties()

# 3. 우선순위 정렬 (Top 5)

top5 = crawler.sort_by_priority(filtered)

# 4. 레포트 생성

report = crawler.generate_report(top5)

# 5. 파일 저장

filename = get_report_filename()

crawler.save_report(report, filename)

print(f"✅ 레포트 생성 완료: {filename}")

if name == "__main__":

asyncio.run(main())

```

---

## 📦 필요 라이브러리

```bash

pip install playwright

pip install pdfplumber

pip install olefile hwp5

pip install python-dateutil

pip install beautifulsoup4

pip install requests

# Playwright 브라우저 설치

playwright install chromium

```

---

## ✅ 체크리스트

- [ ] 14개 신탁사 사이트별 크롤링 로직 구현

- [ ] PDF 공매공고문 파싱

- [ ] HWP 공매공고문 파싱 (한국토지신탁)

- [ ] 10일 이내 공고 필터링

- [ ] 1회차 입찰가 20억 이하 필터링

- [ ] 물건유형 필터링 (아파트/상가/오피스텔)

- [ ] 우선순위 정렬 알고리즘

- [ ] 네이버 지도 URL 자동 생성

- [ ] 네이버 부동산 URL 자동 생성 (아파트만)

- [ ] Markdown 레포트 생성

- [ ] Obsidian 경로 저장

- [ ] Cron 자동 실행 설정

- [ ] n8n 통합 준비

---

이 프롬프트를 기반으로 Python 크롤러를 구현하시면 됩니다! 추가 질문이나 구현 중 어려운 부분이 있으면 언제든 말씀해주세요! 🚀


레포트 결과는 아래와 같이 저장 되었습니다.

---

# 1월 3주차 신탁공매 과제

## 📌 추천 물건 TOP 2

### 🏆 1위: 147

#### 1. 물건지

- [한국토지신탁](https://www.koreit.co.kr/land-trust/sale/javascript:void(0))

#### 2. 공매공고

| 공매호수 | 1차 | 2차 | 3차 | 4차 | 5차 | 6차 | 임대차 | 공고대상 | 전용면적 | 평형 |

|---|---|---|---|---|---|---|---|---|---|---|

| | 0원 | - | - | - | - | - | - | 아파트 | - | - |

#### 3. 위치

- 대구광역시 중구 삼덕동2가 328 동성로 SK Leaders’ VIEW 아파트 5세대 공매공고 2025-11-21 272

- [네이버 지도에서 보기](https://map.naver.com/p/search/%EB%8C%80%EA%B5%AC%EA%B4%91%EC%97%AD%EC%8B%9C%20%EC%A4%91%EA%B5%AC%20%EC%82%BC%EB%8D%95%EB%8F%992%EA%B0%80%20328%20%EB%8F%99%EC%84%B1%EB%A1%9C%20SK%20Leaders%E2%80%99%20VIEW%20%EC%95%84%ED%8C%8C%ED%8A%B8%205%EC%84%B8%EB%8C%80%20%EA%B3%B5%EB%A7%A4%EA%B3%B5%EA%B3%A0%092025-11-21%09272?c=15.00,0,0,0,dh)

#### 4. 주변시세

- [네이버 부동산 링크](https://new.land.naver.com/404)

#### 5. 개인의견

---

## 📌 추천 물건 TOP 2

### 🥈 2위: 668

#### 1. 물건지

- [케이신탁](https://www.ktrust.co.kr/?pages=thing&subs=thing02&m=view&idx=728&page=1)

#### 2. 공매공고

| 공매호수 | 1차 | 2차 | 3차 | 4차 | 5차 | 6차 | 임대차 | 공고대상 | 전용면적 | 평형 |

|---|---|---|---|---|---|---|---|---|---|---|

| | 0원 | - | - | - | - | - | - | 상가 | - | - |

#### 3. 위치

- 668 서울특별시 동대문구 답십리동 1003-2 세기프라자 제1층 제101호 근린생활시설

- [네이버 지도에서 보기](https://map.naver.com/p/search/668%09%EC%84%9C%EC%9A%B8%ED%8A%B9%EB%B3%84%EC%8B%9C%20%EB%8F%99%EB%8C%80%EB%AC%B8%EA%B5%AC%20%EB%8B%B5%EC%8B%AD%EB%A6%AC%EB%8F%99%201003-2%20%EC%84%B8%EA%B8%B0%ED%94%84%EB%9D%BC%EC%9E%90%20%EC%A0%9C1%EC%B8%B5%20%EC%A0%9C101%ED%98%B8%20%EA%B7%BC%EB%A6%B0%EC%83%9D%ED%99%9C%EC%8B%9C%EC%84%A4?c=15.00,0,0,0,dh)

#### 4. 주변시세

- 상가/오피스텔은 네이버 부동산 조회 제한

#### 5. 개인의견

---

## 📋 기타 관심 물건 (3-5위)

| 순위 | 물건명 | 공매개찰일 | 링크 |

|------|--------|-----------|------|

| 3 | 4094 | | [바로가기](http://www.mgtrust.co.kr/auction/disposal/4216/show.do?page=1) |

| 4 | 153 | | [바로가기](https://www.koreit.co.kr/land-trust/sale/javascript:void(0)) |

| 5 | 150 | | [바로가기](https://www.koreit.co.kr/land-trust/sale/javascript:void(0)) |


Tip: 사용한 프롬프트 전문을 꼭 포함하고, 내용을 짧게 소개해 주세요.

Tip: 활용 이미지나 캡처 화면을 꼭 남겨주세요.

Tip: 코드 전문은 코드블록에 감싸서 작성해주세요. ( / 을 눌러 '코드 블록'을 선택)

(내용 입력)

결과와 배운 점

결과는 역시 초심자의 행운이 없었던 대 실패였습니다 ㅠㅠ 일단 크롤링을 위해서는 단계별로 지침을 주었어야 했는데 지침 자체가 너무 추상적이었던 것 같아요.

신탁 공매 사이트가 총 14군데 인데 사이트마다 구조가 너무 달랐던 것이 일단 기본적으로 문제였네요....

어떤 사이트는 iframe안에 pdf파일을 올려놓은 곳도 있고 어떤 곳은 아예 공매 정보를 사이트 페이지 내에 작성하지 않고 첨부파일로만 올려둔 곳도 있고요. 그리고 첨부파일도 hwp파일로 올린 곳도 있고요 ㅠㅠ

이런 정보들을 미리 분석해서 클로드에게 제대로 지침을 내려야 할 필요를 느꼈습니다. 이를 위해서는 14개 사이트를 각각 분석해서 하나씩 만들어서 나중에 이를 합치는 작업이 오히려 효율적이겠다 생각이 들더라고요. 한꺼번에 14개 사이트를 크롤링 하는 작업을 하다보니 클로드가 많이 헷갈려 하는 것 같습니다.

앞으로는 작업 단위를 쪼개서 하나씩 구현하는 방식으로 진행해서 원하는 결과물을 내도록 노력해보겠습니다.

도움 받은 글 (옵션)

(내용 입력)

1
5개의 답글

뉴스레터 무료 구독

👉 이 게시글도 읽어보세요