puppeteer는 셀레니움과 비슷하게 Node에서 웹 브라우저를 실행 및 컨트롤할 수 있는 모듈이다.

 

웹 스크래핑 작업이 필요했는데 해당 사이트가 (아마?) 클라이언트 사이드 렌더링 방식으로 렌더링을 하고 있어서 일반적으로 request 등의 모듈을 이용해 html 파일을 받아오면 데이터가 보이지 않고 javascript 코드만 파싱되었다.

 

puppeteer를 활용해 해당 사이트를 브라우저로 실행시켜 렌더링을 시키고 스크래핑하는 방식을 사용해야 했다.

 

 

먼저 puppeteer를 설치한다.

npm i puppeteer

 

다음과 같이 코드를 작성한다.

// const puppeteer = require('puppeteer');
// 나는 ES6 모듈 방식을 사용하였다. package.json의 최상위에 "type": "module"을 추가하면 된다.
import puppeteer from 'puppeteer';

const html = (async () => {
  const browser = await puppeteer.launch({headless: false});
  const page = await browser.newPage();
  await page.goto('https://example.com');
  
  const body = await page.$eval('body', (e) => e.outerHTML);
  
  await browser.close();
  
  return body;
})();

console.log(html);

 

아주 간단하다.

 

이후에는 html parsing 모듈을 사용하여 html 코드를 파싱하면 된다.

 

node-html-parser 를 사용할 예정이다.

+ Recent posts