프로그래밍 언어/Python

페이지 이동 자동화하기 - 전체 데이터 수집하기

· 코딩마이데이

비주얼 스튜디오 코드에서 새로운 파일을 만들고, 파일명을 'step_2_2.py'로 저장합니다. 다음 코드를 입력한 뒤 실행 버튼을 클릭하여 입력한 코드를 실행합니다. 첫 페이지부터 맨 뒤 페이지까지 이동하면서 전체 시가총액 데이터를 수집합니다.

 

ch07/step_2_2.py

from pathlib import Path
import pandas as pd
from playwright.sync_api import Page
from step_1_1 import OUT_DIR # 이전에 작성한 모듈을 불러옵니다.
from step_1_2 import run_playwright
from step_1_3 import goto_market_cap, parse_table_kospi
from step_1_4 import table_to_data_frame
from step_2_1 import fetch_total_page

OUT_2_2 = OUT_DIR / "{Path(__file__).stem}.csv"

def goto_page(page: Page, to: int): # 12
    page.goto(f"https://finance.naver.com/sise/sise_market_sum.naver?&page={to}")

def fetch_market_cap(page: Page) -> pd.DataFrame: # 15
    total_page = fetch_total_page(page) # 총 페이지 개수 추출 # 16
    result = []
    for to in range(1, total_page + 1): # 1부터 total_page까지 반복 # 18
        goto_page(page, to) # 페이지 이동 # 19
        header, body = parse_table_kospi(page) # 코스피 시가총액 표 추출 # 20
        df_raw = table_to_data_frame(header, body) # 데이터 정제 및 DataFrame 객체 생성 # 21
        result.append(df_raw) # DataFrame 객체를 리스트에 임시 저장 # 22
    return pd.concat(result) # DataFrame 객체 결합  # 23

if __name__ == "__main__":
    play, browser, page = run_playwright(slow_mo=1000)
    goto_market_cap(page) # 시가총액 페이지로 이동
    df_result = fetch_market_cap(page) # 코스피 시가총액 표 추출 # 28
    df_result.to_csv(OUT_2_2, index=False) # CSV 파일로 저장
    browser.close()
    play.stop()

 

12 페이지 이동 함수 goto_page()를 정의합니다. 매개변수 to에 이동할 페이지를 전달하면 해당 페이지로 이동합니다.

15 페이지를 이동하면서 해당 페이지의 코스피 시가총액 표를 추출하고, 이를 정제한 후 DataFrame 객체로 반환하는 함수 fetch_market_cap()를 정의합니다.

16 함수 fetch_total_page()를 사용하여 총 페이지 개수를 추출하고, total_page에 저장합니다.

18 1부터 total_page까지 페이지를 이동하면서 이후 코드를 반복 처리합니다.

19 함수 goto_page()를 사용하여 페이지를 이동합니다.

20 함수 parse_table_kospi()를 사용하여 현재 페이지의 코스피 시가총액 표 데이터를 추출합니다.

21 함수 table_to_dataframe()를 사용하여 추출해 데이터를 정제하고 DataFrame 객체를 생성합니다.

22 함수 append()를 사용하여 DataFrame 객체를 result 리스트에 임시로 저장합니다.

23 pandas 패키지의 함수 concat()를 사용하여 result 리스트에 저장된 DataFrame 객체를 하나로 결합합니다.

28 함수 fetch_market_cap()를 사용하여 코스피 시가총액  표를 추출합니다.

 

코드를 실행하면 'output' 폴더에 'step_2_2.csv' 파일을 생성됩니다. 이 파일을  비주얼 스튜디오 코드에서 열면 다음과 같이 CSV 파일을 볼 수 있습니다.

N,종목명,현재가,전일비,등락률,액면가,시가총액,상장주식수,외국인비율,거래량,PER,ROE
1,삼성전자,"197,200","상승 4,200",+2.18%,100,"11,673,526","5,919,638",51.00,"11,168,977",30.04,10.85
2,SK하이닉스,"996,000","상승 45,000",+4.73%,"5,000","7,098,516","712,702",54.60,"1,860,388",20.31,31.06
3,삼성전자우,"138,100","상승 2,000",+1.47%,100,"1,126,861","815,975",77.33,"1,893,310",21.04,N/A
4,현대차,"518,000","하락 5,000",-0.96%,"5,000","1,060,645","204,758",30.40,"687,854",13.02,12.43
5,LG에너지솔루션,"412,000","상승 16,000",+4.04%,500,"964,080","234,000",4.68,"366,902",-110.10,-4.93
(이하 생략)