728x90
반응형
JavaScript로 웹 크롤링을 구현하려면 Node.js 환경에서 실행할 수 있는 패키지인 puppeteer나 axios와 cheerio를 사용하는 방법이 일반적입니다. 두 방법을 소개하겠습니다.
1. Puppeteer를 사용한 웹 크롤링
Puppeteer는 Google의 Headless Chrome 라이브러리로, 실제 브라우저 환경에서 웹 페이지를 탐색하고 데이터를 추출할 수 있습니다.
설치
npm install puppeteer
코드
아래는 Puppeteer를 사용하여 간단히 특정 웹페이지의 데이터를 가져오는 예시입니다.
const puppeteer = require('puppeteer');
(async () => {
const browser = await puppeteer.launch(); // 브라우저 실행
const page = await browser.newPage();
await page.goto('https://example.com'); // 크롤링할 URL
// 예: 페이지의 제목 가져오기
const title = await page.evaluate(() => document.querySelector('h1').innerText);
console.log('Page Title:', title);
await browser.close(); // 브라우저 닫기
})();
2. Axios와 Cheerio를 사용한 웹 크롤링
axios는 HTTP 요청을 처리하고, cheerio는 jQuery 스타일로 HTML 데이터를 파싱하여 크롤링할 수 있습니다.
설치
npm install axios cheerio
코드
아래는 axios와 cheerio를 사용하여 웹페이지에서 데이터를 추출하는 예시입니다.
const axios = require('axios');
const cheerio = require('cheerio');
(async () => {
try {
const response = await axios.get('https://example.com'); // 크롤링할 URL
const html = response.data; // HTML 데이터
const $ = cheerio.load(html); // Cheerio로 파싱
// 예: 페이지의 제목 가져오기
const title = $('h1').text();
console.log('Page Title:', title);
} catch (error) {
console.error('Error:', error);
}
})();
3. 주요 차이점
PuppeteerAxios + Cheerio실제 브라우저 환경(Headless Chrome)에서 작동 | 서버에서 HTML 소스코드만 가져옴 |
JavaScript 렌더링이 필요한 웹사이트에 적합 | 정적 HTML 데이터만 필요한 경우 적합 |
설정 및 실행 속도가 느릴 수 있음 | 설정 및 실행 속도가 빠름 |
4. 주의사항
- robots.txt: 크롤링 전에 웹사이트의 robots.txt 파일을 확인하여 허용 범위를 준수하세요.
- Rate Limiting: 요청 간 간격을 두어 서버 과부하를 피하세요.
- IP 차단 방지: 많은 요청 시 프록시나 VPN을 사용할 수도 있습니다.
어떤 방법을 사용하더라도 크롤링 대상의 약관을 준수하는 것이 중요합니다. 🚀
728x90
반응형
'개발관련' 카테고리의 다른 글
Serverless MongoDB와 Firebase Firestore의 비용 비교 (0) | 2025.01.06 |
---|---|
클라우드에서 빌드 실패할 때 (0) | 2025.01.03 |
SwiftUI 에서 HTML Text 쓰는법 (0) | 2025.01.03 |
SwiftUI Environment 완전정복 (0) | 2024.12.31 |
파이썬 웹 크롤링 강좌 (2) | 2024.12.21 |
Firebase Cloud Functions에서 puppeteer 실행이 안될때 (0) | 2024.12.21 |
Firebase Cloud Functions Deploy 해도 반영 안될때 (0) | 2024.12.21 |
파이썬 강좌 9 - 객체지향 (1) | 2024.12.20 |