웹 크롤링은 웹 사이트에서 데이터를 수집하는 프로세스를 의미합니다. 자바스크립트는 많은 웹 페이지에서 사용되는 주요한 프로그래밍 언어 중 하나이며, 웹 크롤링에도 자주 활용됩니다. 이번 포스트에서는 자바스크립트 기반의 웹 크롤링을 위한 미들웨어 사용법에 대해 알아보겠습니다.
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.');
});
위 예제는 title
과 content
변수를 가지고 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!
참고 자료:
#웹크롤링 #자바스크립트