PromleeBlog
sitemap
aboutMe

posting thumbnail
RSS 수집과 웹 크롤링 - n8n 파이프라인 구축 시리즈 2편
RSS and Web Crawling - n8n Series Part 2

📅

들어가기 전에 🔗

안녕하세요.
오늘은 파이프라인의 진정한 시작점인 자동 실행 스케줄링과 데이터 수집 과정을 다루는 2편을 진행해 보겠습니다.

매일 아침 지정된 시간에 웹사이트의 최신 뉴스를 가져오는 봇의 심장을 만들어 볼 차례입니다.
기본적인 RSS 기술부터 피드를 제공하지 않는 사이트를 직접 긁어오는 웹 크롤링(Crawling) 기술까지 실전 예제와 함께 차근차근 알아보겠습니다.

스케줄 트리거와 크론 작업 🔗

스케줄 트리거
(Schedule Trigger) 노드는 우리가 정해둔 시간마다 파이프라인을 자동으로 작동시키는 알람 시계 같은 역할을 합니다.
컴퓨터 공학에서는 이렇게 정해진 시간에 반복되는 작업을
크론
(Cron)이라고 부릅니다.

매일 아침 자동화 설정 🔗

엔에잇엔의 왼쪽 검색창에서 스케줄 트리거 노드를 찾아 화면에 배치해 줍니다.

설정 창을 열고 동작 주기를 매일(Days)로 선택한 뒤 시간을 오전 8시로 지정해 줍니다.
도커 설정에서 타임존을 한국 시간(Asia/Seoul)으로 완벽하게 맞춰두었기 때문에 시스템은 매일 아침 8시 정각에 정확하게 첫 번째 톱니바퀴를 돌리게 됩니다.
Schedule Trigger 노드 추가
Schedule Trigger 노드 추가

RSS 기반 데이터 수집 🔗

웹사이트에서 데이터를 가져올 때 가장 안정적인 방법은
RSS
를 이용하는 것입니다.
RSS는 웹사이트 운영자가 기사 제목과 링크를 미리 깔끔하게 정리해 둔 표준 데이터 자판기입니다.

RSS 노드 활용하기 🔗

검색창에서
RSS 읽기
(RSS Read) 노드를 찾아 스케줄 트리거 노드 뒤에 선으로 연결해 줍니다.
설정 창의 유알엘(URL) 입력 칸에 타겟으로 삼을 아이티(IT) 뉴스 블로그의 RSS 주소를 적어줍니다.
예시로 https://feeds.arstechnica.com/arstechnica/technology-lab를 입력해 보겠습니다.
RSS Read 노드 설정 화면
RSS Read 노드 설정 화면

실행 버튼을 누르면 화면 오른쪽에 수집된 제이슨(JSON) 형식의 데이터가 출력됩니다.
디자인이 바뀌어도 데이터의 구조는 변하지 않기 때문에 로컬 환경에서 안정적인 데이터 수집 파이프라인을 구축할 때 아주 유용합니다.

웹 크롤링을 이용한 데이터 수집 🔗

하지만 모든 웹사이트가 친절하게 RSS를 제공하는 것은 아닙니다.
RSS가 없는 사이트는 우리가 직접 HTML 문서를 분석하여 필요한 정보만 긁어와야 하는데 이를 웹 크롤링 또는 스크래핑이라고 부릅니다.

해커뉴스 크롤링 실습 준비 🔗

전 세계 개발자들이 가장 많이 보는 정보 사이트인
해커뉴스
(Hacker News)를 예시로 직접 크롤링을 진행해 보겠습니다.
먼저 스케줄 트리거에
HTTP Request
노드를 추가해 줍니다.
HTTP Request 노드 추가
HTTP Request 노드 추가

설정 창에서 메서드(Method)를 GET으로 설정하고 주소창에 https://news.ycombinator.com/을 입력합니다.
이 노드를 실행하면 우리가 웹 브라우저로 사이트에 접속하는 것과 똑같이 해커뉴스의 전체 HTML 원본 코드를 통째로 가져오게 됩니다.

트리 자료구조와 씨에스에스 선택자 🔗

가져온 HTML 문서는 컴퓨터 과학의
트리
(Tree) 자료구조로 이루어져 있습니다.
가장 상위의 뿌리 태그부터 나뭇가지처럼 자식 태그들이 계층적으로 뻗어 나가는 형태입니다.

복잡한 트리 구조 속에서 우리가 원하는 기사의 제목과 링크만 쏙쏙 뽑아내기 위해서는
CSS 선택자
(CSS Selector)라는 경로 탐색 규칙이 필요합니다.
HTTP 요청 노드 바로 뒤에
HTML -> HTML 추출
(Extract HTML) 노드를 연결해 줍니다.

해커뉴스 웹페이지를 분석해 보면 기사 제목들은 모두 span.titleline > a 라는 공통된 경로(태그 구조)를 가지고 있습니다.
추출 노드의 설정 창에 아래와 같이 값을 입력하여 데이터의 껍질을 벗겨냅니다.
KeyCSS Selector추출할 속성Attribute
titlespan.titleline > aText
linkspan.titleline > aAttributehref
title
title
link
link
노드를 실행해 보면 복잡했던 코드는 모두 사라지고 우리가 지정한 제목(title)과 링크(link)만 배열 서랍장에 담겨 출력되는 것을 확인할 수 있습니다.
이처럼 HTTP 요청과 HTML 추출 노드 두 개를 조합하면 RSS가 없는 그 어떤 사이트라도 손쉽게 데이터를 수집할 수 있습니다.

결론 🔗

오늘은 파이프라인의 가장 첫 단계인 스케줄링 자동화와 데이터 수집 과정을 아주 깊이 있게 실습해 보았습니다.
특히 RSS가 없는 환경에서도 트리 자료구조를 탐색하는 크롤링 기법을 통해 데이터를 주도적으로 확보하는 방법을 익혔습니다.

이렇게 매일 아침 수집되고 필터링 된 원본 데이터는 우리가 3편에서 함께 실습할 필드 편집과 정규표현식 노드들로 전달되어 가공될 것입니다.

참고 🔗