파이썬을 하려고하는데요 ㅠ 질문 부탁..
빈뽀르
3년 전
조회 1,927
search_word 배열 넣고
url로 선언하려하는데 ㅠ 안되드라구요...혹시 틀린걸까요..? 여러개 키워드하고싶은데..
(네이버 뉴스에 면종류 기사 알림입니다!)
도움 좀 부탁드립니다 ㅠ
</p>
<p>import requests</p>
<p>from bs4 import BeautifulSoup</p>
<p>import telepot</p>
<p>#시간 마다 알람 지정용</p>
<p>from apscheduler.schedulers.blocking import BlockingScheduler</p>
<p> </p>
<p>#서치 키워드</p>
<p>search_word = ['라면','라멘','국수']</p>
<p>#텔레그램 봇 생성</p>
<p>token = 'xxx'</p>
<p>bot = telepot.Bot(token=token)</p>
<p> </p>
<p>#스케줄러 생성</p>
<p>sched = BlockingScheduler()</p>
<p> </p>
<p>#기존에 보냈던 링크를 담아둘 리스트</p>
<p>old_links = []</p>
<p> </p>
<p>#링크 추출 함수</p>
<p>def extract_links(old_links=[]):</p>
<p> url = f'<a href="https://search.naver.com/search.naver?where=news&query={search_word}&sm=tab_opt&sort=1'" target="_blank" rel="noopener noreferrer">https://search.naver.com/search.naver?where=news&query={search_word}&sm=tab_opt&sort=1'</a></p>
<p> req = requests.get(url)</p>
<p> html = req.text</p>
<p> soup = BeautifulSoup(html, 'html.parser')</p>
<p> </p>
<p> search_result = soup.select_one('.list_news')</p>
<p> news_list = search_result.select('.bx > .news_wrap .news_tit')</p>
<p> </p>
<p> links = []</p>
<p> for news in news_list[:5]:</p>
<p> link = news['href']</p>
<p> links.append(link)</p>
<p> </p>
<p> new_links=[]</p>
<p> for link in links:</p>
<p> if link not in old_links:</p>
<p> new_links.append(link)</p>
<p> print(new_links)</p>
<p> </p>
<p> return new_links</p>
<p> </p>
<p>#이전 링크를 매개변수로 받아서 비교 후, 새로운 링크만 출력</p>
<p>#차후 이 부분을 메세지 전송 코드로 변경하고 매시간 동작하도록 설정</p>
<p>#새로운 링크가 없다면 빈 리스트 반환</p>
<p>def send_links():</p>
<p> global old_links</p>
<p> new_links = extract_links(old_links)</p>
<p> if new_links:</p>
<p> for link in new_links:</p>
<p> bot.sendMessage(chat_id='xxx', text = link)</p>
<p> old_links += new_links.copy()</p>
<p> old_links = list(set(old_links))</p>
<p> </p>
<p>#최초 시작</p>
<p>send_links()</p>
<p> </p>
<p>#스케줄 설정</p>
<p>#5초 마다 해당 코드 반복 실행</p>
<p>sched.add_job(send_links, 'interval', seconds = 5)</p>
<p> </p>
<p>#시작</p>
<p>sched.start()</p>
<p> </p>
<p>
댓글을 작성하려면 로그인이 필요합니다.
답변 1개
답변을 작성하려면 로그인이 필요합니다.
로그인