카테고리 없음

15주차 (5)

jaeoun0238 2025. 2. 7. 21:16

Cheerio와 Puppeteer 자세한 설명

웹 스크래핑(Web Scraping)이나 웹 자동화(Web Automation)를 수행할 때 CheerioPuppeteer는 많이 사용되는 도구입니다. 하지만 두 라이브러리는 목적과 기능이 다릅니다. 하나씩 자세히 설명해드리겠습니다.


1. Cheerio

Cheerio는 Node.js 환경에서 jQuery와 비슷한 방식으로 HTML을 파싱하고 조작할 수 있도록 해주는 경량 라이브러리입니다.

📌 주요 특징

  • HTML을 로드하고 조작하는 기능 제공 (DOM 탐색 및 조작)
  • 가볍고 빠름 (헤드리스 브라우저가 필요 없음)
  • Puppeteer 또는 Axios와 함께 사용 가능
  • 실제 브라우저를 실행하지 않음 → JavaScript가 동적으로 생성하는 콘텐츠를 가져올 수 없음
  • 검색 엔진 크롤러처럼 HTML 구조 분석에 적합

 

📌 Cheerio의 한계

  • JavaScript로 생성되는 콘텐츠를 크롤링할 수 없음 (서버에서 제공하는 정적인 HTML만 처리 가능)
  • 버튼 클릭, 로그인 등 브라우저 상호작용이 불가능함
  • 동적 렌더링이 필요한 웹사이트에는 Puppeteer 같은 도구 필요

💡 Cheerio는 "HTML 데이터 파싱"에 특화되어 있고, 동적인 웹페이지 크롤링은 어렵습니다.


2. Puppeteer

Puppeteer는 Google이 만든 헤드리스 브라우저 자동화 라이브러리입니다. Chrome 브라우저를 프로그래밍적으로 실행하여 웹 자동화, 웹 스크래핑, 테스트 등의 작업을 수행할 수 있습니다.

📌 주요 특징

  • 실제 브라우저(Chrome, Chromium)를 제어할 수 있음
  • JavaScript가 동적으로 생성한 콘텐츠까지 크롤링 가능
  • 버튼 클릭, 입력, 로그인 등의 자동화가 가능함
  • PDF 생성, 스크린샷 캡처 기능 제공
  • 단점: 속도가 느리고 메모리 사용량이 많음

📌 Puppeteer의 장점

  • 동적인 JavaScript 렌더링 지원 → Cheerio가 처리하지 못하는 JavaScript 기반 웹사이트도 크롤링 가능
  • 실제 사용자처럼 브라우저를 조작 가능 → 버튼 클릭, 로그인, 데이터 입력 등의 자동화 가능
  • 스크린샷, PDF 생성 등의 기능 제공

📌 Puppeteer의 단점

  • 속도가 상대적으로 느림 (실제 브라우저 실행이 필요하기 때문)
  • 메모리 사용량이 많음 (브라우저를 실행해야 하기 때문)
  • 서버 환경에서 실행하려면 Headless 모드 설정 필요 (headless: true 옵션)

📌 Cheerio vs Puppeteer 비교

특징CheerioPuppeteer

브라우저 필요 여부 ❌ 없음 (HTML 파싱만 수행) ✅ 있음 (Chrome 실행)
JavaScript 렌더링 ❌ 불가능 ✅ 가능
속도 🚀 빠름 🐢 상대적으로 느림
메모리 사용량 ✅ 적음 ❌ 많음
자동화 기능 ❌ 없음 (HTML 조작만 가능) ✅ 있음 (클릭, 로그인, 입력 가능)
용도 정적 HTML 데이터 분석, 웹 스크래핑 동적 웹사이트 크롤링, 테스트 자동화

 

 

📌 Cheerio를 쓰는 경우

  • 웹사이트에서 그냥 HTML 코드만 가져오면 되는 경우
    (예: 블로그 글 목록, 기사 제목, 제품 가격 등 정적인 데이터)
  • 빠르게 크롤링하고 싶을 때

📌 Puppeteer를 쓰는 경우

  • 웹사이트가 JavaScript로 동작하는 경우
    (예: 버튼을 눌러야 내용이 보이는 사이트, 로그인해야 정보가 나오는 사이트)
  • 사람처럼 웹을 조작해야 할 때
    (예: 로그인, 검색어 입력, 자동화된 클릭)
  • 스크린샷이나 PDF 저장이 필요할 때

 

두개를 다르게 사용할수도 있지만 같이 사용할수 있습니다!

 

Puppeteer가 웹페이지를 열고 → Cheerio가 HTML을 분석하는 방식으로 같이 사용할 수 있는데
이렇게 하면 속도를 빠르게 하면서도 JavaScript가 실행된 데이터를 가져올 수 있습니다.

 

 

이번주 프로젝트를 진행하면서 너무 어려운것도 많았고 접해보지 못한것들이 많아서 어려웠지만 그래도 도전기능 부분은 무사히 완성하고 무엇보다도 JEST를 써본것도 너무 뿌듯했습니다. LEXORANK기능도 진짜 너어어어무 어려웠는데 ㅜㅜㅜ 아직도 잘 이해를 못한것 같아서 추가로 공부를 더 해야할것 같아요...! 

스크래핑에 대해서도 배울 수 있는 기회가 있어서 되게 신기했습니다! 마지막 최종 프로젝트는 진짜로 열심히 잘 해내보고 싶다고 생각합니다. 

어제의 나보다 더 발전된 내가 되어있길..!