본문 바로가기

개발관련

자바스크립트로 웹 크롤링 하는 법

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. 주의사항

  1. robots.txt: 크롤링 전에 웹사이트의 robots.txt 파일을 확인하여 허용 범위를 준수하세요.
  2. Rate Limiting: 요청 간 간격을 두어 서버 과부하를 피하세요.
  3. IP 차단 방지: 많은 요청 시 프록시나 VPN을 사용할 수도 있습니다.

어떤 방법을 사용하더라도 크롤링 대상의 약관을 준수하는 것이 중요합니다. 🚀

728x90
반응형