Programming/puppeteer

Crawling

c29130811 2024. 5. 4. 14:32

현재 모종의 이유로 특정 사이트의 정보를 참고해야하는 사항이 생겼는데, 여러 tools을 알아보던중

 

이전에 써봤던 puppeteer가 만만해서 사용해봤다.

 

cypress나 playwright, selenium 등 여러 툴들이 있긴한데 사실 cypress, playwright는 테스트용도로 쓰는 툴이지...
이런 용도로 보긴 좀 어렵고 물론 쓸 수는 있긴하지만.. selenium은 구관이 명관이지만 이것도 오래됐지 ㅋㅋ

 

 

결론은 puppeteer 로 ㅋㅋ

 

이전에도 잠깐 정리한적은 있지만, node library 로 npm으로 간략히 설치해서 사용할 수 있는 막강한 툴이다.

 

 

Puppeteer

Puppeteer 란Puppetheer는 DevTools Protocol을 통해 Chrome/Chromium을 제어하는 API를 제공하는 Node.js Library 설치npm i puppeteer or yarn add puppeteerPuppeteer-core도 있지만, puppeteer-core는 내부 Chrome을 사용해야 함으로,

19880811.tistory.com

 

또한 puppeteer와 puppeteer-core 두가지로 나뉘며, 간단하게 설명하면 puppeteer-core는 puppeteer의 경량 버전으로 

실행 환경에 설치되어있는 chromium을 이용하게 할 수 있다.

 

async function crawling() {
    const browser = await puppeteer.launch();
    const page = await browser.newPage();

    try {

        await page.goto(`${url}`, {
            timeout: 600000,
            waitUntil: "networkidle0"
        });

        const data = await page.evaluate(async () => {

            const title = document.querySelector('.layer_title')?.innerText;
            return rawData;

        });

        if (data.length === 0) return null;
        return data;

    } catch (error) {
        console.error('An error occurred during the crawler:', error);
    } finally {
        await browser.close();
    }
};

export { crawling };

 

간단하게 예제 인데 evaluate주로 접속 한  웹에서 JavaScript 코드를 실행하여 웹 페이지의 DOM 요소에 접근하고 조작할 때 사용한다.

 

Page.evaluate() method | Puppeteer

Evaluates a function in the page's context and returns the result.

pptr.dev

 

evaluate 에 인자를 전달할 수 있으며 crawling에서 사용하던 데이터를 evaluate안에서 사용 할 수 있게 끔 할 수 있다.

  const title = await page.evaluate((arg1, arg2) => {
    return document.title + ' ' + arg1 + ' ' + arg2;
  }, 'argument1', 'argument2');

 

이밖에 exposeFunction등 다양한 함수를 써봐서 재밌었음

 

참고로 robots.txt와 이용약관 보고 크롤링이 가능한지 먼저 확인을 해보고 가능하면 하자.

 

철컹철컹은 무섭다

 

 

728x90

'Programming > puppeteer' 카테고리의 다른 글

exposeFunction  (0) 2024.07.09
Puppeteer  (0) 2023.08.13