노드로 간단하게 웹 스크랩핑 하기

간단하게 뽐뿌게시판 핫게시글 스크랩핑 예제

필요한 모듈 설치

yarn add axios cheerio iconv-lite

소스

const axios = require('axios');
const cheerio = require('cheerio');
const iconv = require('iconv-lite');

async function scrape() {
    // 뽐뿌게시판 핫게시글 1페이지 url
    const response = await axios.get('http://www.ppomppu.co.kr/zboard/zboard.php?id=ppomppu&page=1&hotlist_flag=999&divpage=66', 
        { responseEncoding: 'binary', responseType: 'arraybuffer' });

    // 대상 페이지 인코딩이 요즘 거의 볼 수 없는 EUC-KR 이라서 별도 처리가 필요하다. UTF-8 이면 필요없음
    const html = iconv.decode(response.data, 'euc-kr').toString();

    const $ = cheerio.load(html);

    // 핫게시글 추출 #revolution_main_table 테이블 중 class 가 list1, list0 인 tr
    const hot = $('#revolution_main_table .list1,.list0')
        .map((_, element) => {
            const tr = $(element);

            const a = tr.find('td').eq(3).find('a');

            return {
                link: `http://www.ppomppu.co.kr/zboard/${a.attr('href')}`,
                title: a.text(),
            };
        })
        .get();

    return hot;
}

scrape().then((result) => {
    console.log(result);
});