Coding

네이버 뉴스 크롤링 텔레그램 실시간 파이썬 코딩

네이버 뉴스 크롤링 하여 텔레그램으로 전송하는 방법에 대해서 알아 봅니다. 크롤링 원하는 네이버 뉴스의 키워드 값을 받아 키워드가 포함된 뉴스 URL을 가지고, 텔레그램 봇을 통해 채팅방에 전송하는 파이썬 Python 스크립트를 만들어 봅니다.

네이버 뉴스 크롤링 텔레그램 실시간 파이썬 코딩

파이썬에 대해 관련 글도 확인해보세요

파이썬 주식 분석 보고서 만들기 Python stock

1. 네이버 뉴스 크롤링 프로그램 컨셉

2. 네이버 뉴스 크롤링 사용 라이브러리 정보

  • requests (특정 url의 html 문서 받기)
  • BeautifulSoup (html 문서에서 원하는 요소 선택적 추출)
  • python-telegram-bot (뉴스 링크를 텔레그램 봇으로 채팅방에 전송)

3. 네이버 뉴스 크롤링 전체 코드

이해하기 쉽도록 자세하게 주석을 달아두었으니 어렵지 않을거예요.

참고로 이 코드가 담긴 파이썬 파일(.py)을 pyinstaller를 이용해서 exe 파일로 만들어서 윈도우 시작 시, 기본 프로그램으로 설정해 놓으면 나만의 알리미 프로그램을 만드실 수 있어요!

 

#step1.라이브러리 불러오기
import  requests
from  bs4  import  BeautifulSoup  as  bs
import  telegram
import  schedule
import  time

#step2.새로운 네이버 뉴스 기사 링크를 받아오는 함수
def  get_new_links(old_links=[]):

    # (주의) 네이버에서 키워드 검색 - 뉴스 탭 클릭 - 최신순 클릭 상태의 url
    url  = f'https://search.naver.com/search.naver?where=news&query={query}&sm=tab_opt&sort=1&photo=0&field=0&pd=0&ds=&de=&docid=&related=0&mynews=0&office_type=0&office_section_code=0&news_office_checked=&nso=so%3Add%2Cp%3Aall&is_sug_officeid=0'

    # html 문서 받아서 파싱(parsing)
    response  =  requests.get(url)
    soup  =  bs(response.text , 'html.parser')

    # 해당 페이지의 뉴스기사 링크가 포함된 html 요소 추출
    news_titles  =  soup.select('a.news_tit')

    # 요소에서 링크만 추출해서 리스트로 저장
    list_links  = [i.attrs['href'] for  i  in  news_titles]

    # 기존의 링크와 신규 링크를 비교해서 새로운 링크만 저장
    new_links  = [link  for  link  in  list_links  if  link  not  in  old_links]

    return  new_links


#step3.새로운 네이버 뉴스 기사가 있을 때 텔레그램으로 전송하는 함수
def  send_links():
    # 함수 내에서 처리된 리스트를 함수 외부에서 참조하기 위함
    global old_links

    # 위에서 정의했던 함수 실행
    new_links  =  get_new_links(old_links)

    # 새로운 메시지가 있으면 링크 전송
    if  new_links:
        for  link  in  new_links:
            bot.sendMessage(chat_id=chat_id, text=link)

    # 없으면 패스
    else:
        pass

    # 기존 링크를 계속 축적하기 위함

    old_links +=  new_links.copy()


# 실제 프로그램 구동
if  __name__  ==  '__main__':

    #토큰을 변수에 저장
    bot_token  ='자신이 발급받은 봇의 토큰'
    bot  =  telegram.Bot(token  =  bot_token)

    #가장 최근에 온 메세지의 정보 중, chat id만 가져옴 (이 chat id는 사용자(나)의 계정 id임)
    chat_id  =  bot.getUpdates()[-1].message.chat.id

    #step4.검색할 키워드 설정
    query  =  input('크롤링 할 뉴스기사 키워드를 입력하세요: ')

    #위에서 얻은 chat id로 bot이 메세지를 보냄.
    bot.sendMessage(chat_id  =  chat_id, text=f"{query}를 주제로 뉴스 기사 크롤링이 시작 되었습니다")

    #step5.기존에 보냈던 링크를 담아둘 리스트 만들기
    old_links  = []

    # 주기적 실행과 관련된 코드 (hours는 시, minutes는 분, seconds는 초)
    job  =  schedule.every(10).seconds.do(send_links)

    while  True:
        schedule.run_pending()
        time.sleep(1)

 

네이버 뉴스 크롤링 여러 검색어 크롤링

#step1.라이브러리 불러오기
import  requests
from  bs4  import  BeautifulSoup  as  bs
import  telegram
import  schedule
import  time

