네이버 블로그 검색
플레이그라운드에서 수집 →채널 코드 naver_blog_search · 수집 환경 linux
네이버 블로그 검색에서 키워드로 글을 정렬별(최신/정확도)·기간별로 수집합니다. 로그인 불필요(공개 검색). 기본은 제목·요약·블로거(닉네임/블로그명)·작성시각·링크를 가져오며, '본문 수집'을 켜면 글 상세를 열어 전체 본문과 초 단위 정확한 작성시각을, '댓글 수집'을 켜면 댓글·대댓글까지 보강합니다(둘 중 하나만 켜도 상세를 1회 조회). '내돈내산 글만' 옵션으로 네이버가 표기한 내돈내산 글만 골라 수집할 수 있고, 필터를 켜지 않아도 글마다 내돈내산 여부(extra.buy_with_my_own_money)가 함께 제공되어 광고·협찬 글 구분에 쓸 수 있습니다. ⚠️ 한 번에 최대 1,000건까지 수집됩니다(네이버 검색 깊이 제한) — 더 필요하면 기간을 나눠 요청하세요. 삭제되었거나 비공개로 바뀐 글은 본문 대신 검색 요약만 담기고 extra.post_unavailable=true로 표시됩니다. 데이터센터 IP로 시도하다 차단되면 자동으로 레지덴셜 프록시로 우회합니다(차단 IP/포트는 허브가 쿨다운 중앙관리). result_count가 limit보다 적으면 오류가 아니라 가용 글 부족(깊이 한도/기간 필터) 또는 일시 차단입니다.
요청 파라미터
아래 값들을 POST /api/v1/collect 의 params 객체에 담아 보냅니다.
| 키 | 타입 | 필수 | 기본 | 설명 |
|---|---|---|---|---|
| keyword | text | 예 | — | 네이버 블로그 검색어(예: 메가커피) |
| sort | enum | — | latest | 네이버 블로그검색 정렬(실측): 최신순=latest(orderBy=recentdate) · 정확도순=relevance(orderBy=sim) |
| limit | number | — | 50 | 최대 수집 글 수(상한 1,000 — 초과 입력 시 1,000으로 조정). 더 모으려면 기간을 나눠 요청하세요 |
| start_date | date (YYYY-MM-DD) | — | — | 기간 필터. ⚠️ 시작일·종료일 중 하나만 넣어도 되지만(비운 쪽은 자동으로 채웁니다), 네이버 특성상 두 날짜가 함께 전달돼야 필터가 걸립니다 |
| end_date | date (YYYY-MM-DD) | — | — | 당일 포함. 비우면 오늘까지. 시작·종료 모두 비우면 기간 제한 없이 최신순으로 상한까지 |
| buy_with_my_own_money | bool | — | false | 체크하면 네이버가 "내돈내산"으로 표기한 글만 수집합니다(isBuyWithMyOwnMoney). 체크하지 않아도 글마다 내돈내산 여부가 extra.buy_with_my_own_money로 함께 옵니다 |
| collect_body | bool | — | false | 켜면 글마다 상세를 열어 전체 본문 + 초 단위 정확한 작성시각을 보강(글당 요청 1회 추가 → 느려지고 데이터 사용량이 크게 늘어남). 끄면 검색 결과의 제목·요약만 수집 |
| collect_comments | bool | — | false | 켜면 댓글·대댓글까지 수집(각 글 extra.comments[]). 본문 수집과 같은 상세 조회를 공유합니다. 비밀 댓글은 내용 없이 표시되며 총 댓글수에는 포함됩니다 |
| exclude_keywords | text | — | — | 이 단어가 제목에 들어간 글은 수집 단계에서 제외(상세 요청 전 → 빠르고 상한 미차감). 쉼표로 여러 개, 한 단어 안 띄어쓰기 허용. 본문 수집을 켜면 받아온 본문에서도 한 번 더 제외 |
수집 기간(
검색은 최신순이라 위에서부터 훑어 내려갑니다.
start_date ~ end_date)검색은 최신순이라 위에서부터 훑어 내려갑니다.
- 둘 다 비우면 → 가장 최신 글부터
limit개수까지 수집합니다. start_date만 → 그 날짜 이후 글만 (그보다 오래된 글을 만나면 수집 종료).end_date만 → 그 날짜까지(당일 포함). 그보다 최신 글은 건너뜁니다.- 둘 다 → 두 날짜 사이 구간만 수집.
제외 키워드(
이 단어가 들어간 글은 수집 단계에서 걸러집니다. 쉼표(
exclude_keywords)이 단어가 들어간 글은 수집 단계에서 걸러집니다. 쉼표(
,)로 여러 개를 넣고,
한 단어 안에 띄어쓰기도 쓸 수 있습니다(예: "무료 나눔, 광고" → 무료 나눔·광고 두 개).
대소문자는 구분하지 않고 부분 일치로 판정합니다.
- 기본은 제목 기준 — 상세 요청을 보내기 전에 걸러서 빠르고, 수집 상한(
limit)도 차감하지 않습니다. - 본문 수집(
collect_body: true)을 켜면, 이미 받아온 본문에서도 한 번 더 걸러냅니다(추가 요청 없음). - 비우면 → 제외 없이 전부 수집.
댓글 수집(
기본은 제목·본문만 HTTP로 빠르게 수집합니다. 댓글까지 받으려면 이 값을 켜세요. 댓글은 JS로 로드되어 글마다 Chrome으로 접속하므로 시간이 더 걸립니다(댓글 0개 글은 건너뜀). 수집된 댓글은 각 글의
collect_comments: true)기본은 제목·본문만 HTTP로 빠르게 수집합니다. 댓글까지 받으려면 이 값을 켜세요. 댓글은 JS로 로드되어 글마다 Chrome으로 접속하므로 시간이 더 걸립니다(댓글 0개 글은 건너뜀). 수집된 댓글은 각 글의
extra.comments[] 배열에 담깁니다.
요청 예시
curl -X POST https://scraper.conbus.co.kr/api/v1/collect \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"channel": "naver_blog_search",
"params": {
"keyword": "메가커피",
"sort": "latest",
"limit": 50,
"start_date": "2026-06-01",
"end_date": "2026-06-15",
"buy_with_my_own_money": false,
"collect_body": false,
"collect_comments": true,
"exclude_keywords": "광고, 협찬"
}
}'
응답 (202 Accepted)
요청은 즉시 큐에 적재되고 request_id 를 돌려줍니다. 실제 수집은 워커가 비동기로 처리합니다.
{ "success": true, "data": { "request_id": 42, "channel": "naver_blog_search",
"status": "pending", "status_url": "https://scraper.conbus.co.kr/api/v1/requests/42" } }
결과 조회 — GET /requests/{id}
같은 API 키로 request_id 를 조회합니다. 상태에 따라 응답이 달라집니다.
진행 중 (pending / running)
아직 끝나지 않았으면 progress 로 진행 상황만 옵니다(items 없음).
{
"success": true,
"data": {
"request_id": 42,
"channel": "naver_blog_search",
"status": "running",
"external_ref": null,
"result_count": null,
"started_at": "2026-06-16T09:00:05+09:00",
"finished_at": null,
"duration_ms": null,
"duration_sec": null,
"created_at": "2026-06-16T09:00:00+09:00",
"updated_at": "2026-06-16T09:01:30+09:00",
"progress": {
"count": 12,
"phase": "comments"
},
"elapsed_ms": 85000
}
}
완료 (done) — 댓글 포함
status 가 done 이면 data.items[] 에 결과가 담깁니다.
실패 시엔 status: "failed" 와 error 가 옵니다.
{
"success": true,
"data": {
"request_id": 42,
"channel": "naver_blog_search",
"status": "done",
"external_ref": null,
"result_count": 1,
"started_at": "2026-06-16T09:00:05+09:00",
"finished_at": "2026-06-16T09:02:00+09:00",
"duration_ms": 115000,
"duration_sec": 115,
"created_at": "2026-06-16T09:00:00+09:00",
"updated_at": "2026-06-16T09:02:00+09:00",
"items": [
{
"post_id": "coffeelover/223812345678",
"url": "https://blog.naver.com/coffeelover/223812345678",
"title": "메가커피 신메뉴 3종 내돈내산 후기",
"author": "커피러버",
"posted_at": "2026-08-05T10:45:20+09:00",
"views": null,
"comment_count": 12,
"recommends": null,
"body": "오늘은 메가커피 신메뉴 3종을 직접 사 먹어봤습니다. 먼저 아이스 아메리카노는 ...",
"source": "네이버 블로그 / 커피러버의 카페 탐방기",
"extra": {
"blog_id": "coffeelover",
"log_no": "223812345678",
"blog_name": "커피러버의 카페 탐방기",
"nickname": "커피러버",
"snippet": "오늘은 메가커피 신메뉴 3종을 직접 사 먹어봤습니다 ...",
"sort": "latest",
"buy_with_my_own_money": true,
"is_market_post": null,
"thumbnail": "https://blogthumb.pstatic.net/.../thumb1.jpg",
"post_unavailable": null,
"via_proxy": null,
"source_kind": "blog_search",
"comments": [
{
"comment_id": "201",
"author": "멍멍이",
"text": "정보 감사합니다!",
"date": "2026-06-10 15:01:00",
"is_reply": false
},
{
"comment_id": "202",
"author": "냥집사",
"text": "도움 되셨다니 다행이에요",
"date": "2026-06-10 15:10:00",
"is_reply": true
}
]
}
}
]
}
}
실패 (failed)
status 가 failed 면 error 에 사유가 옵니다(items 없음).
일시적 실패는 자동 재시도되며, 위 응답은 마지막 시도 기준입니다.
{
"success": true,
"data": {
"request_id": 42,
"channel": "naver_blog_search",
"status": "failed",
"external_ref": null,
"result_count": 0,
"started_at": "2026-06-16T09:00:05+09:00",
"finished_at": "2026-06-16T09:00:16+09:00",
"duration_ms": 11000,
"duration_sec": 11,
"created_at": "2026-06-16T09:00:00+09:00",
"updated_at": "2026-06-16T09:00:16+09:00",
"error": "수집 실패 — 잠시 후 다시 시도하세요"
}
}
최상위 data에는 항상 request_id·channel·status·external_ref·result_count·started_at·finished_at·duration_ms·duration_sec·created_at·updated_at이 포함되고, 상태에 따라 items(done)·progress+elapsed_ms(진행 중)·error(failed/cancelled)가 추가됩니다. duration_*는 허브가 잰 수집 소요 시간(시작~종료) — 자세히는 비동기 & 콜백. 요청을 잘못 시작했다면 취소 API로 중단할 수 있습니다.
결과 필드 (items[])
| 필드 | 설명 |
|---|---|
| post_id | 글 고유 ID — 블로그아이디/글번호. 재수집 중복 제거 키 |
| url | 블로그 글 주소 blog.naver.com/{블로그아이디}/{글번호} |
| title / body | title=글 제목(검색어 강조 태그 제거됨) / body는 기본(collect_body=false)이면 검색 요약, collect_body=true면 본문 전체. 삭제·비공개 글은 요약이 유지되고 extra.post_unavailable=true가 붙습니다 |
| author | 블로거 닉네임(extra.nickname, 없으면 블로그명) |
| posted_at | 작성 시각 (ISO8601, KST) — 검색 결과가 정확한 시각(분 단위)을 주므로 상대표기 역산이 없습니다. 상세 수집(collect_body/collect_comments)을 켜면 글 상세의 초 단위 시각으로 보정됩니다 |
| views / comment_count | views=null(블로그 조회수는 비로그인 공개 API 미제공) / comment_count=기본 0, 댓글 수집 시 실제 댓글 수(비밀 댓글 포함한 총계) |
| recommends | 미제공 — 항상 null(공감 수는 비로그인으로 제공되지 않음) |
| source | 네이버 블로그 / 블로그명 |
| extra.blog_id | 블로그 아이디 |
| extra.log_no | 글번호 |
| extra.blog_name | 블로그 이름 |
| extra.nickname | 블로거 닉네임 |
| extra.snippet | 검색 결과 요약문 |
| extra.sort | 정렬 값(요청값) |
| extra.buy_with_my_own_money | 네이버가 내돈내산으로 표기한 글이면 true — 필터를 켜지 않아도 항상 제공(광고·협찬 구분용) |
| extra.is_market_post | 블로그마켓(판매) 글이면 true, 아니면 null |
| extra.thumbnail | 대표 썸네일 이미지 URL |
| extra.post_unavailable | 상세 조회 시 글이 삭제·비공개면 true(요약만 수집됨), 정상이면 null |
| extra.via_proxy | 레지덴셜 프록시로 우회 수집됐으면 true |
| extra.source_kind | blog_search |
| extra.comments | 댓글 배열(아래 표) — collect_comments=true일 때 |
채널 참고
- 내돈내산(
buy_with_my_own_money) — 켜면 네이버가 내돈내산으로 표기한 글만 수집합니다. 끄더라도 각 글의extra.buy_with_my_own_money로 여부가 항상 오므로, 전체를 모은 뒤 광고·협찬 글과 나눠 분석할 수도 있습니다. - 본문·댓글은 상세 조회 1회를 공유합니다 —
collect_body·collect_comments중 하나만 켜도 그 글의 상세를 한 번 조회합니다(둘 다 켜도 본문 요청 수는 같음). ⚠️ 본문 수집은 데이터 사용량이 목록만 수집할 때보다 수십 배 커지므로(글당 약 30KB) 대량 수집 시 유의하세요. - 수집 한도 — 최대 1,000건(네이버 검색 깊이 제한).
limit에 1,000을 넘겨 넣어도 1,000으로 조정됩니다. 더 모으려면start_date~end_date로 기간을 나눠 요청하세요 — 구간마다 1,000건씩 수집됩니다. - 기간은 두 날짜가 함께 전달돼야 필터가 걸립니다. 한쪽만 입력해도 비운 쪽을 자동으로 채워 보내므로 그대로 쓰셔도 됩니다.
- 댓글은 대댓글까지 수집되며 각 항목의
is_reply·parent_id로 구분됩니다. 비밀 댓글은 비로그인으로 내용을 볼 수 없어 내용이 비어 있지만 총 댓글수에는 포함되므로, 수집된 댓글 수가comment_count보다 적을 수 있습니다(정상).
댓글 필드 (extra.comments[])
| 필드 | 설명 |
|---|---|
| comment_id | 댓글 고유 ID |
| author | 작성자 |
| text | 내용(디시콘만 있으면 대체 텍스트) |
| date | 작성 시각 |
| is_reply | 대댓글 여부(true=답글) |
결과 수신(폴링·콜백) 방식은 비동기 & 콜백을 참고하세요.