웹 크롤링을 위한 자바스크립트 미들웨어 사용법

웹 크롤링은 웹 사이트에서 데이터를 수집하는 프로세스를 의미합니다. 자바스크립트는 많은 웹 페이지에서 사용되는 주요한 프로그래밍 언어 중 하나이며, 웹 크롤링에도 자주 활용됩니다. 이번 포스트에서는 자바스크립트 기반의 웹 크롤링을 위한 미들웨어 사용법에 대해 알아보겠습니다.

1. Cheerio 설치 및 설정

Cheerio는 자바스크립트 기반의 웹 크롤링을 위한 라이브러리입니다. 먼저 프로젝트의 디렉토리로 이동한 후 아래 명령어를 사용하여 Cheerio를 설치합니다.

npm install cheerio

Cheerio를 설치한 후, 다음과 같이 미들웨어를 설정해야 합니다.

const cheerio = require('cheerio');
const axios = require('axios');

axios.get('https://www.example.com')
  .then(response => {
    const html = response.data;
    const $ = cheerio.load(html);
    
    // 데이터 수집 및 가공 로직을 추가합니다.
  })
  .catch(error => {
    console.log(error);
  });

2. 데이터 수집

Cheerio를 사용하여 데이터를 수집할 수 있습니다. 예를 들어, 특정 웹 페이지에서 제목과 내용을 수집하는 경우를 생각해봅시다.

const title = $('h1').text();
const content = $('p').text();

console.log(title);
console.log(content);

위 예제는 웹 페이지에서 <h1> 태그 내용과 <p> 태그 내용을 추출하는 예시입니다. Cheerio의 text() 함수를 사용하여 태그 내부 텍스트를 추출할 수 있습니다.

3. 데이터 가공

수집한 데이터를 가공하여 원하는 형식으로 출력할 수 있습니다. 예를 들어, 수집한 내용을 JSON 형식으로 변환하여 파일로 저장하는 경우를 생각해봅시다.

const data = {
  title,
  content
};

const jsonData = JSON.stringify(data);

fs.writeFile('data.json', jsonData, 'utf8', () => {
  console.log('Data saved successfully.');
});

위 예제는 titlecontent 변수를 가지고 JSON 형식의 문자열을 생성한 후, data.json 파일에 저장하는 예시입니다. fs 모듈을 사용하여 파일에 데이터를 저장할 수 있습니다.

4. 요청 주기 설정

자바스크립트 미들웨어를 이용한 웹 크롤링에서는 요청 주기를 설정하는 것이 중요합니다. 너무 빠르게 요청을 보내면 서버에서 IP 차단을 할 수 있으므로, 적절한 요청 간격을 설정해야 합니다.

const delay = (ms) => new Promise((resolve) => setTimeout(resolve, ms));

axios.get('https://www.example.com')
  .then(response => {
    // 데이터 수집 및 가공 로직을 추가합니다.
    
    // 다음 요청까지 1초간 대기합니다.
    return delay(1000);
  })
  .then(() => {
    return axios.get('https://www.example.com/page2');
  })
  .then(response => {
    // 데이터 수집 및 가공 로직을 추가합니다.
    
    // 다음 요청까지 1초간 대기합니다.
    return delay(1000);
  })
  .catch(error => {
    console.log(error);
  });

위 예제는 delay 함수를 사용하여 다음 요청까지 일정 시간을 대기하는 방법을 보여줍니다. setTimeout 함수를 사용하여 일정 시간이 지난 후에 resolve를 호출하고, 이를 Promise 객체로 감싸서 반환합니다.

마무리

이제 여러분은 자바스크립트 미들웨어를 사용하여 웹 크롤링을 할 수 있는 기본적인 방법을 알게 되었습니다. Cheerio를 사용하여 데이터를 수집하고 가공하는데 활용하고, 요청 주기를 적절하게 설정하여 서버에서 IP 차단을 피할 수 있도록 주의해야 합니다. Happy web crawling!

참고 자료:

#웹크롤링 #자바스크립트