반응형
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
이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.
반응형
'개발 > Express' 카테고리의 다른 글
express middleware (0) | 2022.06.06 |
---|---|
Express : res.end() res.send() res.json() 차이 (0) | 2021.09.11 |
에러 해결 : 'body-parser' 취소선, The declaration was makred as deprecated here (0) | 2021.09.10 |