본문 바로가기
개발/Express

Express 로 뉴스 크롤링하기

by 안뇽! 2023. 8. 4.
반응형

Express 로 뉴스 크롤링하기

보통은 크롤링은 파이썬으로 많이 하지만, 나는 당장 개발 가능한 코드가 js뿐이라 express로 크롤링을 하였다.

발단

요새 계속 칼부림이 일어나고 있다.

동료A : '칼부림 알람이라도 만들어야겠어요'
동료B : 'ㅋㅋㅋㅋㅋㅋ뉴스 크롤링해서 만들면 되겠네요'

퇴근길 지하철에서 express로 뉴스 크롤링하는 법을 검색했다.

 

집에와서 chatGPT의 도움을 받아 코드를 작성했다.

코드

구글에 '칼부림' 검색한 후 '뉴스'로 필터링해서 특정 a태그만 찾아오는 코드이다.

// news/index.js


//chatGPT4가 구글 검색 결과는 axios보다 Puppeteer를 이용하라고 했다.
const puppeteer = require('puppeteer');
const news = async (req, res) => {
  try {
    const browser = await puppeteer.launch({ headless: 'new' });
    const page = await browser.newPage();

    const url =
    // 구글에 칼부림 검색했을때 url
      'https://www.google.com/search?rlz=1C5CHFA_enKR998KR998&sxsrf=AB5stBgW6lb6tyPTKvmKiZo7U7RLKmk8TA:1691145140521&q=%EC%B9%BC%EB%B6%80%EB%A6%BC&tbm=nws&source=lnms&sa=X&ved=2ahUKEwiu3vTK5sKAAxVFqFYBHfZoDagQ0pQJegQICBAB&biw=1728&bih=905&dpr=2';

    await page.goto(url);

    // page에서 <a jsname = "YKoRaf">..</a>인것들을 모조리 뒤짐
    const newses = await page.$$eval('a[jsname="YKoRaf"]', (links) =>
      links.map((link) => {
        return { link: link.href, text: link.textContent };
      })
    );
    console.log('뉴스링크', newses);

    console.log('크링스뉴');
    await browser.close();

    res.send({ data: newses });
  } catch (error) {
    console.error('An error occurred:', error);
  }
};

module.exports = news;

 


레포지토리 : https://github.com/ryu9663/searching-worrior


이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.

반응형