일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 엔비디아
- 힐스테이트 광교산
- 코스피
- MQTT
- esp32
- 국내주식
- Python
- ConnectedHomeIP
- Bestin
- matter
- 배당
- 애플
- 오블완
- Espressif
- 나스닥
- Apple
- 파이썬
- 월패드
- RS-485
- 현대통신
- 해외주식
- 미국주식
- Home Assistant
- 홈네트워크
- 티스토리챌린지
- raspberry pi
- 퀄컴
- 공모주
- 매터
- homebridge
- Today
- Total
목록Python (62)
YOGYUI
금융감독원의 전자공시시스템(DART) 홈페이지(https://dart.fss.or.kr/)에서 '최근공시' 메뉴를 활용하면 최근에 전자공시된 모든 유형의 문서를 확인할 수 있다 (시간 - 회사명 - 제출인 정보 제공) 기능은 '최근공시'이지만 검색하고자 하는 날짜를 선택할 수 있기 때문에 특정 요일에 공시된 모든 문서를 리스트업할 수 있다 글을 쓰고 있는 2021년 10월 1일 현재까지는 OpenAPI인 OPENDART로는 제공되지 않는 기능이기 때문에 DART 웹페이지에서 Python을 활용해서 크롤링하는 코드를 작성해보자 1. 웹구조 분석 1.1. URL 특정 날짜를 선택하면 URL이 다음과 같이 변경된다 https://dart.fss.or.kr/dsac001/mainY.do?selectDate=20..
앞선 글(링크)에서 금융감독원 OpenDART의 '증권신고서 주요정보 - 지분증권' API로 신규상장기업의 증권신고서 원문 문서번호를 얻고자 했는데, 안타깝게도 쿼리되지 않는 기업이 굉장히 많았다 이번 포스트에서는 OpenDART의 '공시검색'으로 특정 기업이 공시한 증권신고서를 전부 리스트업한 뒤 그중에서 상장과 관련된 지분증권 문서의 문서번호를 가져오고, 문서의 HTML 원문을 로컬에 저장해보도록 하자 OpenDART 사용법 및 DART 원문 다운로드 방법은 아래 링크를 참고 금융감독원::OPENDART 전자공시 Open API 사용하기 금융감독원::DART 공시문서 js 렌더링된 HTML 가져오기 지난 2021년 7월 26일,27일 양일간 공모주 청약을 진행한 카카오뱅크를 예로 들어보자 import..
배경 설명을 하자면 너무 길어지니 방법론에 대해서만 기술하도록 한다 URL request 후 javascript가 렌더링된 결과를 얻기 위해 requests-HTML 라이브러리를 사용한다 https://docs.python-requests.org/projects/requests-html requests-HTML v0.3.4 documentation Requests-HTML: HTML Parsing for Humans (writing Python 3)! This library intends to make parsing HTML (e.g. scraping the web) as simple and intuitive as possible. When using this library you automaticall..
pandas 데이터프레임(DataFrame) 객체의 열(column)의 데이터형을 가져오는 방법을 알아보자 (get data type of columns in dataframe) 예시를 위해 int, float, str, bool, datetime 데이터를 가진 데이터프레임을 만들어준다 from datetime import datetime import pandas as pd array = list() array.append({'A': 1, 'B': 1.0, 'C': '1', 'D': True, 'E': datetime(2021, 9, 1)}) array.append({'A': 2, 'B': 1.1, 'C': '2', 'D': False, 'E': datetime(2021, 9, 2)}) array.app..
작년 SK바이오팜을 시작으로 미래에셋증권에서 진행하는 공모주 청약에 대부분 참여하고 있다 상반기에는 거의 대부분 익절할 수 있었는데 하반기 종목들은 시퍼렇게 질린채 회복하지를 못하고 있다 ㅠ 분석기사나 유튜브를 보면 청약경쟁률, 기관의무보유확약비율 등 몇몇 지표에 따라 희비가 엇갈렸다고 하는데, 다른 사람이 분석한 것만 쳐다보면 재미가 없으니깐 직접 DB를 구축하고 레코드를 입력해서 직접 분석(R이나 Python을 써서)을 해보려 한다 우선 DB부터 구축해보자 DBMS는 개인 NAS(ipTime 제품)에 탑재해 둔 MySQL을 활용하기로 했다 (요즘은 시놀로지 NAS에 설치해둔 몽고DB를 주로 사용하는지라 SQL은 진짜 오랜만이라 차근차근 정리할 겸 ㅎㅎ) 대부분 작업은 커맨드 라인 툴 (MariaDB ..
일전에 PyQt를 사용해서 내가 직접 만든 웹브라우저(링크)로 내 블로그를 방문하는 테스트를 진행했는데, 네이버 애널리틱스의 '사용자 웹브라우저' 분석에 'Chrome 83' 항목이 새로 생긴 것을 볼 수 있었다 QtWebEngine의 Chromium 버전은 다음과 같다고 한다 내 개발환경이 Qt 5.15.2니깐 Chromium 83이 코어로 사용되었다는 것을 알게 되었다 ㅎㅎ 일일이 Qt 버전을 확인하지 않고 브라우저 버전 정보를 가져올 수 있는 방법을 찾다가, 자바스크립트로 'navigator.userAgent'를 호출하면 된다는 것을 확인했다 https://www.w3schools.com/jsref/prop_nav_useragent.asp Navigator userAgent Property Navi..
4. 네비게이션 툴바 만들기 북마크바를 만들려고 하다보니, 탭 안의 위젯이 url 에디트 등의 컨트롤들을 각각 모두 가지고 있는 것이 불합리해보여서 별도로 네비게이션 툴바를 만들었다 (QToolBar 상속) [NavigationWidget.py] from PyQt5.QtCore import pyqtSignal, QSize from PyQt5.QtGui import QIcon from PyQt5.QtWidgets import QToolBar, QToolButton, QLineEdit class NavigationToolBar(QToolBar): _is_loading: bool = False sig_navigate_url = pyqtSignal(str) sig_go_backward = pyqtSignal()..
3. 윈도우 만들기 앞서 구현한 WebPageWidget 여러개를 하나의 윈도우가 관리할 수 있도록 QTabWidget을 사용해서 윈도우를 만들어보자 [WebBrowserWindow.py] from functools import partial from PyQt5.QtCore import QSize from PyQt5.QtGui import QIcon, QCloseEvent from PyQt5.QtWidgets import QMainWindow, QTabWidget, QTabBar, QPushButton from WebPageWidget import WebPageWidget class WebBrowserWindow(QMainWindow): def __init__(self, parent=None): supe..
웹크롤링 관련해서 작업을 할 때 간혹 브라우저를 열어서 웹페이지에 직접 접근해야 하는 경우가 있는데, 크롬을 쓰다보니 원하는 동작들을 구현하기 힘든 경우가 간혹 있어서 간단한 수준의 웹브라우저를 직접 구현해보기로 했다 (만들다보니 재미들려서 조금씩 기능을 추가해나가는 중 ㅎㅎ) 개발일지 남길 겸 블로그에 포스팅해보도록 한다 (Github 저장소도 만들고...) 1. Package Install PyQt가 워낙에 익숙하다보니 웹브라우저도 PyQt로 만들어보기로 했다 필요한 패키지인 'PyQtWebEngine'은 최신 PyQt5 패키지에는 포함이 되어 있지 않아서 따로 pip으로 설치해줘야 한다 (https://pypi.org/project/PyQtWebEngine/) pip install PyQtWebEn..
Python으로 문자열(str)을 다룰 때 format을 자주 활용하게 된다 print("Hello World! {}".format('yogyui')) print("Hello World! {:d}".format(1234)) print("Hello World! 0x{:X}".format(255)) temp = "Hello World! {}" print(temp) print(temp.format('test')) print("{0} {1}!".format('Hello', 'World')) 출력 Hello World! yogyui Hello World! 1234 Hello World! 0xFF Hello World! {} Hello World! test Hello World! Problem format을 활용할..
Python 내장함수인 hex는 정수값을 16진수로 표현된 문자열(str)을 반환해준다 help(hex) >> Help on built-in function hex in module builtins: hex(number, /) Return the hexadecimal representation of an integer. hex(12648430) '0xc0ffee' In [1]: hex(25) Out[1]: '0x19' In [2]: hex(1234) Out[2]: '0x4d2' 그런데, 함수의 인자로 음의 정수 (negative integer)를 입력하면 다른 프로그래밍 언어에서와는 다른 결과가 출력된다 In [3]: hex(-1) Out[3]: '-0x1' In [4]: hex(-128) Out[4]:..
Python 코딩할 때 자주 활용하는 자료구조 중 하나인 list의 요소들을 뒤집는 방법을 알아보자 (은근히 쓸데가 많다) 참고: 모든 코드는 python 3.x에서 작성되었다 1. 리스트 객체 자체를 뒤집기 list 객체의 reverse 메서드를 사용하면 된다 예를 위해 리스트 객체를 하나 생성한다 a = [1, 2, 3, 4, 5] In [1]: print(a) Out[1]: [1, 2, 3, 4, 5] 이제 뒤집어보자 a.reverse() In [2]: print(a) Out[2]: [5, 4, 3, 2, 1] 간단하게 요소를 뒤집을 수 있다 그런데 리스트 객체 자체가 바뀌는 것이기 때문에, 원본 리스트를 그대로 남겨두고자 하는 경우에는 적절한 구현 방식이 아니다 (나도 이 방식은 거의 쓰지 않는다..
윈도 OS를 사용하다보면 (특히 개발자들은) 환경 변수를 설정해야하는 경우가 있다 제어판 - 시스템 - 고급 탭의 '환경 변수' GUI로 해결하는게 일반적이다 예시를 위해 'TEST' 변수를 한 개 만든 뒤에 Python으로 수정하는 방법을 알아보자 (이 글에서는 사용자 변수가 아니라 시스템 변수를 대상으로 한다) 임의로 C:\test1, C:\test2, C:\test3 3개의 경로를 값으로 입력했다 (실제 존재하지 않는 경로여도 상관없다) 여러 개의 경로를 입력할 경우 세미콜론(;) 구분자로 입력해줘야 한다 1. OS module Python 구동 시 환경변수를 동적으로 변경하고자 할 경우 built-in 모듈인 os의 environ (_Environ) 클래스를 사용하는게 일반적인 방법이다 'TEST..
PyQt5의 pyqtSignal 혹은 pyqtBoundSignal을 함수와 연결(connect)시, 여러 객체를 for문 안에서 lambda를 사용하여 연결할 경우 정상적으로 동작하지 않는 문제가 있다 다음 예시를 통해 문제를 확인해보자 if __name__ == '__main__': import sys from PyQt5.QtGui import * from PyQt5.QtCore import * from PyQt5.QtWidgets import * app = QCoreApplication.instance() if app is None: app = QApplication(sys.argv) btns = [ QPushButton('BUTTON1'), QPushButton('BUTTON2'), QPushBut..
대부분의 통합개발환경(IDE)는 텍스트 에디트의 탭('\t') 길이(크기)를 설정할 수 있는 옵션이 있다 (들여쓰기를 위해 주로 사용) Qt의 QTextEdit 위젯의 Tab(탭) 길이를 변경하는 방법을 알아보자 우선 탭의 공백 길이가 Default는 어느 정도 되는지 알아보기 위해 다음과 같이 코드를 작성해봤다 하나의 스페이스와 일반 문자열의 가로 폭을 동일하게 표현하기 위해 Monospaced 폰트 중 하나의 'D2Coding'을 활용했다 https://github.com/naver/d2codingfont naver/d2codingfont D2 Coding 글꼴. Contribute to naver/d2codingfont development by creating an account on GitHub..