2026/07/22

오늘의 이야기

네이버 맛집 정보 수집 + 소형 AI JSON 변환 기획서


1. 목표



  • 키워드 성시경 맛집으로 네이버 검색을 수행한다.

  • 검색 결과 목록의 요약문이 아닌, 각 결과의 상세 링크 페이지를 순회한다.

  • 상세 페이지에서 맛집 관련 텍스트를 추출/정제한다.

  • 라즈베리파이에서 구동 가능한 소형 모델(Qwen GGUF)을 사용해 정보를 구조화하고, 최종적으로 JSON 스키마로 출력한다.


2. 현재 문제와 개선 방향



  • 현재 구현은 검색 결과 페이지의 snippet만 읽어서 정보 밀도가 낮다.

  • 개선안은 다음 2단계 수집으로 전환한다.



  1. 검색 결과 페이지에서 상세 링크 목록 수집

  2. 각 상세 링크 페이지 본문에서 텍스트 수집 후 AI 분석


3. 전체 처리 파이프라인



  1. 검색 요청

    • Query: 성시경 맛집

    • User-Agent 포함



  2. 상세 링크 추출

    • 네이버 검색 결과 DOM에서 외부/내부 상세 링크 URL 수집

    • 광고/쇼핑/중복 링크 제거



  3. 상세 페이지 크롤링

    • 링크별 HTML 요청

    • title, 본문 후보(article, main, 블로그 본문 영역 등) 추출



  4. 텍스트 정제

    • 공백/줄바꿈 정규화

    • 메뉴판/가격/주소/전화 패턴 우선 보존

    • 페이지별 길이 제한 (메모리 보호)



  5. AI 구조화

    • 소형 Qwen 모델로 스키마 기반 정보 추출

    • page 단위 1차 JSON 생성



  6. 통합/중복 제거

    • 상호명+주소 기준 유사 항목 병합



  7. 최종 출력

    • restaurants 배열 JSON으로 저장/출력




4. 권장 JSON 스키마


{
"query": "성시경 맛집",
"generated_at": "ISO-8601 datetime",
"restaurants": [
{
"name": "상호명",
"address": "주소",
"contact": "연락처",
"menus": ["메뉴1", "메뉴2"],
"review_summary": "리뷰 요약",
"source_url": "정보를 추출한 상세 페이지 URL"
}
]
}

5. 라즈베리파이 소형 모델 전략



  • 우선 모델: Qwen/Qwen2.5-0.5B-Instruct-GGUF

  • 권장 파일: qwen2.5-0.5b-instruct-q4_k_m.gguf

  • 이유: 낮은 메모리 사용량, 구조화 추출 작업에 충분한 품질


추론 권장 설정(초안)



  • n_ctx: 1024~2048

  • n_threads: 라즈베리파이 CPU 코어 수 기반(예: 4)

  • temperature: 0.0 (형식 안정성 우선)

  • 출력 실패 시 재시도: 프롬프트에 “JSON만 출력” 강제 후 1회 재시도


6. Hugging Face에서 Qwen 모델 설치/다운로드


6.1 Python 패키지 설치


pip install --upgrade huggingface_hub llama-cpp-python requests beautifulsoup4

6.2 모델 다운로드 코드


from huggingface_hub import hf_hub_download

model_path = hf_hub_download(
repo_id="Qwen/Qwen2.5-0.5B-Instruct-GGUF",
filename="qwen2.5-0.5b-instruct-q4_k_m.gguf"
)
print(model_path)

6.3 모델 로드 예시


from llama_cpp import Llama

llm = Llama(
model_path=model_path,
n_ctx=1024,
n_threads=4,
verbose=False
)

7. 크롤링/분석 구현 포인트



  • 링크 수집 개수 제한: 예) 상위 10~20개 상세 링크

  • 요청 간 지연: 예) 0.5~1.0초(과도 요청 방지)

  • 타임아웃/실패 처리: 실패 링크는 스킵하고 로그 기록

  • 본문 선택자 다중 전략:

    • article, main, .se-main-container, #postViewArea 등 순차 시도



  • 페이지별 추출 결과를 먼저 JSON으로 저장(디버깅 용이)


8. 프롬프트 설계 방향



  • System Prompt:

    • “맛집 정보 추출기”

    • “설명문 금지, JSON만 출력”

    • “스키마 외 키 금지”



  • User Prompt:

    • 페이지 URL + 정제 텍스트 전달

    • 필드별 누락 허용 규칙(null 또는 "") 명시




9. 품질 기준(Definition of Done)



  • 상세 링크 기반으로 최소 N개(예: 5개 이상) 식당 후보가 JSON에 채워짐

  • JSON 파싱 100% 성공(실패 시 재시도 로직으로 보완)

  • 각 항목에 name 또는 address 중 최소 1개 이상 유효값 존재

  • source_url 추적 가능


10. 개발 단계 제안



  1. 링크 수집기 구현/검증

  2. 상세 페이지 본문 추출기 구현/검증

  3. Qwen JSON 추출 파이프라인 연결

  4. 병합/중복 제거 및 최종 JSON 생성

  5. 오류 처리/재시도/로그 보강


11. 주의사항



  • 사이트 이용정책/robots.txt/요청 빈도 제한을 준수한다.

  • 개인 정보 또는 민감 정보는 저장/출력하지 않는다.

  • 모델 출력은 신뢰도 한계가 있으므로 원문 URL 추적 필드를 유지한다.





댓글 없음:

댓글 쓰기

오늘의 이야기

네이버 맛집 정보 수집 + 소형 AI JSON 변환 기획서 1. 목표 키워드 성시경 맛집 으로 네이버 검색을 수행한다. 검색 결과 목록의 요약문이 아닌, 각 결과의 상세 링크 페이지 를 순회한다. 상세 페이지에서 맛집 ...