목록Python (58)
YOGYUI
분양받은 아파트 입주 시작일(5/17)이 코앞으로 다가왔다 분명히 아파트는 다 지어졌는데 나는 현금이 없다... 현금없는 서민에게 필요한건 역시 주택담보대출! 집단대출 상담받으면서 대출가능금액, 대출기한 및 금리같은 중요한 정보들을 들었는데, 매달 내야하는 이자 및 원금(원리금) = 내가 실제로 내야하는 돈에 대해서는 상담사가 계산기를 두들겨주는 것만 보고는 까먹어버렸다... 대출 이자 계산을 해주는 웹사이트가 워낙 많기 때문에 인터넷만 가능한 환경이면 금방 계산 가능한 세상이긴 하지만, 개발자라면 계산기정도는 직접 만들어보는 것도 시간때우기용으로 적당하다 ㅎㅎ Python으로 만들었고, UI는 PyQt5를 활용했다 https://github.com/YOGYUI/Mortgage-Loan-Calculato..
PyQt5 - Set maximum value over 0x7FFFFFFFF of Spin Box PyQt5의 QSpinBox는 4바이트 부호 있는 정수 (singed integer)를 표현할 수 있다 (자세히 알아보지는 않았는데, QSpinBox 내부 QLineEdit의 validator가 Qt에서 제공하는 default QIntValidator인듯?) from PyQt5.QtWidgets import * app = QApplication([]) spinbox = QSpinBox() lineedit = spinbox.lineEdit() validator = lineedit.validator() print(validator) In [1]: print(validator) Out[1]: (그냥 QValida..
typing - Literal 파이썬, 자바스크립트, 루비 등 최근 유행하는 프로그래밍 언어의 가장 큰 특징 중 하나는 변수의 형(type)을 지정하지 않아도 원활하게 동작하는 코드를 작성할 수 있다는 점이다 (dynamic typing) v = '123456789' >> type(v) v = 123456789 >> type(v) 하지만 대형 팀 프로젝트 작업 시에 함수 인자 및 반환의 형을 명시해두지 않으면 각종 예외 발생으로 고통받게 된다 def my_func(x): return x + 1 >> my_func(1) 2 >> my_func('123') Traceback (most recent call last): File "C:\Python38\lib\code.py", line 90, in runcod..
앞서 공공데이터포털에서 대기오염정보를 조회하는 예시를 작성해봤는데(링크), API의 서비스 중 "측정소별 실시간 측정정보"를 호출하기 위해서는 '측정소 이름'을 정확히 기재해야 결과가 제대로 나왔다 API 명세서에 측정소 이름에 대한 정보는 없으며, 에어코리아 홈페이지의 "측정소 정보"에서 지역별 측정소의 이름과 주소 정보를 확인할 수 있다 URL: https://airkorea.or.kr/web/stationInfo?pMENU_NO=93 전체 조회 후 엑셀로 저장하는 방법(a.k.a. 노가다)이 가장 보편적이겠지만, 간단한 자바스크립트 및 파이썬으로 스마트하게 자동화할 수 있다 1. 웹페이지 소스 확인 브라우저의 개발자 도구에서 제어하고자 하는 컨트롤들에 해당하는 태그들을 찾아보자 (구글 크롬: 단축키..
공공데이터포털에서 전국의 대기오염정보를 가져와보자 공공데이터포털 관련 글을 많이 쓰다보니 서론 쓰는 것도 힘들다 1. API 활용신청 정식 데이터 타이틀은 "한국환경공단_에어코리아_대기오염정보" URL: https://www.data.go.kr/tcs/dss/selectApiDataDetailView.do?publicDataPk=15073861 2020년 12월에 공공데이터포털에 등록되었는데, 8000건이 넘게 활용신청된 아주 따끈따끈하고 핫한 API !! 미세먼지가 1년 내내 우리를 괴롭히니 어쩔 수가 없는건가 ㅠㅠ API 활용신청(방법은 링크 참고)하고 인증키 획득 인증키를 메모장에 복사해두자 2. API 명세 확인 API 명세서는 워드 문서로 제공되는데, 상세하게 기입되어 있어 문서 한장만으로도 충..
Get Corporations List Classified by Sectors from DART(fss) [시리즈] 웹크롤링 - DART 기업개황 업종별 기업 리스트 가져오기 (1) 웹크롤링 - DART 기업개황 업종별 기업 리스트 가져오기 (2) 웹크롤링 - DART 기업개황 업종별 기업 리스트 가져오기 (3) 웹크롤링 - DART 기업개황 업종별 기업 리스트 가져오기 (Final) 11. 기업 객체 정보 가져오도록 스크립트 수정 테이블에서 기업 이름 및 기업 고유 코드 (8자리 문자열), 섹터 id를 함께 가져오도록 javascript를 수정하도록 하자 [run_code.js] /* * 필요한 함수 선언 */ // jsTree 노드의 부모 노드들의 id와 text 어레이로 반환 function fnG..
Get Corporations List Classified by Sectors from DART(fss) [시리즈] 웹크롤링 - DART 기업개황 업종별 기업 리스트 가져오기 (1) 웹크롤링 - DART 기업개황 업종별 기업 리스트 가져오기 (2) 웹크롤링 - DART 기업개황 업종별 기업 리스트 가져오기 (3) 웹크롤링 - DART 기업개황 업종별 기업 리스트 가져오기 (Final) 7. 업종에 기업이 존재하지 않을 경우에 대한 예외처리 전체 트리노드를 크롤링하다보니 미처 고려하지 못했던 문제를 발견했다 특정 업종의 경우 해당 업종에 속하는 기업이 아예 없는 경우가 있는데, 이 경우 테이블 아래의 페이지 탐색 태그 () 자체가 없어서 코드에 예외가 발생했다 앞서 javascript에서 함수 두 개를 다..
Get Corporations List Classified by Sectors from DART(fss) [시리즈] 웹크롤링 - DART 기업개황 업종별 기업 리스트 가져오기 (1) 웹크롤링 - DART 기업개황 업종별 기업 리스트 가져오기 (2) 웹크롤링 - DART 기업개황 업종별 기업 리스트 가져오기 (3) 웹크롤링 - DART 기업개황 업종별 기업 리스트 가져오기 (Final) 4. 트리 노드 위계구조 파악 업종 정보 트리의 위계구조(hierarchy)를 함께 가져와야 나만의 서비스를 만들기 편하다 jsTree 노드 객체의 부모 노드의 정보는 객체 내부에 parents 속성으로 조회할 수 있다 예를 위해 '곡물 및 기타 식량작물 재배업' 최하위 노드에 접근해보자 var tree = $j("#bus..
2022년 공휴일 정보 공공데이터포털(data.go.kr)의 "한국천문연구원_특일 정보" Open API를 활용하면 공휴일 정보를 알 수 있다 API 활용 관련글 바로가기 2021년도 이제 끝나가니, 2022년은 공휴일이 무슨 요일인지 한번 훑어보자 import datetime import requests import pandas as pd from bs4 import BeautifulSoup, element from PyQt5.QtCore import * from PyQt5.QtGui import * from PyQt5.QtWidgets import * def getHolidayDataFrame(year: int) -> pd.DataFrame: url = "http://apis.data.go.kr/B0..
공공데이터포털(data.go.kr)에서 한국예탁결제원이 제공하는 국내 주식시장과 관련된 다양한 정보들을 가져와보자 (KSD 증권정보포털인 SEIBro의 API, api.seibro.or.kr) 1. 공공데이터포털 API 활용신청 데이터 타이틀은 "한국예탁결제원_주식정보서비스", URL은 아래 링크 참고 https://www.data.go.kr/data/15001145/openapi.do 1.1 활용신청 활용신청 버튼을 클릭 1.2. 활용목적 기입 1.3. 상세기능정보 선택 특별한 사유가 아니라면 전부 선택해주자 (서버 과부하를 우려해서 그런가, 일일 트래픽이 기능별로 100회로 한정되어 있다 ㅠ) 1.4. 활용신청 저작자표시 동의 체크박스 클릭 수 활용신청 2. 인증키 확인 [마이페이지 - 오픈API -..
티스토리 유입 경로를 보면 간혹 다음과 같이 링크로 유입된 경우를 확인하게 된다 위 예시의 URL은 다음과 같다 https://yogyui.tistory.com/notify-Notice_Blog_New?aHR0cHM6Ly95b2d5dWkudGlzdG9yeS5jb20vZW50cnkvJUVBJUI0JTkxJUVBJUI1JTkwJUVDJTk1JTg0JUVDJTlEJUI0JUVEJThDJThDJUVEJTgxJUFDLSVFQyU5NyU5OCVFQiVBNiVBQyVFQiVCMiVBMCVFQyU5RCVCNCVFRCU4NCVCMC0lRUQlOTklODglRUQlODIlQjctJUVDJTk3JUIwJUVCJThGJTk5LTEtMg==;n4NRnC9NaQ4RKh+vRtSjrCgg81uCPHnovGhC9+SAIC8= 정작 ..
금융감독원의 전자공시시스템(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..