HomeAboutMeBlogGuest
© 2025 Sejin Cha. All rights reserved.
Built with Next.js, deployed on Vercel
📟
PyQt 5 Lecture
/
🎫
003 크롤링 데이터로 자동 재무 보고서를 만들어라 - 2
🎫

003 크롤링 데이터로 자동 재무 보고서를 만들어라 - 2

1. 기획2. 코드3. 상세 내용Excel의 구성4. 실행 화면

1. 기획

이번에는 엑셀로 뽑는 방법에 대해 알아보도록 하겠습니다.

2. 코드

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 import xlsxwriter 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.시총라벨값 = values[0].text self.시총라벨.setText(f'시가총액 : {values[0].text}') self.시총라벨.resize(400, 20) self.시총순위라벨값 = values[1].text self.시총순위라벨.setText(f'시가총액 순위 : {values[1].text}') self.시총순위라벨.resize(400, 20) self.현재가값 = values[3].text self.현재가.setText(f'현재가 : {values[3].text}') self.현재가.resize(400, 20) s = values[4].text.strip().replace('\n', '').split('l') # print(s) self.최고최저가값 = f'{s[0]} | {s[1]}' 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.매출값 = values[6].text self.비용값 = values[7].text self.순익값 = values[8].text self.매출비용순익.setText(f'매출/비용/순익 :\n{values[6].text}\n / {values[7].text}\n / {values[8].text}') self.매출비용순익.resize(400, 80) day = QDateTime(2020, 1, 1, 00, 00, 00) # print(type(day)) # print(dir(day)) day = str(day.daysTo(QDateTime.currentDateTime())) self.오픈된날짜계산값 = day self.오픈된날짜.setText(f'오픈된 날짜 : {day} 일') self.오픈된날짜.resize(400, 20) def excel(self): workbook = xlsxwriter.Workbook('재무보고서.xlsx') worksheet = workbook.add_worksheet('보고서') #셀 안에 문자값 입력하기 worksheet.write('A1', '시가총액') worksheet.write('A2', '시가총액순위') worksheet.write('A3', '현재가') worksheet.write('A4', '52주최고|최저') worksheet.write('A5', '오픈날짜') worksheet.write('A6', '오픈된날짜') worksheet.write('A7', '매출') worksheet.write('A8', '비용') worksheet.write('A9', '순익') worksheet.write('B1', self.시총라벨값) worksheet.write('B2', self.시총순위라벨값) worksheet.write('B3', self.현재가값) worksheet.write('B4', self.최고최저가값) worksheet.write('B5', '2020. 1. 1.') worksheet.write('B6', self.오픈된날짜계산값) worksheet.write('B7', self.매출값) worksheet.write('B8', self.비용값) worksheet.write('B9', self.순익값) workbook.close() def close(self): return QCoreApplication.instance().quit() 프로그램무한반복 = QApplication(sys.argv) 실행인스턴스 = 자동재무보고서() 프로그램무한반복.exec_()
 

3. 상세 내용

엑셀라이터는 엑셀을 다룰 수 있는 파이썬 모듈로 다른 라이브러리와 비교해보더라도 훌륭하게 엑셀을 다를 수있는 모듈입니다. 자세한 비교내용, 모듈의 사용법은 아래 무료책으로 공개해두었습니다. 혹시 더 궁금하신 분은 아래 내용을 참고해주세요.
xlsxwriter 튜토리얼로 배우는 Python 엑셀 프로그래밍
이 책은 빅데이터를 가공하여 엑셀로 가시화 시키기 원하는 업무 담당자와 단순 업무를 Python을 이용하여 자동화 시키려 하는 업무 담당자에게 추천해드립니다. 또한 부서의 업무 고도화, 효율화를 위해 적절한 자동화 프로그램을 찾지 못한 기업과 학문적 호기심을 가진 개인에게도 추천해 드립니다. 세계에서 유행중인 Python은 타 언어에 비해 다루기 쉬...
xlsxwriter 튜토리얼로 배우는 Python 엑셀 프로그래밍
https://ridibooks.com/books/2773000020
xlsxwriter 튜토리얼로 배우는 Python 엑셀 프로그래밍
 
