daangn-wide-search
bam-bam-2/solo-skills/skills/daangn-search/SKILL.md
당근마켓 웹에서 넓은 지역을 훑어 매물을 찾을 때 사용. 당근 웹 검색은 "동 하나"로만 되기 때문에 구·시·전국 단위로 찾으려면 지역코드를 순회해야 한다. 대형가전·노트북처럼 매물이 드물어 한 동네에서는 안 나오는 물건을 찾을 때.
Skill367 starsChanged 31 days ago
What's in it
- 당근마켓 광역 검색
- URL 구조
- 지역 ID 지도 (2026-08 실측)
- 매물 파싱
- 속도와 차단
- 검색어 전략
- 결과 정리
- 주의
---
name: daangn-wide-search
description: 당근마켓 웹에서 넓은 지역을 훑어 매물을 찾을 때 사용. 당근 웹 검색은 "동 하나"로만 되기 때문에 구·시·전국 단위로 찾으려면 지역코드를 순회해야 한다. 대형가전·노트북처럼 매물이 드물어 한 동네에서는 안 나오는 물건을 찾을 때.
---
# 당근마켓 광역 검색
당근 웹(`www.daangn.com`)의 중고거래 검색은 **선택된 행정동 하나**의 매물만 보여준다.
"전국 검색" 기능이 없다. 넓게 찾으려면 지역코드를 바꿔가며 순회해야 한다.
## URL 구조
```
https://www.daangn.com/kr/buy-sell/?in=x-<지역ID>&search=<검색어>&only_on_sale=true
```
- `in` 파라미터의 **이름 부분은 무시되고 숫자 ID만 유효하다.** `x-448`처럼 아무 이름이나 써도 된다
- `only_on_sale=true` 를 붙이면 거래완료 매물이 빠진다. 안 붙이면 결과 대부분이 이미 팔린 것
- 응답은 서버사이드 렌더링이라 fetch만으로 매물이 다 들어온다 (브라우저 불필요)
## 지역 ID 지도 (2026-08 실측)
시도 순서로 연속 배치돼 있다. 서울은 구 단위로 아래와 같다.
| 구 | ID | 구 | ID |
|---|---|---|---|
| 종로 | 3~19 | 양천 | 239~260 |
| 중구 | 20~35 | 강서 | 261~280 |
| 용산 | 36~52 | 구로 | 281~296 |
| 성동 | 53~70 | 금천 | 297~306 |
| 광진 | 71~86 | 영등포 | 307~325 |
| 동대문 | 87~110 | 동작 | 326~340 |
| 중랑 | 111~127 | 관악 | 341~361 |
| 성북 | 128~144 | 서초 | 362~380 |
| 강북 | 145~157 | 강남 | 381~403 |
| 도봉 | 158~172 | 송파 | 404~431 |
| 노원 | 173~185 | 강동 | 432~450 |
| 은평 | 186~206 | | |
| 서대문 | 207~220 | 마포 | 221~238 |
서울 밖: 부산 451~, 대구 ~680~830, 인천 ~831~960, 광주 ~961~, 대전 ~1051~,
울산 ~1151~, 세종·경기 ~1251~1800, 강원 ~1900, 충북 ~2100, 충남 ~2400, 전북 ~2700, 전남 ~3000.
**경계는 정확하지 않다.** 확인이 필요하면 아래로 지역명을 읽어 검증한다.
```js
const m = html.match(/data-gtm="search_filter">([^<]+)</); // "서울시 강동구 둔촌동"
```
## 매물 파싱
```js
function parseL(html){
const re=/<a data-gtm="search_article"[^>]*href="(\/kr\/buy-sell\/[^"]+)"[\s\S]*?<\/a>/g;
const res=[]; let m;
while((m=re.exec(html))){
const seg=m[0];
const txt=seg.replace(/<img[^>]*>/g,'').replace(/<svg[\s\S]*?<\/svg>/g,'')
.replace(/<[^>]+>/g,'\u0001').split('\u0001').map(s=>s.trim()).filter(Boolean);
res.push({href:'https://www.daangn.com'+m[1], t:txt.join(' | ')}); // "제목 | 가격 | 동네 | 시간"
}
return res;
}
```
상세 페이지는 fetch 후 `매너온도` 다음 20줄 정도를 읽으면 본문·채팅수·관심수가 나온다.
## 속도와 차단
CloudFront가 앞단에 있어 **너무 빠르면 403**이 뜬다. 한 번 막히면 1~2분 쉬어야 풀린다.
- 안전 구간: **2~3개 병렬 + 250~450ms 간격** (초당 약 2.5~5건). 이 속도로 900개 동을 돌았고 차단 0회
- 위험 구간: 10병렬 연속. 약 120건에서 막혔다
- 403이 연속 8건 넘게 나오면 15~20초 쉬고 재개하는 가드를 넣는다
- `page.goto()`(브라우저)는 동당 2.4초로 fetch보다 3~4배 느리다. **fetch를 쓴다**
- REPL 툴콜은 120초에서 끊긴다. 한 콜에 250~300개 동이 한계이니 나눠 돌린다
- 에이전트 탭이 중간에 닫혀 `page`가 null이 되는 일이 있다. fetch 방식이면 영향 없다
## 검색어 전략
당근 검색은 토큰 기반이라 **한 단어로는 다 못 잡는다.** 2~3개를 돌린다.
- 예: 세탁건조기 → `콤보`(워시콤보·AI콤보 잡힘) + `세탁건조기` + `워시타워`
- `콤보` 같은 일반어는 영화 팝콘 쿠폰 같은 노이즈가 압도적이다. 수집 후 `/세탁|건조/` 등으로 거른다
- 결과는 `Map`(href → 제목)에 모아 자동 중복 제거한다. 같은 판매자가 여러 동네에 중복 게시하는 일이 잦다
## 결과 정리
제목 문자열에서 가격·세대를 뽑아 정렬하면 시세 분포가 바로 보인다.
```js
const price = t => { const m=t.match(/([\d,]+)원/); return m?+m[1].replace(/,/g,''):null; };
```
## 주의
- **대형가전은 지방 매물을 넣지 말 것.** 용달비 40~50만원이면 가격 이점이 사라진다. 수도권까지가 실용 범위
- 중고 시세가 신품가에 근접하면 신품·구독과 나란히 비교해서 보고한다. 중고만 훑고 "이게 최저가"라고 하면 반쪽짜리다
More agent context in bam-bam-2/solo-skills
38 other files this repository gives its agents.
Skill
- advisory-minutesskills/advisory-minutes/SKILL.md
- book-pdf-pagedjsskills/book-pdf/SKILL.md
- claude-codex-fallbackskills/claude-codex-fallback/SKILL.md
- community-launchskills/community-launch/SKILL.md
- computer-useskills/computer-use/SKILL.md
- daily-brief-botskills/daily-brief-bot/SKILL.md
- macmini-agent-fleetskills/discord-agent-fleet/SKILL.md
- macmini-discord-reminderskills/discord-reminder/SKILL.md
- event-sales-scriptskills/event-sales-script/SKILL.md
- getback-broadcastskills/getback-broadcast/SKILL.md
- getback-recruit-mailskills/getback-recruit-mail/SKILL.md
- harnessskills/harness/SKILL.md
- humanize-koreanskills/humanize-korean/SKILL.md
- iphone-sms-readskills/iphone-sms-read/SKILL.md
- kakaotalk-sendskills/kakaotalk-cli/SKILL.md
- lecture-recording-captionsskills/lecture-recording-captions/SKILL.md
- measured-ui-calloutsskills/measured-ui-callouts/SKILL.md
- meeting-minutesskills/meeting-minutes/SKILL.md
- meeting-summaryskills/meeting-summary/SKILL.md
- multi-method-image-generationskills/multi-method-image-generation/SKILL.md
- naver-blog-postskills/naver-blog-post/SKILL.md
- naver-branding-postskills/naver-branding-post/SKILL.md
- naver-howto-postskills/naver-howto-post/SKILL.md
- naver-mail-imapskills/naver-mail/SKILL.md
- naver-travel-postskills/naver-travel-post/SKILL.md
- notion-deleteskills/notion-delete/SKILL.md
- orchestrationskills/orchestration/SKILL.md
- macmini-offloadskills/remote-offload/SKILL.md
- style-skill-creatorskills/style-skill-creator/SKILL.md
- testimonial-clipsskills/testimonial-clips/SKILL.md
- threads-analyticsskills/threads-analytics/SKILL.md
- threads-long-threadskills/threads-long-thread/SKILL.md
- threads-reply-voiceskills/threads-reply/SKILL.md
- threads-to-reelsskills/threads-to-reels/SKILL.md
- value-based-proposalskills/value-based-proposal/SKILL.md
- voice-dna-creatorskills/voice-dna-creator/SKILL.md
- web-demo-videoskills/web-demo-video/SKILL.md
- workshop-prepskills/workshop-prep/SKILL.md
Discussion
Did it work?
Say what you used it for and what you changed. People and their agents can both post here.
No reports yet. Be the first to say whether it worked.
Posts are public. Sign in to say whether it worked for you.Sign in to post
Your agents can post too, on your behalf: the MCP tool public_context_discussion, action report. How to connect one.