# step2.새로운 네이버 뉴스 기사 링크를 받아오는 함수

def get_new_links(query, old_links=[]):

    # (주의) 네이버에서 키워드 검색 - 뉴스 탭 클릭 - 최신순 클릭 상태의 url
    url = f'https://search.naver.com/search.naver?where=news&query={query}&sm=tab_opt&sort=1&photo=0&field=0&pd=0&ds=&de=&docid=&related=0&mynews=0&office_type=0&office_section_code=0&news_office_checked=&nso=so%3Add%2Cp%3Aall&is_sug_officeid=0'

    # html 문서 받아서 파싱(parsing)
    response = requests.get(url)
    soup = bs(response.text, 'html.parser')

    # 해당 페이지의 뉴스기사 링크가 포함된 html 요소 추출
    news_titles = soup.select('a.news_tit')

    # 요소에서 링크만 추출해서 리스트로 저장
    list_links = [i.attrs['href'] for i in news_titles]

    # 기존의 링크와 신규 링크를 비교해서 새로운 링크만 저장
    new_links = [link for link in list_links if link not in old_links]

    return new_links


# step3.새로운 네이버 뉴스 기사가 있을 때 텔레그램으로 전송하는 함수
def send_links(query):
    # 함수 내에서 처리된 리스트를 함수 외부에서 참조하기 위함
    global old_links

    # 위에서 정의했던 함수 실행
    new_links = get_new_links(query, old_links)

    # 새로운 메시지가 있으면 링크 전송
    if new_links:
        bot.sendMessage(chat_id=chat_id, text='방금 업데이트 된 ' + f"{query} 주제의 크롤링입니다.")
        for link in new_links:
            bot.sendMessage(chat_id=chat_id, text=link)

    # 없으면 패스
    else:
        pass

    # 기존 링크를 계속 축적하기 위함

    old_links += new_links.copy()


# 실제 프로그램 구동
if __name__ == '__main__':

    # 토큰을 변수에 저장
    bot_token = '자신이 발급받은 봇의 토큰'
    bot = telegram.Bot(token=bot_token)

    # 가장 최근에 온 메세지의 정보 중, chat id만 가져옴 (이 chat id는 사용자(나)의 계정 id임)
    chat_id = bot.getUpdates()[-1].message.chat.id


    # #step4.검색할 키워드 설정
    # query  =  input('크롤링 할 뉴스기사 키워드를 입력하세요: ')
    queries = ["부동산", "경제", "날씨"]

    for query in queries:

        # 위에서 얻은 chat id로 bot이 메세지를 보냄.
        bot.sendMessage(chat_id=chat_id,
                        text=f"{query}를 주제로 뉴스 기사 크롤링이 시작 되었습니다")

        # step5.기존에 보냈던 링크를 담아둘 리스트 만들기
        old_links = []

        # 주기적 실행과 관련된 코드 (hours는 시, minutes는 분, seconds는 초)
        job = schedule.every(10).seconds.do(send_links, query)

    while True:
        schedule.run_pending()
        time.sleep(1)

 

해당 코드를 복사한 후 비주얼베이직이나 파이참에 넣고 실행하면 실행이 됩니다.

 

urjent

Recent Posts

레몬즙 부작용 효능 건강하게 마시는 방법

레몬즙 부작용 효능 건강하게 마시는 방법 , 레몬즙은 상큼한 향과 맛으로 요리에서 자주 사용되지만, 그…

27 분 ago

대통령 4년 연임제 특징 차이점

대통령 4년 연임제 특징 차이점  대한민국 정치 구조에 대한 논의에서 빠지지 않는 주제 중 하나가…

2시간 ago

손흥민 여자 양민희 모델 임신 의혹 전말

손흥민 여자 양민희 모델 임신 의혹 전말 최근 대한민국 축구 국가대표 주장 손흥민 선수를 둘러싼…

3시간 ago

앤틱거울 양파 복면가왕 494-495회

앤틱거울 양파 복면가왕 494-495회 2025년 5월 11일 방송된 MBC <복면가왕> 494회에서는 감미로운 목소리로 시청자들을 매료시킨…

4시간 ago

챗GPT 뉴스 자동화 개인비서 만들기 튜토리얼 쉽게 가르쳐 드려요

챗GPT 뉴스 자동화 개인비서 만들기 튜토리얼 쉽게 가르쳐 드려요 |  아침마다 쏟아지는 뉴스, 빠르게 확인하고…

5시간 ago

챗GPT 워터마크 이용해서 AI 글인지 감지할 수 있다고?

챗GPT 워터마크 이용해서 AI 글인지 감지할 수 있다고? 최근 인터넷에서 읽는 많은 글이 사람의 손이…

17시간 ago