0. 스토리

https://s3-us-west-2.amazonaws.com/secure.notion-static.com/01343f81-c77d-461c-9cae-e616543aeeef/22.png

대표가된 대리인 No.1은 우선 가장 먼저 주인이 돌아왔을 때 보고할 수 있는 보고서 양식을 만들기로 합니다.

"운영 날짜는 달력에서 매일 자동으로 계산하고, 매출, 비용은 웹에서 개시되고 있으니, 크롤링을 통해 순익까지 계산하는 프로그램을 만들자냥!"

이미 대표가 된 대리인 No.1에 지시에 대리인들은 일사분란하게 프로그램을 만들기 시작했습니다.

1. 기획

Naver 금융과 똑같이 만든 크롤링 연습용 사이트에서 정보를 가져와 아래와 같이 구현합니다.

https://s3-us-west-2.amazonaws.com/secure.notion-static.com/97911b7c-8333-463c-ad03-838ac7a8b7c0/3.png

2. 디자인

https://s3-us-west-2.amazonaws.com/secure.notion-static.com/b0ade25c-972f-44ba-83c7-6ceb15b21c4b/4.png

디자인을 보니 엑셀로 저장하기 기능이 있었으면 좋겠군요.

3. 코드

import sys
from PyQt5.QtWidgets import QApplication, QWidget, QLabel, QPushButton, QToolTip
from PyQt5.QtGui import QIcon, QPixmap, QFont
from PyQt5.QtCore import QCoreApplication, QDateTime
import requests
from bs4 import BeautifulSoup

class 자동재무보고서(QWidget):
    def __init__(self):
        super().__init__()
        self.UI초기화()

    def UI초기화(self):
        self.제목라벨 = QLabel('(주)캣네생선', self)
        self.제목라벨.move(50, 50)
        self.제목라벨.setFont(QFont('Helvetica', pointSize=20, weight=2))

        self.시총라벨 = QLabel('시가총액 : - 원', self)
        self.시총라벨.move(50, 110)

        self.시총순위라벨 = QLabel('시가총액 순위 : 위니브 월드 - 위', self)
        self.시총순위라벨.move(50, 140)

        self.현재가 = QLabel('현재가 : - 원', self)
        self.현재가.move(50, 170)

        self.최고최저가 = QLabel('52주 최고 | 52주 최저 : - 원 | - 원', self)
        self.최고최저가.move(50, 200)

        self.배당율 = QLabel('배당율 : - %', self)
        self.배당율.move(50, 230)

        self.오픈날짜 = QLabel('오픈날짜 : 2020년 1월 1일', self)
        self.오픈날짜.move(50, 260)

        self.오픈된날짜 = QLabel('오픈된날짜 : - 일', self)
        self.오픈된날짜.move(50, 290)

        self.매출비용순익 = QLabel('매출/비용/순익 : -원/-원/-원', self)
        self.매출비용순익.move(50, 320)

        작성버튼 = QPushButton('재무 보고서 작성', self)
        작성버튼.move(30, 430)
        작성버튼.resize(340, 50)
        작성버튼.clicked.connect(self.write)

        엑셀버튼 = QPushButton('엑셀 보고서 작성', self)
        엑셀버튼.move(30, 490)
        엑셀버튼.resize(340, 50)
        엑셀버튼.clicked.connect(self.excel)

        종료버튼 = QPushButton('프로그램 종료', self)
        종료버튼.move(30, 550)
        종료버튼.resize(340, 50)
        종료버튼.clicked.connect(self.close)

        self.대표이미지 = QLabel(self)
        self.대표이미지.setPixmap(QPixmap('img/weniv-licat.png').scaled(35, 44))
        self.대표이미지.move(10, 10)

        self.setWindowTitle('재무 보고서를 만들어라!')
        self.setWindowIcon(QIcon('img/weniv-licat.png'))
        self.setGeometry(800, 300, 400, 630)
        self.show()

    def write(self):
        url = '<http://paullab.co.kr/stock.html>'
        response = requests.get(url)
        response.encoding = 'utf-8'
        html = response.text
        soup = BeautifulSoup(html, 'html.parser')

        values = soup.select('.tables td')
        # print(values)
        self.시총라벨.setText(f'시가총액 : {values[0].text}')
        self.시총라벨.resize(400, 20)

        self.시총순위라벨.setText(f'시가총액 순위 : {values[1].text}')
        self.시총순위라벨.resize(400, 20)

        self.현재가.setText(f'현재가 : {values[3].text}')
        self.현재가.resize(400, 20)

        s = values[4].text.strip().replace('\\n', '').split('l')
        # print(s)
        self.최고최저가.setText(f'52주 최고 | 52주 최저 : {s[0]} | {s[1]}')
        self.최고최저가.resize(400, 20)

        i = values[5].text.strip()
        # print(i)
        self.배당율.setText(f'배당율 : {i}')
        self.배당율.resize(400, 20)

        self.매출비용순익.setText(f'매출/비용/순익 :\\n{values[6].text}\\n / {values[7].text}\\n / {values[8].text}')
        self.매출비용순익.resize(400, 80)

    def excel(self):
        pass

    def close(self):
        return QCoreApplication.instance().quit()

프로그램무한반복 = QApplication(sys.argv)
실행인스턴스 = 자동재무보고서()
프로그램무한반복.exec_()

4. 상세 내용

4.1 크롤링 30분 요약강좌

혹시 크롤링을 처음 해보시는 분은 아래 영상을 참고해주세요.

https://youtu.be/l_pjQWtJf3Y