-1.2 C
Seoul
토요일, 12월 21, 2024

spot_img

네이버 키워드 뉴스 텔레그램 전송 파이썬 프로그램 만들기

네이버 키워드 뉴스 프로젝트는 네이버 뉴스 탭에서 키워드 로 검색하여 최신 뉴스를 크롤링 하여 텔레그램 방에 정해진 시간에 자동으로 글이 받아 볼 수 있도록 만들 예정입니다.

사실 구글링해서 여러 페이지를 찾아 봤지만 몇가지 오류가 있는 코드도 있었고, 완벽하지 않는 것도 있어 혼란을 겪다가 제가 코드를 수정해서 만들었고 현재 기준으로는 매우 동작이 잘 되는 것을 확인하였습니다.

네이버 키워드 뉴스 텔레그램 전송 파이썬 프로그램 만들기
네이버 키워드 뉴스 텔레그램 전송 파이썬 프로그램 만들기

(2023년 10월 기준) 만약 계속 사용하다가 코드가 업데이트 되었거나 변수가 생기면 해당 포스팅에 업데이트 할 예정입니다. 별도의 글이 업데이트 되지 않았다면 특별한 문제가 확인 되지 않았다고 생각하시면 될 것 같습니다,

먼저 개발 환경은 파이참에서 몇가지 라이브러리를 활용하여 만들었습니다.

파이선에 대한 다른 포스팅을 보고 싶은 분들은 다음 포스팅을 읽어보세요

블로그 키워드 생성 파이썬 코드 Python 마케팅 홍보 키워드에도 좋아요

부동산 파이썬 Python 크롤링 미분양 정보 가져오기 (1편)

라이브러리 – 네이버 키워드 뉴스 텔레그램


사용 라이브러리는 아래와 같습니다.

일반적으로 모든 라이브러리 설치는 거의 비슷합니다. 만약에 라이브러리가 없다고 (대부분 module 에러로 표시 됩니다) 나오면 pip install 라이브러리 형태로 터미널에 입력하면 라이브러리가 자동으로 설치됩니다.

파이참을 다운 받지 않으신 분들은 파이참에 다운 받으시고, 비주얼스튜디오도 무방합니다.

requests
BeautifulSoup
telegram
asyncio
time

개요 – 네이버 키워드 뉴스 텔레그램


코드는 네이버 검색 창에서 검색어 (query)가 정의 되면 뉴스를 최신 순서로 정렬 후 검색어에 해당하는 뉴스를 크롤링하여 본인이 만든 텔레그램 봇을 활용하여 정해진 타임에 따라 스크롤링 글을 자동으로 등록하는 것입니다. 매우 유용하겠지요?

예를 들어, 부동산을 검색어로 정했을 때 부동산 뉴스를 정해진 시간에 따라 크롤링 한 후에 텔레그램 방에 업데이트 시키는 것입니다.

텔레그램 봇을 설정하는 방법과 토큰을 확보하는 방법은 아래 포스트에서 확인하세요. 만약에 텔레그램 봇을 설정하셨거나 토큰 번호를 이미 알고 계신 분들은 패스 하셔도 좋습니다.

세부 코드 (coding) – 네이버 키워드 뉴스 텔레그램


위와 같이 부동산 관련 주제로 검색어 (쿼리값을)를 입력했을 때 자동으로 글이 올라오는 것을 보실 수 있습니다.  자 그럼 코드 하나하나 작성해보도록 하겠습니다.
네이버 키워드 뉴스 텔레그램
네이버 키워드 뉴스 텔레그램
  1. 모듈 및 패키지 가져오기:
import requests
from bs4 import BeautifulSoup as bs
import telegram
import asyncio
import time
  • requests: 웹 페이지에서 데이터를 가져오기 위한 모듈입니다.
  • BeautifulSoup: 웹 페이지에서 데이터를 파싱하기 위한 패키지입니다.
  • telegram: 텔레그램 봇과 통신하기 위한 패키지입니다.
  • asyncio: 비동기 작업을 처리하기 위한 모듈입니다.
  • time: 시간 지연을 위한 모듈입니다.
  1. 사용할 변수 정의:
old_links = []
bot = None
chat_id = ''  # 채팅 ID를 여기에 입력하세요.

 

  • old_links: 이전에 전송한 뉴스 링크를 저장하는 리스트입니다.
  • bot: 텔레그램 봇을 초기화하기 위한 변수입니다.
  • chat_id: 메시지를 전송할 채팅 ID를 지정합니다.
  1. 검색어 입력 받기:
query = input('주제: ')
  • 사용자로부터 검색할 주제를 입력받습니다.
  1. get_new_links 함수 정의:
async def get_new_links():
    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=&no=so%3Add%2Cp%3Aall&is_sug_officeid=0'

    response = requests.get(url)
    soup = bs(response.text, 'html.parser')

    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

 

  • get_new_links 함수는 입력받은 검색어(query)에 대한 네이버 뉴스 검색 결과를 크롤링하여 새로운 링크 목록을 반환합니다.
  1. send_links 함수 정의:
