본문 바로가기
Nodejs

[Nodejs] 웹 스크래핑을 활용한 네이버 뉴스 헤드라인 텍스트 추출

by teamnova 2025. 2. 3.
728x90

이번에는 nodejs를 활용한 스크래핑을 해보겠습니다.

 

웹 스크래핑을 왜 할까요?

 


웹 스크래핑은 인터넷에 공개된 데이터를 자동으로 추출하는 기술로, 다양한 이유로 매우 유용하게 사용됩니다. 이를 통해 데이터를 효율적으로 수집하고, 자동화된 방식으로 실시간 정보를 처리할 수 있습니다. 웹 스크래핑을 사용해야 하는 다양한 이유는 다음과 같습니다.

1. 자동화된 데이터 수집

웹 스크래핑의 가장 큰 장점은 수작업을 자동화할 수 있다는 점입니다. 예를 들어, 뉴스 사이트, 쇼핑몰, 주식 시장 등의 웹페이지에서 매일 새로운 정보를 수집하는 데 시간을 소비하지 않고, 자동으로 필요한 데이터를 수집할 수 있습니다. 이를 통해 반복적인 작업을 효율적으로 처리하고, 사람이 실수를 할 여지를 줄일 수 있습니다.

2. 실시간 데이터 수집

웹 스크래핑은 실시간으로 업데이트되는 데이터를 수집할 수 있게 해줍니다. 예를 들어, 네이버 뉴스에서 최신 헤드라인이나 주식시장의 실시간 데이터를 추출하는 경우, 수동으로 확인하지 않고도 항상 최신 정보를 얻을 수 있습니다. 이 정보는 경쟁사 분석, 시장 트렌드 파악 등에 중요한 역할을 합니다.

3. API가 없거나 제한된 경우 활용

많은 웹사이트는 API를 제공하지 않거나, 제한된 정보를 제공할 수 있습니다. 이런 경우 웹 스크래핑은 매우 유용한 대안이 됩니다. API 없이 웹 페이지에서 직접 정보를 가져올 수 있기 때문에, 원하는 데이터를 제약 없이 수집할 수 있습니다.

4. 연구 및 학술적 목적

학술 연구에서는 웹 스크래핑을 활용하여 다양한 데이터를 수집하고 분석합니다. 예를 들어, 경제학, 사회학, 심리학 연구에서는 대규모 데이터를 수집하여 패턴이나 트렌드를 분석하는 데 사용됩니다. 공개된 논문, 기사, 정부 데이터 등을 스크래핑하여 연구에 필요한 정보를 빠르고 효율적으로 모을 수 있습니다.

5. 정보의 비교 및 분석

웹 스크래핑을 통해 동일한 유형의 데이터를 여러 출처에서 모은 후, 이를 비교 분석할 수 있습니다. 예를 들어, 여러 뉴스 사이트에서 동일한 사건에 대한 보도를 스크래핑하여, 언론사의 시각 차이를 분석하거나, 다양한 쇼핑몰에서 상품 정보와 가격을 비교할 수 있습니다. 이렇게 모은 데이터를 통해 더 나은 의사결정을 할 수 있습니다.

 

 

 

Puppeteer (헤드리스 브라우저 자동화)

Puppeteer는 크롬에서의 데이터를 가져올 수 있습니다.
👉 자바스크립트로 렌더링되는 사이트도 스크래핑 가능!

 

코드

npm install puppeteer

// Puppeteer 라이브러리 불러오기 (웹 스크래핑 및 자동화 도구)
const puppeteer = require('puppeteer');

// 비동기 함수로 전체 스크래핑 프로세스 정의
(async () => {
    // 브라우저 실행 (headless: false는 브라우저 화면을 보여줌)
    const browser = await puppeteer.launch({ headless: false });

    // 새로운 페이지(탭) 생성
    const page = await browser.newPage();

    // 네이버 부동산 뉴스 검색 페이지로 이동
    // waitUntil: 'networkidle2' - 네트워크 트래픽이 최소화될 때까지 대기
    // timeout: 60초 동안 대기 (로딩 시간 여유 부여)
        waitUntil: 'networkidle2',
        timeout: 60000
    });

    // 페이지 내 스크립트 실행하여 뉴스 제목 추출
    const headlines = await page.evaluate(() => {
        // '.news_tit' 선택자를 사용해 모든 뉴스 제목 요소 선택
        const elements = document.querySelectorAll('.news_tit');

        // 요소들을 배열로 변환하고 텍스트 추출, 공백 제거
        return Array.from(elements).map(el => el.innerText.trim());
    });

    // 추출된 헤드라인 콘솔에 출력
    console.log('헤드라인:', headlines);

    // 브라우저 종료
    await browser.close();
})();

 

 

 

 

시연 영상