종목별 시가총액 데이터 수집하기 - 종목별 시가총액 데이터 수집하기(1)
이제부터 코스피 종목별 시가총액 데이터를 수집하는 함수를 만들어 봅시다. playwright 패키지와 크로미움 웹 브라우저를 사용하여 네이버페이 증권에 접속한 후 데이터를 수집할 것입니다.
네이버페이 증권
Npay 증권
국내 해외 증시 지수, 시장지표, 뉴스, 증권사 리서치 등 제공
finance.naver.com
웹 동작 자동화
본격적인 데이터 수집에 앞서, playweight 패키지를 사용하여 크로미움 웹 브라우저와 인스펙터를 실행하는 함수 run_playwright()를 만들어 봅시다.
비주얼 스튜디오 코드에서 새로운 파일을 생성하고, 파일명을 'step_1_2.py'로 지정합니다. 다음 코드를 입력한 뒤 실행 아이콘을 클릭하여 실행하면 크로미움 웹 브라우저를 통해 네이버페이 증권에 접속한 후, 인스펙터가 생성됩니다.
ch07/step_1_2.py
from playwright.sync_api import Browser, Page, Playwright, sync_playwright
def run_playwright(slow_mo: float = None) -> tuple[Playwright, Browser, Page]:
play: Playwright = sync_playwright().start() # Playwright 객체 생성
browser: Browser = play.chromium.launch( # Browser 객체 생성
args=["--start-maximized"], # 웹 브라우저 최대화
headless=False, # 헤드리스 모드 사용 여부
slow_mo=slow_mo # 자동화 처리 지연 시간
)
page: Page = browser.new_page(no_viewport=True) # Page 객체 생성
return play, browser, page
if __name__ =="__main__":
play, browser, page = run_playwright()
page.goto("https://finance.naver.com")
page.pause()
browser.close()
play.stop()
네이버페이 증권 페이지에서 [시가총액] 페이지로 이동하는 동작을 자동화하기 위해, 인스펙터에서 [Record] 버튼을 클릭하여 코드 녹화를 시작합니다. 다음 그림과 같이 [국내중시]-[시가총액] 메뉴를 클릭하세요.

인스펙터에서 [Record] 버튼을 다시 클릭하여 녹화를 중지합니다. 인스펙터 창에 클릭 동작에 대한 코드가 생성되었습니다.
| page.get_by_role("link", name="국내증시").click() page.get_by_role("link", name="시가총액", exact=True).click() |
HTML 태그 추출
이제 크로미움 웹 브라우저와 개발자 도구와 인스펙터를 사용하여 시가총액 데이터를 분석합니다.
01 크로미움 웹 브라우저에서 F12 또는 Ctrl + Shift + l 키를 눌러 개발자 도구를 엽니다. 개발자 도구 왼쪽 상단의 검사 모드 아이콘을 클릭한 후, 삼성전자 종목명을 클릭합니다.

02 개발자 도구 [Elements] 탭에서 키보드 또는 마우스를 이용하여 삼성전자 종목명을 둘러싼 태그 구조 살펴봅니다. 다음과 같이 코스피 종목별 시가총액 데이터를 나타내는 <table> 태그 구조를 확인할 수 있습니다. <caption>, <thead>, <tbody> 등 주어진 태그를 조합하여 원하는 데이터를 추출합니다.
<table summary="코스피 시세정보를 선택한 항목에 따라 정보를 제공합니다." cellpadding="0" cellspacing="0" class="type_2">
<caption>코스피</caption>
<thead>
<tr>
<th scope="col">N</th>
<th scope="col">종목명</th>
<th scope="col">현재가</th>
</tr>
</thead>
<tbody>
<tr>
<td class="no">1</td>
<td><a href="/item/main.naver?code=005930" class="tltle">삼성전자</a></td>
<td class="number">190,100</td>
</tr>
</tbody>
</table>
03 인스펙터의 [Locator] 탭을 클릭한 후, 다음 명령어를 입력하고 Enter 키를 눌러 시가총액 페이지에 <table> 태그가 몇 개가 있는지 확인합니다.
| locator("table") |
04 총 3개의 <table> 태그가 발견되어 음영 처리된 것을 알 수 있습니다.

05 이제 locator() 함수의 매개변수 has_text를 사용하여 검색 범위를 줄여 봅시다. 인스펙터의 [Locator] 탭에서 다음 명령어를 입력하고 Enter 키를 눌러 <table> 태그 중에서 '코스피' 문자열이 있는 태그를 추출합니다.
| locator("table", has_text="코스피") |
06 [1 of 3], [2 of 3] 등의 메시지 없이 시가총액 표만 추출되어 음영 처리됩니다.

07 이번에는 시가총액 표의 헤더외 보디 열을 추출해 보세요. 이 데이터는 <table>, <thead>, <tr> 순으로 작성되어 있으므로, [Locator] 탭에 다음과 같이 입력해서 추출할 수 있습니다.
| locator("table", has_text="코스피").locator("thead > tr > th") locator("table", has_text="코스피").locator("tbody > tr > td") |
'프로그래밍 언어 > Python' 카테고리의 다른 글
| 종목별 시가총액 데이터 수집하기 - 데이터 정제하기 (0) | 2026.02.27 |
|---|---|
| 종목별 시가총액 데이터 수집하기 - 종목별 시가총액 데이터 수집하기(2) (0) | 2026.02.24 |
| 종목별 시가총액 데이터 수집하기 - 파이썬 패키지 준비하기 (0) | 2026.02.18 |
| 워드 문서에 표와 이미지 삽입하기 (0) | 2026.02.14 |
| 보고서 작성하기 (0) | 2026.02.11 |