헬창 개발자

Node.js를 이용한 웹파싱 본문

공부방

Node.js를 이용한 웹파싱

찬배 2022. 9. 1. 23:46

웹 파싱

  • 크롤링
    자동화된 방법으로 웹을 탐색하는 작업을 말하며 여러 개의 인터넷 사이트 페이지를 수집해서 분류하는 것
  • 파싱
    어떤 페이지에서 내가 원하는 데이터를 특정 패턴이나 순서로 추출하여 정보를 가공하는 작업
  • 스크래핑
    http를 통해 웹 사이트의 내용을 긁어와 원하는 형태로 가공하는 모든 작업을 말하며 크롤링과 파싱도 일종의 스크래핑이다.

Node.js에서 크롤링 및 파싱을 하려면 axios 모듈과 chreerio 모듈이 필요하다.

chreerio는 axios의 결과로 받은 데이터에서 DOM Selector를 사용해 필요한 데이터만 추출하는 데 사용할 수 있다.

npm install cheerio
npm install axios

cheerio 함수

  • load()
    html 문자열을 cheerio 객체로 반환한다.
  • children()
    html selector를 파라미터로 받은 뒤 chreerio 객체에서 선택된 html 문자열의 해당하는 모든 태그를 반환한다.
  • each()
    콜백 함수를 파리미터를 받아 태그들이 담긴 배열을 순회하면서 콜백 함수를 실행한다.
  • find()
    html selector를 문자열로 받아 해당 태그를 반환한다.

 

파싱해볼 사이트에 들어가서 베스트 셀러를 크롤링을 해보겠다.

F12를 눌러 html 구조를 확인해보면 책제목의 태크는 다음처럼 되어있다.

div > ul > li > a

<a> 태그 안에있는 링크와 <b> 태그의 텍스트 데이터를 가져오도록 코드를 작성해보자

 

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

const getHtml = async () => {
    try {
        return await axios.get("<https://www.aladin.co.kr/shop/common/wbest.aspx?BranchType=1&start=we>");
    } catch (error) {
        console.error(error);
    }
};

getHtml()
    .then(html => {
        let ulList = [];
        const $ = cheerio.load(html.data);
        const $bodyList = $("div.ss_book_list");

        $bodyList.each(function (i, elem) {
            ulList[i] = {
                bookList: $(this).find('a.bo3 b').text(),
                url: $(this).find('a.bo3').attr('href'),
            };
        });

        const data = ulList.filter(n => n.bookList);
        return data;
    })
    .then(res => console.log(res));

'공부방' 카테고리의 다른 글

Node.js 환경에서 NoSQL : MongoDB 사용하기  (0) 2022.09.22
Node.js와 데이터베이스  (0) 2022.09.04
API????????  (3) 2022.08.21
express 미들웨어  (0) 2022.08.19
express 모듈을 사용해 서버 만들기  (1) 2022.08.18
Comments