네이버 뉴스 크롤링 하여 텔레그램으로 전송하는 방법에 대해서 알아 봅니다. 크롤링 원하는 네이버 뉴스의 키워드 값을 받아 키워드가 포함된 뉴스 URL을 가지고, 텔레그램 봇을 통해 채팅방에 전송하는 파이썬 Python 스크립트를 만들어 봅니다.
파이썬에 대해 관련 글도 확인해보세요
파이썬 주식 분석 보고서 만들기 Python stock
목차
이해하기 쉽도록 자세하게 주석을 달아두었으니 어렵지 않을거예요.
참고로 이 코드가 담긴 파이썬 파일(.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)
해당 코드를 복사한 후 비주얼베이직이나 파이참에 넣고 실행하면 실행이 됩니다.
앤틱거울 양파 복면가왕 494-495회 2025년 5월 11일 방송된 MBC <복면가왕> 494회에서는 감미로운 목소리로 시청자들을 매료시킨…
챗GPT 뉴스 자동화 개인비서 만들기 튜토리얼 쉽게 가르쳐 드려요 | 아침마다 쏟아지는 뉴스, 빠르게 확인하고…
챗GPT 워터마크 이용해서 AI 글인지 감지할 수 있다고? 최근 인터넷에서 읽는 많은 글이 사람의 손이…