n8n을 활용한 네이버 뉴스 스크래핑 시스템 (Notion 연동)
네이버 뉴스 스크래핑의 기술적 도전
무한 스크롤 구조의 문제점
기존 페이지네이션 방식의 한계
•
페이지 번호 없음: 1, 2페이지 버튼이 존재하지 않음
•
무한 스크롤: 스크롤에 따른 동적 콘텐츠 로딩
•
More 버튼: 추가 뉴스 로딩을 위한 AJAX 요청
개발자 도구를 통한 분석
•
Network 탭 활용: 스크롤 시 발생하는 HTTP 요청 분석
•
API 엔드포인트 발견: 뉴스 리스트를 가져오는 실제 URL
•
Query Parameter 분석: start 파라미터를 통한 페이지네이션
URL 구조 분석 및 활용
페이지네이션 매커니즘
•
start 파라미터: 10, 20, 30... 순차적 증가
•
첫 페이지: start=1로 설정하여 초기 뉴스 리스트 접근
•
다음 페이지 URL: 응답에 포함된 next URL 활용
HTTP 노드를 통한 데이터 수집
기본 HTTP 요청 설정
트리거 및 스케줄링
•
Owner Schedule: 정기적인 뉴스 수집 자동화
•
HTTP 노드: 네이버 뉴스 API 엔드포인트 호출
•
URL 구성: 분석한 API 엔드포인트 활용
Pagination 설정
•
자동 페이지네이션: n8n의 pagination 옵션 활용
•
Next URL: 응답의 response.body.url에서 다음 페이지 URL 추출
•
페이지 제한: 무한 스크롤 방지를 위한 10페이지 제한
크롤링 에티켓 준수
robots.txt 확인 및 준수
•
크롤링 정책: 웹사이트의 robots.txt 파일 확인
•
Crawl Delay: 서버 부하 방지를 위한 요청 간격
•
500ms 간격: 네이버의 정책에 맞는 적절한 지연 시간
HTML 파싱 및 데이터 추출
뉴스 목록 데이터 구조화
Loop over Items 활용
•
배치 처리: 10개 아이템을 개별적으로 처리
•
HTML 노드: 각 페이지의 HTML 콘텐츠 파싱
•
CSS 셀렉터: 특정 요소 추출을 위한 선택자 활용
제목 및 URL 추출
•
CSS 클래스 활용: .SDS_Comps_Text_Type_Headline_1 등
•
Parent Element: 제목의 상위 요소에서 URL 추출
•
href 속성: 링크 URL 정보 수집
코드 노드를 통한 데이터 가공
배열 구조 생성
•
타이틀 리스트: 추출된 제목들의 배열
•
URL 리스트: 해당 기사들의 링크 배열
•
인덱스 매칭: 제목과 URL의 순서 일치 보장
객체 리스트 생성
•
Loop 구조: 동일한 인덱스의 제목과 URL 결합
•
안정성 확보: 배열 길이 검증 및 예외 처리
•
10개 고정: 네이버 페이지네이션의 일관된 구조 활용
개별 기사 콘텐츠 수집
2차 HTTP 요청
기사 본문 스크래핑
•
개별 URL 접근: 각 뉴스 기사 페이지 방문
•
전체 HTML 수집: 사이트별 다른 구조 대응
•
Body 태그 활용: 안정적인 콘텐츠 추출
다양한 뉴스 사이트 대응
•
YTN, 연합뉴스: 각기 다른 HTML 구조
•
통합 접근법: body 태그 전체를 LLM에 전달
•
구조적 한계: 시맨틱 태그 미적용 사이트 대응
AI 기반 콘텐츠 분석
관련성 필터링 시스템
1차 필터링: 관련성 검증
•
비즈니스 로직: 회사(Apple) 관련 뉴스만 선별
•
고성능 모델: 정확한 관련성 판단을 위한 비싼 모델 사용
•
Boolean 출력: True/False 간단한 결과
•
비용 효율성: 출력 토큰 최소화
시스템 프롬프트 설계
•
역할 정의: 관련성 판단 전문가
•
압박 요소: "잘못 분석하면 해고될 수 있다" 등 정확성 강조
•
명확한 기준: 구체적인 판단 기준 제시
2차 분석: 감정 분석 및 요약
Filter 노드 활용
•
관련성 기반 필터링: True인 경우만 후속 처리
•
효율적 처리: 불필요한 분석 작업 제거
•
자원 절약: 관련 없는 뉴스의 LLM 호출 방지
통합 분석 프롬프트
•
멀티태스킹: 감정 분석과 요약을 한 번에 처리
•
한국어 출력: 최종 사용자를 위한 한국어 요약
•
구조화된 출력: Summary와 Sentiment 필드 분리
Notion 데이터베이스 연동
Notion 워크스페이스 설정
데이터베이스 생성
•
테이블 뷰: 뉴스 기사 관리를 위한 데이터베이스 구조
•
필드 구성: Title, Summary, Sentiment, URL 컬럼
•
페이지 vs 데이터베이스: Notion의 계층 구조 이해
Integration 설정
•
Notion Integration: 외부 API 접근을 위한 통합 앱 생성
•
내부 통합: 보안을 위한 Internal 설정
•
Secret Token: API 인증을 위한 토큰 발급
n8n Notion 노드 설정
인증 및 연결
•
Credential 생성: Notion Integration Token 등록
•
Database 연결: 생성한 데이터베이스와 연결
•
권한 부여: 데이터베이스 접근 권한 설정
페이지 생성 및 데이터 삽입
•
Create Page: 새로운 뉴스 기사 페이지 생성
•
Property 매핑: LLM 분석 결과를 Notion 필드에 매핑
•
실시간 업데이트: 분석 완료 즉시 Notion에 저장
오류 처리 및 안정성 확보
접근 차단 사이트 대응
크롤링 차단 현상
•
사이트별 정책: 일부 뉴스 사이트의 크롤링 방지
•
Access Denied: 브라우저에서는 접근 가능하지만 API 차단
•
Crawl Delay: robots.txt의 크롤링 지연 설정
Error Handling 설정
•
Continue on Fail: 오류 발생 시 워크플로우 중단 방지
•
Skip 처리: 접근 불가 사이트는 건너뛰기
•
안정적 운영: 일부 실패가 전체 프로세스를 중단시키지 않음
성능 최적화 및 확장성
모델 선택 전략
작업별 모델 차별화
•
관련성 판단: 고성능 모델로 정확성 확보
•
감정 분석: 경제적 모델(mini)로 비용 절약
•
토큰 효율성: Input vs Output 토큰 비용 고려
프롬프트 최적화
•
작업 분리 vs 통합: 성능에 따른 프롬프트 구조 조정
•
토큰 절약: 불필요한 정보 제거
•
품질 검증: 결과 품질에 따른 프롬프트 개선
확장 가능한 아키텍처
다양한 뉴스 소스 통합
•
Brave API: 해외 뉴스 소스
•
네이버 뉴스: 국내 뉴스 소스
•
통합 분석: 여러 소스의 일관된 처리
고급 기능 예고
•
Python 고도화: 다음 단계 개발 계획
•
더 정교한 분석: 고급 분석 기능 구현
•
사용자 정의: 개별 요구사항에 맞는 커스터마이징
실무 운영 고려사항
데이터 품질 관리
•
중복 제거: 동일 뉴스의 반복 수집 방지
•
데이터 검증: 수집된 정보의 정확성 확인
•
정기 점검: 시스템 안정성 모니터링
비용 및 리소스 관리
•
API 사용량: 각 서비스별 사용량 모니터링
•
LLM 비용: 모델 선택에 따른 비용 최적화
•
서버 자원: 크롤링 간격과 시스템 부하 균형