네이버
네이버 API로 블로그 데이터를 자동 수집해봤어요
신마성
2025. 5. 14. 15:19
본문 추출, 필터링까지 한 번에!
마케팅이나 트렌드 분석할 때
실시간 블로그 데이터를 자동으로 수집할 수 있다면
정말 유용하겠죠?
이번 글에서는 네이버 검색 API를 활용해
특정 키워드로 검색된 블로그 글의
- 제목
- 요약
- 블로거 이름
- 게시일
- 링크
그리고 본문 일부를 직접 추출해서 정리하는 작업까지 진행해봤어요.
핵심 기능 정리
- 네이버 오픈API로 블로그 검색 결과 받아오기
- Selenium으로 각 블로그 링크 열기
- 본문 중 필요한 문장만 추출
- csv로 자동 저장 (요청 시마다 새 파일로 저장됨)
1. 네이버 블로그 검색 API 사용하기
네이버 개발자센터에서 애플리케이션을 등록하고,
발급받은 Client ID / Client Secret은 .env 파일로 안전하게 관리했어요.
API 요청은 이렇게 구성돼요:
url = f"<https://openapi.naver.com/v1/search/blog.json?query={query}&display=20>"
headers = {
"X-Naver-Client-Id": os.getenv("NAVER_CLIENT_ID"),
"X-Naver-Client-Secret": os.getenv("NAVER_CLIENT_SECRET")
}
응답으로는 title, link, description, bloggername, postdate 같은 값이 들어 있어요.
2. Selenium으로 본문 열기 + 추출
네이버 블로그는 본문이 iframe 안에 들어 있어요.
그래서 requests 방식으로는 추출이 안 되고,
Selenium으로 직접 iframe에 들어가서 열어줘야 해요.
본문 위치도 블로그마다 다 달라서,
아래처럼 여러 셀렉터를 순차적으로 시도했어요:
selectors = [
"div.se-main-container", "div#postViewArea",
"div#contentArea", "div.post-view", "section.blog"
]
for sel in selectors:
content = soup.select_one(sel)
if content:
break
3. 필요한 문장만 필터링
모든 본문을 다 저장하지는 않았어요.
실무적으로 필요한 부분만 추출하는 방식으로 만들었어요.
- 앞 2문단
- 검색 키워드가 포함된 문장
- 감성 키워드(예: 맛있, 추천, 최고) 포함 문장
python
복사편집
lines = content.get_text(separator="\\n", strip=True).split("\\n")
keyword_lines = [line for line in lines if any(k in line for k in keywords)]
sentiment_lines = [line for line in lines if any(k in line for k in sentiment_keywords)]
first_two = lines[:2]
최종적으로는 중복 제거 후 1000자 이내로 정리했어요.
4. 실행할 때마다 새 파일로 저장
timestamp = datetime.now().strftime("%Y%m%d_%H%M%S")
filename = f"naver_blog_results_{timestamp}.csv"
이렇게 하면 매번 실행할 때마다
자동으로 새로운 csv 파일이 저장돼요.
5. 실행 후 출력 예시
[떡볶이] 검색 결과 수: 20
모든 데이터를 저장했습니다: 현재 폴더 안에 자동으로 저장돼요
(예: ./naver_blog_results_20250514_133452.csv)
오류 체크도 꼼꼼하게
- csv 파일이 열려 있으면 PermissionError로 안내
- 본문 추출 실패 시 (본문 없음)으로 처리
- API 요청 실패도 키워드별로 알려줘요
마무리
네이버 오픈API만 활용하면 간단한 제목 수집까지는 누구나 가능해요.
하지만 실전에서는 본문 내용 필터링 + 정제된 저장 방식이 훨씬 중요하죠.
이번 작업에서는 다음 흐름을 자동화했어요:
- 키워드로 검색 결과 수집
- 본문 접속 → 필요한 문장만 추출
- CSV로 저장 (타임스탬프 자동 포함)