Cheerio & Puppeteer

ShinJuYong·2022년 3월 28일
1

공부한것들

목록 보기
18/33
post-thumbnail

웹크롤링 - 웹스크래핑

스크래핑

웹 사이트에서 원하는 정보를 추출하는것

스크래핑을 수행하려면 먼저 필요한 정보를 찾기위한 크롤링 비슷한 작업을 선행해야한다.

HTTP통신을 통해 웹의 내용을 추출하여 원하는 형태로 가공하는것을 의미한다.

크롤링도 일종의 스크래핑

크롤링

일정 규칙으로 웹페이징에 들어가 필요한 정보를 찾는것

크롤러는 크롤링을하는 프로그램을 의미하고
크롤링은 여러 사이트의 페이지(html,xml등등..)을 수집해서 분류하는 하는 것을 의미한다.

즉, 일정수준의 스크래핑이 동반돼야 가능하다

스크래핑과 크롤링의 차이점

지속적으로 혼자 동작이 가능하면 크롤링
아니면 스크래핑

스크래핑 in JS (Cheerio)

JS(Node.js)에서 스크래핑을 위한 라이브러리로는 Cheerio가 있다.

설치

yarn add cheerio

import

import cheerio from "cheerio"

사용법

Jquery로 만들어진 라이브러리 답게 선택자도 $를 사용한다.

$(selector, [context], [root])

// context와 root는 생략이 가능하다.

예시

<div id="ddiv" class="ddivclass">
	Hello
</div>
$("#ddiv").text()
// Hello

$("#ddiv").attr("class")
// ddivclass

실전

  const url = "http://naver.com"
  const $ = cheerio.load(url);

  const obj = {};
  $("meta").each((_, el) => {
    if ($(el).attr("property")) {
      const KEY = $(el).attr("property").split(":")[1];
      const VALUE = $(el).attr("content");
      if (KEY !== "url") {
        obj[KEY] = VALUE;
      }
    }
  });

네이버의 url을 불러서
meta가 들어간걸 찾은뒤 각 element를 조회하면서 객체안에 원하는 값을 집어넣는다

Puppetter(크롤링)

구글에서 만든 크로미움 제어 API

    1. UI없이 백그라운드로도 실행이 가능
    1. 제어 가능한 범위가 넓다.

만약 스크래핑도 한다면 cheerio와 같이 쓰는경우가 많다

설치

yarn add puppetter

import

import puppeteer from "puppeteer"

예시

import puppeteer from "puppeteer";

  const browser = await puppeteer.launch({ headless: false });
// 브라우저가 직접 켜진다
  const page = await browser.newPage();
// 새페이지를 만든다

await page.goto("https://www.starbucks.co.kr/menu/drink_list.do");

const name = await page.$eval(
      `#container > div.content > div.product_result_wrap.product_result_wrap01 > div > dl > dd:nth-child(2) > div.product_list > dl > dd:nth-child(8) > ul > li:nth-child(1) > dl > dd`,
      (el) => el.textContent
    );
// 해당하는 html요소를 긁어와 저장한다.


console.log(name)
// 콘솔로 읽는다

await browser.close();
// 킨 브라우저를 끈다

마무리

크롤링같은 경우에는 (setInterval, node-schedule)과 같은 일정주기로 반복을 시키는경우가 많아 사용한뒤 종료시점을 정하지않으면 유휴상태로 메모리를 너무 많이 잡아먹기때문에 생각하면서 해야할것같다
스크래핑은 "어떤것을" "정확한 무슨데이터를" 가져올것인지를 정하지못하면 하느니만도 못한것같다.

참고한곳
스크래핑과 크롤링
Cheerio
Puppeteer

0개의 댓글