해당 내용은 좀 더 상세한 영상강의로도 나와 있습니다.
Python 엑셀 프로그래밍 - with xlsxwriter - 인프런
xlsxwriter 튜토리얼로 배우는 Python 엑셀 프로그래밍의 기초 강좌입니다. Python과 엑셀을 사용하여 데이터를 분석하고 업무를 자동화 할 수 있습니다. 입문 프로그래밍 언어 프레임워크 및 라이브러리 데이터 분석 업무 자동화 xlsxwriter Python 데이터 분석 데이터 시각화 업무자동화 온라인 강의 프로그래밍 언어 파이썬(python)의 엑셀 라이브러리, xlsxwriter를 활용해 엑셀 관련 업무를 파이썬으로 자동화해 보고 간단한 데이터 분석 및 데이터 시각화까지 경험해 봅니다.
Python 엑셀 프로그래밍 - with xlsxwriter - 인프런
https://www.inflearn.com/course/%ED%8C%8C%EC%9D%B4%EC%8D%AC-%EC%97%91%EC%85%80-%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D
Python 엑셀 프로그래밍 - with xlsxwriter - 인프런
 
우선 엑셀라이터를 설치해주세요! PowerShell 창에서 입력하셔도 좋고, 만약 Visual Studio Code를 사용하고 있으시다면 Terminal 창에서 입력하셔도 좋습니다.
pip3 install xlsxwriter
 

Excel의 구성

Excel에 개념인 Workbook, Worksheet, Cell 등이 이 모듈에서 그대로 사용됩니다.
  1. Workbook
    1. 하나의 Excel 파일이라 생각하시면 됩니다. Workbook 안에는 Worksheet 생성이 가능합니다. 또한 Excel과 같이 여러 Worksheet를 생성하여 작업이 가능합니다.
  1. Worksheet
    1. Worksheet를 생성해야 그 안에 포함되는 Cell에 값을 입력하는 등의 작업이 가능합니다. 아래와 같이 엑셀 좌측 하단에 있는 Sheet입니다.
      notion image
  1. Cell
    1. Worksheet에는 Column (열)과 Row(행)으로 구분이 되어있습니다. 이를 통해서 각각의 칸에 접근할 수 있는데 이단위를 Cell이라고 합니다
 
아래와 같이 .py 파일로 만들어 실행시켜보세요!
import xlsxwriter #엑셀 파일 생성하기 workbook = xlsxwriter.Workbook('test.xlsx') #파일 안에 워크 시트 생성하기 worksheet = workbook.add_worksheet('jejucodingcamp') #셀 안에 문자값 입력하기 worksheet.write('A1', 'A') worksheet.write('B1', 'B') worksheet.write('C1', 'C') worksheet.write('D1', 'D') worksheet.write('E1', 'E') #셀 안에 숫자값 입력하기 worksheet.write('A2', 1) worksheet.write('B2', 2) worksheet.write('C2', 3) worksheet.write('D2', 4) worksheet.write('E2', 5) #좌표로 셀 안에 문자값 입력하기 #worksheet.write(row값, column값, 원하는 입력 값) worksheet.write(2, 0, 'a') worksheet.write(2, 1, 'b') worksheet.write(2, 2, 'c') worksheet.write(2, 3, 'd') worksheet.write(2, 4, 'e') #좌표로 셀 안에 숫자값 입력하기 worksheet.write(3, 0, 10) worksheet.write(3, 1, 20) worksheet.write(3, 2, 30) worksheet.write(3, 3, 40) worksheet.write(3, 4, 50) workbook.close()
 
이제 크롤링한 데이터를 엑셀 파일로 만들어보십시오!

4. 실행 화면

 
notion image