프로그래밍/잡동산이

[nodejs] 네이버 종목의 뉴스를 크롤링 해보자.

Nadahacker 2023. 2. 12. 19:34
반응형
const axios = require("axios");
const cheerio = require("cheerio");
const iconv = require("iconv-lite");
const url = "https://finance.naver.com/item/news_news.nhn?code=005930&page=";

async function getNews(targetDate) {
    let news = [];
    let page = 1;
    let hasNextPage = true;
    while (hasNextPage) {
        let response = await axios.get(url + page, {
            responseType: "arraybuffer",
        });
        let html = iconv.decode(response.data, "EUC-KR").toString();
        let $ = cheerio.load(html);

        let items = $('.type5 tbody tr');
        if (items.length === 0) {
            hasNextPage = false;
            continue;
        }

        items.each(function (index, element) {
            const title = $(element).find('.title a').text().trim();
            const date = $(element).find('.date').text().trim();
            const link = $(element).find('.title a').attr('href');
            console.log(date.split(" ")[0] + " " + targetDate.split(" ")[0]);
            if (date.split(" ")[0] === targetDate.split(" ")[0]) {
                news.push({
                    date: date,
                    title: title,
                    link: link,
                });
            }
        });

        page++;
        if(page > 5){
            break;
        }
    }
    return news;
}

(async () => {
    let targetDate = "2023.02.10";
    let news = await getNews(targetDate);
    console.log(news);
})();
반응형