-
코로나 바이러스 현황을 파이썬 웹 request해서 GUI로 만들기컴퓨터/파이썬 2020. 5. 8. 09:33728x90반응형
COVID-19 STATUS GUI
개발 일지 정리
(다 처음 써봐서 더러움)TO-DO: 전날 비해 몇 명 늘었는지 + 붙일 것
사용 도구 : PyQt5, BeautifulSoup, pyinstaller
코로나 현황 request 사이트 : https://www.worldometers.info/coronavirus/country/south-korea/
우선 BeautifulSoup를 이용해 Last updated 문구와, 확진, 사망, 회복자 수를 parsing 하는 법
1. Parsing
import requests from bs4 import BeautifulSoup req = requests.get("https://www.worldometers.info/coronavirus/country/south-korea/") html = req.text soup = BeautifulSoup(html, "html.parser") last_update = soup.findAll(text=re.compile("updated")) numbers = soup.select("div.maincounter-number > span") arr = [] for txt in numbers: arr.append(txt.text.strip(" ")) # 띄어쓰기 제거 number_of_cases = arr[0] # 확진자 수 number_of_deaths = arr[1] # 사망자 수 number_of_recovered = arr[2] # 격리해제 수
그다음 PyQt5를 이용해 GUI를 만든다.
2. GUI implement
import sys from PyQt5.QtWidgets import QApplication, QWidget, QLabel, QVBoxLayout from PyQt5.QtCore import Qt import requests from bs4 import BeautifulSoup from PyQt5.QtGui import QFont import re class CORONA(QWidget): def __init__(self): super().__init__() self.initUI() def initUI(self): last_update_label = QLabel("last updated", self) last_update_label.setAlignment(Qt.AlignCenter) case_number_label = QLabel("확진 : ", self) case_number_label.setAlignment(Qt.AlignCenter) death_count_label = QLabel("사망 : ", self) death_count_label.setAlignment(Qt.AlignCenter) recovered_label = QLabel("격리해제 : ", self) recovered_label.setAlignment(Qt.AlignCenter) # Font settings global_font = case_number_label.font() global_font.setPointSize(20) global_font.setBold(True) global_font.setFamily("nanumgothic") last_update_font = last_update_label.font() last_update_font.setPointSize(10) last_update_label.setStyleSheet("Color : grey") last_update_label.setFont(last_update_font) case_number_label.setFont(global_font) death_count_label.setFont(global_font) recovered_label.setFont(global_font) # COVID-19 Parse corona_status = self.parseHTML() case_number_label.setText( case_number_label.text() + corona_status[0] + "명") death_count_label.setText( death_count_label.text() + corona_status[1] + "명") recovered_label.setText( recovered_label.text() + corona_status[2] + "명") last_update_label.setText(corona_status[3]) # add labels to widgets layout = QVBoxLayout() layout.addWidget(last_update_label) layout.addWidget(case_number_label) layout.addWidget(death_count_label) layout.addWidget(recovered_label) self.setLayout(layout) self.setWindowTitle("한국 코로나 바이러스 현황") self.setGeometry(400, 400, 400, 300) self.show() def parseHTML(self): corona_status = [] req = requests.get( "https://www.worldometers.info/coronavirus/country/south-korea/" ) html = req.text soup = BeautifulSoup(html, "html.parser") last_update = soup.findAll(text=re.compile("updated")) numbers = soup.select("div.maincounter-number > span") for txt in numbers: corona_status.append(txt.text.strip(" ")) corona_status.append(last_update[0]) return corona_status if __name__ == "__main__": app = QApplication(sys.argv) ex = CORONA() sys.exit(app.exec_())
3. exe 파일 만들기
pyinstaller(pip install pyinstaller) 를 이용해 exe 파일로 만들기 (-w=콘솔 없이, -F=onefile)
(py가 있는 폴더에서 실행, dist안에 exe파일이 있음)
pyinstaller -F -w %1
728x90'컴퓨터 > 파이썬' 카테고리의 다른 글
#1 파이썬 정규 표현식 공부 (regular expression) (0) 2020.05.11 파이썬 NetworkX 노드 색깔(color) (0) 2017.07.02 파이썬 최단경로 구하기 (NetworkX 라이브러리) (0) 2017.06.29