[웹크롤링] 네이버증권에서 재무제표 가져오기

반응형
    반응형

    네이버 증권에서 재무제표를 가져오는 방법입니다. 

     

    삼성전자를 예로 하겠습니다.

    네이버증권에서 삼성전자 검색해서 들어가면 사이트 이름이 다음과 같이 나옵니다.

     

     

    여기서 '005930' 이 종목코드입니다.

    이 코드에 따라서 웹페이지가 바뀌는 걸 알 수 있습니다.

    이를 이용해 해당 페이지에서 기업실적분석을 가져오려고 합니다.

     

     

    크롤링

    다음과 같이 입력해 크롤링을 합니다.

    단순하게 URL에서 html 가져와서 표는 판다스로 가져올 수 있으니 판다스로 넘겨서 표로 나오게 합니다.

     

    import pandas as pd
    import requests
    code = '005930'
    URL = f"https://finance.naver.com/item/main.nhn?code={code}"
    r = requests.get(URL)
    df = pd.read_html(r.text)[3]

     

     

     

    코드 따라서 바뀌니 코드를 입력한대로 URL이 바뀌도록 했습니다.

     

    최근연간실적, 최근분기실적 나누기

    실제 데이터로써 사용하기 위해서는 정리가 좀 필요해 보입니다. 

    먼저 매출액, 영업이익 등등을 인덱스로 만듭시다.

    그리고 나서 최근연간실적, 최근분기실적 두개로 나눕니다.

    컬럼을 보면 다음과 같이 나옵니다.

     

    df.columns

     

    제일 위에 있는 판다스에 나와있는 표를 보면 알겠지만 ('주요재무정보','주요재무정보',주요재무정보') 가 매출액,영업이익 등등을 가지고 있습니다.

    첫번째 컬럼을 인덱스로 설정합니다.

    그리고 ('주요재무정보','주요재무정보',주요재무정보')'주요재무정보' 로 바꿉니다.

     

    df.set_index(df.columns[0],inplace=True)
    df.index.rename('주요재무정보', inplace=True)

     

     

    'IFRS연결' 을 버려야 하니 droplevel을 씁니다. 지금 컬럼은 (0,1,2) 형식의 튜플로 되어있으니 

    2번째를 droplevel을 하면 됩니다.

     

    df.columns = df.columns.droplevel(2)
    df.columns

     

    이제 '최근 연간 실적''최근 분기 실적' 으로 나눠봅시다.

    멀티인덱서이므로 loc와 xs로 나눠줄 수 있는데 현재 경우는 xs으로 하면 됩니다.

     

    annual_date = pd.DataFrame(df).xs('최근 연간 실적',axis=1)
    quater_date = pd.DataFrame(df).xs('최근 분기 실적',axis=1)
    annual_date

     

     

     

    전체 코드

    코드 정리하고 마무리 하겠습니다.

     

    import pandas as pd
    import requests
    code = '005930'
    URL = f"https://finance.naver.com/item/main.nhn?code={code}"
    r = requests.get(URL)
    df = pd.read_html(r.text)[3]
    df.set_index(df.columns[0],inplace=True)
    df.index.rename('주요재무정보', inplace=True)
    df.columns = df.columns.droplevel(2)
    annual_date = pd.DataFrame(df).xs('최근 연간 실적',axis=1)
    quater_date = pd.DataFrame(df).xs('최근 분기 실적',axis=1)

     

     

    관련 포스팅

    [Python/Pandas] - [Pandas] 멀티인덱스 다루기(loc,xs)

     

    댓글

    Designed by JB FACTORY

    ....