2021/01/03 - [**kwargs/파이썬] - 주식 재무제표 크롤링 - intro
주식 재무제표 크롤링 - intro
2020년 국내증시는 코로나로 시작해 개인투자자(동학개미)로 끝났다고 한다. 그만큼 핫한 키워드 '주식' 관련된 수많은 기사와 컨텐츠가 쏟아져 나오는 지금. 나도 그 동학개미중 한명으로 생애
kpalace.tistory.com
첫번째로 종목코드를 입력하면,
재무상태표, 손익계산서, 현금흐름표를 끌어오는 작업.
import requests
import pandas as pd
from bs4 import BeautifulSoup
from html_table_parser import parser_functions as parser
def get_chart(n, table):
p = parser.make2d(table[n])
#parser function 중 make2d 값들 텍스트 배열로 가져오기 from html_table_parser
all_chart = pd.DataFrame(p[1:],columns=p[0]).set_index('IFRS(연결)')
all_chart = all_chart.groupby(level=0).first()
# 금융원가에도 이자비용, 기타비용에도 이자비용으로 중복된 것중 먼저오는걸로 구룹화
return all_chart
def integer(df, columns):
for i in columns:
df[i] = df[i].str.replace(',', '')
#숫자에 콤마 없애기 replace 함수
df[i] = df[i].apply(pd.to_numeric, errors = 'coerce').fillna(0)
#문자열을 숫자로 변경하되 옵션으로 에러(비어있으면) NaN -> 0으로 fillna함수
return df
#종목코드에 따른 url page 끌어오기 (url은 코드에서 제외함)
code = '종목코드'
item_url = f"{code}"
item_page = requests.get(item_url)
item_soup = BeautifulSoup(item_page.text,'html.parser')
#종목이름 가져오기
item_name = item_soup.find("h1",{'id':'giName'}).get_text()
#아름다운찌개로 테이블 형식만 뽑기
table = item_soup.find_all('table')
#불필요한 우측 2행 지우고 포괄손익계산서 값들만 가져오기
all_ps = get_chart(0,table).iloc[:,:-2]
# 0 - 연간 포괄손익계산서 | 1 - 분기 포괄손익계산서
# 2 - 연간 재무상태표, | 3 - 분기 재무상태표
# 4 - 연간 현금흐름표, | 5 - 분기 현금흐름표
#년도에 해당하는 columns값 저장
ps_columns = all_ps.columns.values
#콤마 없애고 숫자로 만들기
all_ps = integer(all_ps, ps_columns)
#all_ps에는 연간 포괄손익계산서 값들이 들어간다.
이렇게 하면 0~5까지 필요한 재무제표를 가지고 올 수 있다.
이 과정에서 처음 알게 된 것들 정리!!
Pandas
pandas.pydata.org/docs/reference/index.html
API reference — pandas 1.2.0 documentation
This page gives an overview of all public pandas objects, functions and methods. All classes and functions exposed in pandas.* namespace are public. Some subpackages are public which include pandas.errors, pandas.plotting, and pandas.testing. Public functi
pandas.pydata.org
"컴퓨터 프로그래밍에서 pandas는 데이터 조작 및 분석을 위해 Python 프로그래밍 언어로 작성된 소프트웨어 라이브러리입니다." 라고 한다.
데이터를 만드는데 필수 라이브러리이다.
간단하게 Series는 1차 함수로 index 지표를,
DataFrame은 2차 함수로 index와 columns를 가진다.
여기서 굉장히 헷갈렸던게 있다.
df['something'] vs df[['something']]
이것을 잘 설명하는 갓택오플
stackoverflow.com/questions/33813223/whats-the-difference-between-and-in-pandas
What's the difference between [] and [[]] in pandas?
I'm confused about the results for indexing columns in pandas. Both db['varname'] and db[['varname']] give me the column value of 'varname'. However it looks like there is some subtle differe...
stackoverflow.com
df['something'] 은 시리즈를
df[['something']]은 데이터프레임을
그리고 2차원 배열이라 생각할 때, df['column']['index'] 순서라는 점.
추가적으로 몇가지 판다스 매소드
loc[]
iloc[]
set_index()
groupby()
apply()
fillna()
pd.to_numeric
다시 공홈에서 찾아서 복습하자 아직 헷갈린다.
HTML TABLE PARSER
pypi.org/project/html-table-parser-python3/
html-table-parser-python3
A small and simple HTML table parser not requiring any external dependency.
pypi.org
parser.make2d()
값들을 배열형태로 가져오기
좋다 이렇게 각각의 재무재표를 가져왔으니,
다음은 끌어온 재무제표로 필요한 값 만들고 우량기업 조건 걸기!!
'**kwargs > 파이썬' 카테고리의 다른 글
[파이썬] 숏폼으로 기존 영상에 한글 올리기 매크로 (PIL, moviepy) (0) | 2022.07.21 |
---|---|
주식 재무제표 크롤링 - intro (0) | 2021.01.03 |
파이썬 웹 스크랩퍼 만들기 (0) | 2020.12.29 |
파이썬 독학 시작 (0) | 2020.12.29 |