Sparta/스파르타코딩 웹개발 종합반

웹개발 종합반 프로젝트 - 06 뉴스크롤링(네이버뉴스)

또롱또 2022. 3. 13. 04:55
728x90

스크래핑 코드 Python

전과 다르게, 이번에는 DB안의 모든 news data를 날리고, 새로 넣어주고있다. 

from selenium import webdriver
from bs4 import BeautifulSoup
import time
from selenium.common.exceptions import NoSuchElementException
from pymongo import MongoClient
import requests

# 몽고 db에 저장
client = MongoClient('13.124.196.127', 27017, username="test", password="test")
db = client.dbsparta_project_01_mss

headers = {'User-Agent' : 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36'}
data = requests.get('https://news.naver.com/main/ranking/popularDay.naver',headers=headers)

soup = BeautifulSoup(data.text, 'html.parser')


news = soup.select('#wrap > div.rankingnews._popularWelBase._persist > div.rankingnews_box_wrap._popularRanking > div > div > ul > li > div')

idNum = 0

# DB 날리기
db.news.drop()

for data in news:
    link = data.select_one('a')['href']
    title = data.select_one('a').text
    time = data.select_one('span').text
    idNum += 1
    doc = {
        "id": idNum,
        "link": link,
        "title": title,
        "time": time,
    }
    print(idNum, link, title, time)
    db.news.insert_one(doc)

클라이언트

랜덤으로 기사를 뽑아온다, 그리고 count 변수를 만들고 그 count가 14가 될때부턴 기사를 안뽑아온다

(즉, 14개의 기사만 랜덤으로 가져와서 보여줌)

   // Get News from Naver News scraping
        let MAX_NEWS_COUNT = 14
        function get_news() {
            $.ajax({
                type: "GET",
                url: `/news`,
                data: {},
                success: function (response) {
                    let news = response["news_list"];
                    let count = 0;
                    for (let i = 0; i < news.length; ++i) {
                        // for maximum news
                        count++;

                        //random news
                        let random = Math.floor(Math.random() * news.length);

                        let title = news[random]['title'];
                        let time = news[random]['time'];
                        let link = news[random]['link'];
                        let html_temp = `<a class="newsLinks" href="${link}" target="_blank">
                                            <ul class="news-list">
                                                <li>${title}</li>
                                                <span>${time}</span>
                                            </ul>
                                        </a>`

                            // add html
                            $('#news').append(html_temp)


                        // Maximum 12 news
                        if(count === MAX_NEWS_COUNT){
                            break;
                        }
                    }
                }
            });
        }

 

중복처리가 아직 안됬다. 좀 더 연구해 봐야겠다.

728x90