네이버 금융에서 기업의 실적 데이터를 크롤링하기.
주요재무정보에 해당하는 값들 중 가장 최근 년도의 데이터를 불러올 것이다.
우선 주요재무정보 지표 리스트를 먼저 뽑아보았는데..
idx = []
url = 'https://finance.naver.com/item/main.naver?code=066570'
res = requests.get(url)
soup = BeautifulSoup(res.text,'html.parser')
section = soup.find_all('tbody')[2]
for n in range(8,23+1):
idx.append(section.find('th', attrs={'class':f'h_th2 th_cop_anal{n}'}).get_text())
idx
h_th2 th_cop_anal{num} 형태로 받아왔는데 넘버링이 8~23까지 되어 있다.
그런데 PER(배) 와 주당배당금(원)의 순서가 실제 보여지는 화면의 순서와 다르게 되어있는 것을 확인할 수 있다.
그래서 재무정보 지표 리스트를 다시 화면의 순서대로 정렬하여 저장해주었다.
idx = ['매출액', '영업이익', '당기순이익',
'영업이익률', '순이익률', 'ROE(지배주주)',
'부채비율', '당좌비율', '유보율',
'EPS(원)','PER(배)', 'BPS(원)','PBR(배)',
'주당배당금(원)','시가배당률(%)','배당성향(%)']
기업 실적 데이터 받아오는 함수
def get_value(tick): # 종목 티커를 입력
value = []
url = 'https://finance.naver.com/item/main.naver?code='+tick
res = requests.get(url)
soup = BeautifulSoup(res.text,'html.parser')
section = soup.find_all('tbody')[2]
for i in range(15+1):
temp = section.find_all('tr')[i]
try :
if temp.find('td',attrs={" t_line cell_strong"}) == None: # 22년 발표 안된 경우 21년도 데이터 가져옴
part = temp.find_all('td',attrs={""})[2]
value.append(part.get_text().strip()+'(21)')
else:
part = temp.find('td',attrs={" t_line cell_strong"})
value.append(part.get_text().strip())
except: # 값이 엾을 경우 공백처리
value.append('-')
time.sleep(1)
df = pd.DataFrame({'지표':idx,'value':value})
return df
예_LG전자 티커 입력하여 데이터 받아오기
LG전자 = get_value('066570')
'🏷️Workplace > ANALYSIS' 카테고리의 다른 글
[RainflowCounting] extract_cycles( ) (0) | 2023.10.17 |
---|---|
[RainflowCounting] reversals( ) (0) | 2023.10.17 |
[크롤링&SQL] 할리스 매장 정보 크롤링 후 DB 저장 (0) | 2023.01.24 |
[크롤링] 할리스 커피 매장 정보 크롤링 (2) | 2023.01.24 |
[ETF]파이썬 시각화 (0) | 2022.11.17 |