Aplicar raspado web especializado en Chrome con Node.js

Introducción sobre cómo aplicar el web scraping especializado en Chrome utilizando Node.js. Es posible manejar contenido dinámico y evitar bloqueos utilizando Puppeteer y Puppeteer-Extra.

6
Aplicar raspado web especializado en Chrome con Node.js

안녕하세요, 오늘은 Ruby, Python, Java가 아닌 Node.js를 사용하여 웹 크롤러를 만드는 방법에 대해 소개하겠습니다. 특히, Google Chrome 또는 Chromium을 제어할 수 있는 강력한 Node.js 라이브러리인 Puppeteer와 그 확장인 Puppeteer-Extra에 대해 자세히 알아보겠습니다.

Puppeteer란 무엇인가요?

Puppeteer는 웹 페이지 크롤링이나 사용자와 동일한 방식으로 웹 사이트와 상호 작용을 가능하게 하는 Node.js 라이브러리입니다. Puppeteer는 기본적으로 Headless 모드에서 작동하여 GUI 없이 백그라운드에서 작업을 수행하지만, 필요에 따라 전체 브라우저 UI를 가진 Headful 모드로도 설정할 수 있습니다.

Puppeteer를 사용하는 이유는 무엇인가요?

1. 크롬에 최적화된 성능

Puppeteer는 Chrome DevTools Protocol을 사용하여 Chrome 브라우저와 직접적으로 통신합니다. 이는 Selenium과 같은 다른 자동화 도구가 제공하는 WebDriver API를 사용하는 것보다 더 빠르고 정밀한 제어를 가능하게 합니다.

2. 동적 웹 콘텐츠 처리에 강력

정적 페이지 뿐만 아니라 JavaScript로 동적으로 생성되는 콘텐츠를 처리하는 데 있어 Puppeteer는 탁월한 성능을 발휘합니다. 이는 현대 웹의 복잡한 상호작용과 동적 요소들을 효과적으로 처리할 수 있음을 의미합니다.

3. 차단 회피

실제 크롤링 작업에서 Puppeteer는 차단을 회피하며 데이터를 수집하는 데 효과적입니다. 특히 Puppeteer-Extra와 Stealth Plugin을 사용하면, 자동화 탐지 메커니즘을 우회하여 보다 안정적으로 데이터를 수집할 수 있습니다.

Puppeteer-Extra와 Stealth Plugin

Puppeteer-Extra

Puppeteer-Extra는 기본 Puppeteer 라이브러리 위에 구축된 확장판으로, 유연한 플러그인 시스템을 통해 사용자가 필요에 따라 추가 기능을 쉽게 통합할 수 있습니다. 이를 통해 기능이 향상되며, 크롤러의 사용성이 개선됩니다.

Stealth Plugin

Puppeteer-Extra의 플러그인 중 하나인 Stealth Plugin은 크롤링 시 자주 발생하는 자동화 탐지를 효과적으로 회피합니다. 많은 웹사이트에서 크롤러를 차단하지만, 이 플러그인을 사용하면 자동화된 크롤러임에도 불구하고 사용자의 브라우저처럼 보이게 할 수 있습니다.

실제 사용 예

이제 Puppeteer-Extra와 Stealth Plugin을 사용하여 간단한 크롤링 작업을 수행하는 방법을 알아보겠습니다.

1. 필요한 모듈 설치하기

puppeteer-extra와 puppeteer-extra-plugin-stealth 모듈 설치를 위해서 아래 명령어를 입력하여 설치합니다.

npm install puppeteer-extra puppeteer-extra-plugin-stealth

2. 필요한 모듈 불러오기

import puppeteer from "puppeteer-extra";
import StealthPlugin from "puppeteer-extra-plugin-stealth";
import fs from "fs";

3. 명령어에 url을 입력 유무 예외 처리

차후에 node node_js.mjs https://www.example.com 이러한 명령어를 사용하여 url을 직접 입력하기 때문에 url이 없다면 예외를 내는 코드를 넣었습니다.

const args = process.argv.slice(2); // 첫 번째 요소는 Node.js 실행 경로이므로 제외
if (args.length < 1) {
  console.error("URL 파라미터가 필요합니다.");
  process.exit(1); // 오류로 종료
}

4. stealthplugin 적용하기

puppeteer.use(StealthPlugin());

5. 브라우저 상호작용 적용

puppeteer.launch({ headless: false }).then(async browser => {
  // 해당 headless는 하지 않고 눈에 보이게 브라우저를 띄워줍니다.

  const url = args[0]; // 첫 번째 파라미터로부터 URL 가져오기

  const page = await browser.newPage(); // 새 브라우저 열기
  await page.goto(url); // url로 페이지 이동
  await page.waitForTimeout(5000); // 렌더링 완료를 위해 5초 대기

  const currentUrl = await page.url(); // url을 변수에 저장
  console.log("현재 페이지의 URL:", currentUrl); // url이 제대로 담겼는지 출력

  // 페이지의 HTML을 변수에 저장
  const html = await page.content();

  // HTML 내용을 파일로 저장합니다
  fs.writeFile("pageContent.html", html, (err) => {
    if (err) {
      console.error("파일 저장 중 오류 발생:", err);
    } else {
      console.log("HTML이 성공적으로 저장됨: pageContent.html");
    }
  });
});

6. 명령어 실행

입력형태로 받기 위해 mjs파일로 생성하였습니다.

node [파일명].mjs https://www.naver.com

url이 직접 열리고 터미널에는 출력이 나옵니다.

7. html파일 확인

위의 과정을 거치면 pageContent.html이 저장된 것을 확인할 수 있습니다.

결론

이 스크립트는 사용자가 지정한 URL로 이동하여 페이지의 HTML을 가져와 pageContent.html 파일로 저장합니다. Puppeteer-Extra와 Stealth Plugin을 사용하면 웹사이트의 자동화 탐지 로직을 효과적으로 우회할 수 있습니다.

이 글이 Node.js를 사용하여 크롤러를 만드는 방법을 이해하는 데 도움이 되었기를 바랍니다. Puppeteer와 그 확장 기능을 활용하면 보다 강력하고 효과적인 웹 크롤링 솔루션을 구현할 수 있습니다.

Comments

Add Comment

Your email won't be published and will only be used for reply notifications.

Sigue leyendo

Get notified of new posts

We'll email you when 해시스크래퍼 기술 블로그 publishes new content.

Your email will only be used for new post notifications.