본문 바로가기
Language/Python

[ Python ] selenium 으로 알림 웹 크롤러 만들기

by 기저귀찬개발자 2019. 7. 1.

목표 : 1분마다 네이버 날씨 뉴스 검색하여 최신 등록된 목록 있으면 알림 띄우기

 

사용 패키지 : ToastNotifier( window toast 알림 띄우기 )

                  selenium( 브라우저 )

                  requests( http 요청 )

                  schedule( 스케쥴링 )

 

필요한 패키지들은 pip install 을 이용해 설치해주고 네이버 검색을 해보니

https://search.naver.com/search.naver?sm=top_hty&fbm=1&ie=utf8&query=날씨

query 파라미터가 검색값을 의미하는 것을 알 수 있다. 해당 URL로 접속한 뒤에 개발자 도구를 켜서 

뉴스 리스트가 어떤 태그를 가지는지 알 수가 있게 된다.

 

 

위에서 확인한 URL과 태그를 조합하면 1분마다 검색값을 호출하여 

새로운 뉴스가 있을경우 cmd창 혹은 알림으로 확인 가능하게 된다.

빠르게 검색하여야 할 것이 있다면 해당 소스를 살짝 변경하여 확인할 수 있고

타임 이벤트 같은 경우에도 확인할 수 있게된다.

# parser.py
import requests
import schedule
import time
from win10toast import ToastNotifier

from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from webdriver_manager.firefox import GeckoDriverManager

news_list = []

toaster = ToastNotifier()

browser = webdriver.Firefox(executable_path=GeckoDriverManager().install())
browser.set_window_size(1120, 550)

def searchUpdate():

	alert_str = "";
	browser.get('https://search.naver.com/search.naver?sm=top_hty&fbm=1&ie=utf8&query=날씨')

	#검색이 지연될 경우 대비
	time.sleep(1)

	#페이지 이동이 필요할 경우 클릭 이벤트로 접근할 수도 있다.
	#tab = browser.find_elements_by_class_name("tab__item")
	#tab[1].click()
	
	news_element = browser.find_element_by_class_name("_prs_nws_all").find_elements_by_tag_name("dt")

	for i in range(len(news_element)):
		news_title = news_element[i].find_element_by_tag_name("a").get_attribute("title")
		if not news_title in news_list:
			news_list.append(news_title)
			alert_str += news_title;
			alert_str += "\n";
			print(news_title)

	toaster.show_toast("Sample Notification",alert_str)


schedule.every(1).minutes.do(searchUpdate)

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

 

 

 

'Language > Python' 카테고리의 다른 글

[ Python ] 핸드폰 이메일 알림 설정하기  (0) 2019.07.01

댓글