Cheerio와 Puppeteer 자세한 설명
웹 스크래핑(Web Scraping)이나 웹 자동화(Web Automation)를 수행할 때 Cheerio와 Puppeteer는 많이 사용되는 도구입니다. 하지만 두 라이브러리는 목적과 기능이 다릅니다. 하나씩 자세히 설명해드리겠습니다.
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기능도 진짜 너어어어무 어려웠는데 ㅜㅜㅜ 아직도 잘 이해를 못한것 같아서 추가로 공부를 더 해야할것 같아요...!
스크래핑에 대해서도 배울 수 있는 기회가 있어서 되게 신기했습니다! 마지막 최종 프로젝트는 진짜로 열심히 잘 해내보고 싶다고 생각합니다.
어제의 나보다 더 발전된 내가 되어있길..!