RPA/Python

[Pandas] 기업 시가총액 순위, 엑셀 저장

꼰대 2022. 2. 2. 15:20

스크래핑 하려는 페이지가 테이블로 이루어져 있고 해당 데이터가 필요한 경우 BeautifulSoup보다는 Pandas를 이용하는 편이 좀 더 쉽게 보입니다.

 

참고

https://ggondae.tistory.com/52?category=475184 

 

[BeautifulSoup] 기업 시가총액 순위, 엑셀/CSV로 저장

네이버 금융 페이지 중 시가총액 순위 페이지에서 데이터를 가져와 엑셀과 CSV로 저장 Power Automate Desktop 버전은 아래 링크에서 확인할 수 있습니다. https://ggondae.tistory.com/99 [Power Automate Deskt..

ggondae.tistory.com

 

 

Pandas를 이용해 간단하게 구현해보겠습니다.

import pandas as pd

# 네이버 시가 총액 URL
# 맨 마지막 page 변수 부분이 페이징 값
NAVER_URL = 'https://finance.naver.com/sise/sise_market_sum.nhn?&page='
temp_list = []

for cnt in range(1, 4):
    # 페이지 1번부터 HTML 읽어오기 (3페이지까지 총 150위)
    # header 옵션은 컬럼으로 사용할 행을 지정하는 것으로 여기서는 의미 없음
    # encoding 옵션이 없으면 한글 깨짐
    df = pd.read_html(NAVER_URL+str(cnt), header=0, encoding='euc-kr')

    # 읽어 온 페이지 중 두번째 테이블(df[1])이 데이터 부분 (첫번째 테이블(df[0])은 항목 옵션 체크하는 부분)
    # NaN 부분 삭제를 위해 행 방향으로 N컬럼이 NaN인 것을 삭제 후 다른 변수에 복사
    # axis=0은 행, 1은 열
    temp_df = df[1].dropna(axis=0, subset=['N']).copy()

    # float형인 N컬럼을 int형으로 변환
    temp_df['N'] = temp_df['N'].astype(int)

    # N 컬럼의 이름을 순위로 변경
    temp_df.rename(columns={'N':'순위'}, inplace=True)

    # 맨 마지막 컬럼인 토론실은 필요 없어 삭제
    temp_df.drop(['토론실'], axis=1, inplace=True)

    # DataFrame를 모두 연결 위해 리스트에 저장
    temp_list.append(temp_df)

# 리스트 내 DataFrame을 연결하여 DataFrame으로 저장
result_df = pd.concat(temp_list)

# 엑셀 저장
# 현재 저장된 DataFrame의 index는 NaN을 삭제하면서 의미가 없어 삭제
result_df.to_excel('sise.xlsx', index=False)

 

DataFrame을 이용해서 몇 줄 안되는 코드로 엑셀 저장까지 완료하였습니다.

반응형