async def send_links(): global old_links, bot new_links = await get_new_links() if new_links: for link in new_links await bot.sendMessage(chat_id=chat_id, text=link) time.sleep(3) # 메시지 간에 3초의 지연을 추가 else: pas

send_links 함수는 get_new_links 함수를 통해 얻은 새로운 링크 목록을 텔레그램으로 전송합니다. 메시지를 전송할 때 메시지 간에 3초의 지연을 추가하여 Flood Control 예외를 피합니다.

  1. main 함수 정의
global bot bot_token = '' # 본인의 봇 토큰으로 대체하세요. bot = telegram.Bot(token=bot_token) await bot.sendMessage(chat_id=chat_id, text=f"{query}를 주제로 뉴스 기사 크롤링이 시작되었습니다") while True: await send_links() await asyncio.sleep(30)
  1. 코드 실행:
if __name__ == '__main__': asyncio.run(main())

 

  • 코드를 실행하면 사용자로부터 주제를 입력받아 해당 주제에 대한 뉴스 링크를 주기적으로 수집하고 텔레그램으로 전송합니다.

이렇게 코드를 단계별로 설명했습니다. 원하는 주제를 입력하고 실행하면 됩니다.

전체 코드 – 네이버 키워드 뉴스 텔레그램


전체 완성 코드는 아래와 같습니다. 전체 코드를 복사하여 붙혀넣기 하여 사용하셔도 되지만, 나중에 수정, 변경하시면서 사용하시려면 세부 코드를 보면서 보는 것이 좋을 것입니다.
또, 텔레그램 봇에 대한 정보는 꼭 넣으셔야 작동이 되는 것도 참고 하시구요!
(급하셔서 글을 내리셨다면 다시 위로 올리셔서 보시면 나옵니다)
import requests
from bs4 import BeautifulSoup as bs
import telegram
import asyncio
import time

old_links = []
bot = None
chat_id = ''  # 채팅 ID를 여기에 입력하세요.

# 검색어를 코드 내에서 미리 정의
query = input('주제: ')

async def get_new_links():
    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=&ns=so%3Add%2Cp%3Aall&is_sug_officeid=0'

    response = requests.get(url)
    soup = bs(response.text, 'html.parser')

    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

async def send_links():
    global old_links, bot
    new_links = await get_new_links()

    if new_links:
        for link in new_links
            await bot.sendMessage(chat_id=chat_id, text=link)
            time.sleep(3)  # 메시지 간에 3초의 지연을 추가
    else:
        pass

async def main():
    global bot
    bot_token = ''  # 본인의 봇 토큰으로 대체하세요.
    bot = telegram.Bot(token=bot_token)

    await bot.sendMessage(chat_id=chat_id, text=f"{query}를 주제로 뉴스 기사 크롤링이 시작되었습니다")

    while True:
        await send_links()
        await asyncio.sleep(30)

if __name__ == '__main__':
    asyncio.run(main())

 

EXE 파일 만들기 – 네이버 키워드 뉴스 텔레그램


이제 이 파일을 EXE로 만들어서 공유할 수 있도록 해보겠습니다.

Python 스크립트를 실행 가능한 .exe 파일로 변환하려면 pyinstaller와 같은 패키지를 사용할 수 있습니다. 아래는 파이썬 스크립트를 .exe 파일로 변환하는 단계입니다:

  1. PyInstaller 설치: 먼저, pyinstaller를 설치해야 합니다. 명령 프롬프트나 터미널에서 다음 명령어를 실행하여 설치합니다
    pip install pyinstaller
    

     

  2. 스크립트 변환: 다음으로, 파이썬 스크립트를 .exe 파일로 변환합니다. 명령 프롬프트나 터미널에서 스크립트가 있는 디렉토리로 이동한 후 다음 명령어를 실행합니다:
    pyinstaller --onefile your_script.py

    여기서 your_script.py는 변환하려는 파이썬 스크립트의 이름입니다. 

  3. 빌드 디렉토리: 변환 프로세스가 완료되면 dist 디렉토리가 생성됩니다. 이 디렉토리 안에 실행 가능한 .exe 파일이 생성됩니다. 이 파일을 실행하여 스크립트를 실행할 수 있습니다.

이렇게 하면 파이썬 스크립트를 .exe 파일로 변환할 수 있습니다. 변환된 .exe 파일을 실행하면 스크립트를 실행할 수 있습니다.

EXE 파일 공유 – 네이버 키워드 뉴스 텔레그램


EXE파일은 투데이즈에서 운영하는 화수분 (https://www.whasubun.com)에 가시면 무료 다운 가능하십니다. 화수분에서는 무료 파이선 프로그램을 계속 만들어서 공유드릴 예정이니 가입하시면 많은 도움이 되실 것입니다.

화수분 네이버 뉴스 크롤링 텔레그램 자료 받기
화수분 네이버 뉴스 크롤링 텔레그램 자료 받기
코드에 대한 질문이나 도움이 필요하시면 아래 투데이즈 텔레그램 방에 입장하셔서 물어 보시면 최대한 성심성의껏 답변 드리도록 하겠습니다.
이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.

Related Articles

Stay Connected

18,393FansLike
128,393FollowersFollow
81,934SubscribersSubscribe

Latest Articles