[파이썬 업무 자동화 3편] 웹 크롤링 기초: 네이버 금융에서 KOSPI 200 및 환율 데이터 가져오기

 지난 2편에서 파이썬과 VS Code 설치를 무사히 마쳤다면, 이제 가장 가슴 뛰는 첫 실전입니다. 매일 아침 HTS나 포털 금융 화면에 접속해 거시 경제 지표를 확인하고 엑셀에 옮겨 적던 일과를 파이썬 스크립트 단 몇 줄로 끝내는 마법을 경험할 차례입니다.

처음 코드를 실행하고 터미널 창에 내가 원하던 ‘숫자’가 정확히 텍스트로 나타났을 때의 쾌감은 코딩 학습의 가장 큰 원동력이 됩니다. 복잡한 이론 대신, 당장 실무에 써먹을 수 있는 코드를 통해 웹 크롤링(Web Crawling)의 뼈대를 잡아보겠습니다.

웹 크롤링의 핵심 원리: '요청'과 '추출'

우리가 웹 브라우저를 켜서 특정 금융 사이트에 접속하는 과정을 컴퓨터의 언어로 바꾸면 딱 두 단계로 요약됩니다.

  1. 접속을 요청한다 (Requests 라이브러리)

  2. 수많은 글자 중 원하는 숫자만 쏙 골라낸다 (BeautifulSoup 라이브러리)

지난 시간에 터미널에서 설치했던 라이브러리가 바로 이 역할을 수행합니다. Requests가 웹서버에 접속해 웹페이지 전체 코드(HTML)를 받아오는 역할이라면, BeautifulSoup은 그 복잡한 코드 뭉치에서 우리가 원하는 시장 지표만 정확히 찾아주는 돋보기입니다.

실전 코딩: KOSPI 200 지수 추출하기

VS Code를 열고 새 파일을 만들어 crawling_test.py라고 저장한 뒤, 아래 코드를 작성해 봅니다. 주석(우물정자 # 표시)은 코드의 실행을 돕는 설명서이므로 함께 읽어보시기 바랍니다.

Python
import requests
from bs4 import BeautifulSoup

# 1. 네이버 금융 국내증시 메인 페이지 주소
url = "https://finance.naver.com/sise/"

# 2. 웹페이지 데이터 요청하기
response = requests.get(url)

# 3. 가져온 텍스트 데이터를 파이썬이 분석하기 좋게 변환
soup = BeautifulSoup(response.text, 'html.parser')

# 4. KOSPI 지수 찾아오기 (HTML 요소의 고유 위치값 활용)
kospi_index = soup.select_one('#KOSPI_now').text

print(f"현재 KOSPI 지수: {kospi_index}")

코드를 작성한 후 VS Code 우측 상단의 재생 버튼(Run Python File)을 누르면, 화면 아래 터미널 창에 실시간 코스피 지수가 출력됩니다.

코딩 비전공자가 가장 많이 막히는 구간: 위치값(선택자) 찾기

위 코드에서 초보자들이 가장 낯설어하는 부분은 soup.select_one('#KOSPI_now')입니다. '#KOSPI_now'라는 기호는 웹페이지 내 데이터의 고유한 '주소'를 의미합니다.

웹페이지의 모든 텍스트는 각자의 태그(Tag)와 속성(id, class)을 가지고 있습니다. 크롬 브라우저에서 네이버 금융 사이트를 열고, 코스피 지수 숫자 위에 마우스를 올린 뒤 우클릭하여 '검사(Inspect)'를 누르면 화면 우측에 개발자 도구가 열립니다. 해당 숫자가 위치한 곳의 HTML 코드를 보면 id="KOSPI_now"라는 속성값이 부여된 것을 확인할 수 있습니다. 파이썬에게 "id가 KOSPI_now인 데이터의 텍스트(.text)만 가져와!"라고 명령을 내린 것입니다.

데이터 수집 시 반드시 지켜야 할 주의사항 (리스크 관리)

크롤링은 훌륭한 데이터 수집 도구지만, 무분별하게 사용할 경우 문제가 발생할 수 있습니다.

  • 서버 과부하 주의: 반복문을 사용하여 1초에 수십, 수백 번씩 데이터를 요청하면 해당 웹사이트 서버에서 디도스(DDoS) 공격이나 비정상적 접근으로 간주하여 사용자의 IP를 차단해 버립니다. 반복 수집이 필요할 때는 반드시 time.sleep() 함수를 활용해 2~3초 이상의 대기 시간을 주어야 합니다.

  • 웹 구조 변경 대응: 포털 사이트가 화면 디자인을 개편하면, 우리가 찾던 데이터의 주소(id나 class)도 함께 변경됩니다. 어제까지 잘 작동하던 코드가 갑자기 에러(NoneType 에러 등)를 발생시킨다면, 당황하지 말고 브라우저의 '검사' 기능을 다시 열어 변경된 주소값을 찾아 코드에 반영하면 됩니다.

  • 핵심 요약

    • 웹 크롤링은 Requests로 웹페이지의 전체 데이터를 가져오고, BeautifulSoup으로 필요한 숫자만 추출하는 일련의 과정이다.

    • 크롬 개발자 도구(F12)의 '검사' 기능을 활용해 추출할 데이터의 고유한 HTML 주소를 찾아내는 것이 데이터 수집의 핵심이다.

    • 잦은 크롤링 요청은 IP 차단을 유발할 수 있으므로 서버에 무리를 주지 않는 선에서 딜레이를 설정해야 하며, 웹사이트 개편 시 코드 수정이 필요할 수 있다.

  • 다음 편 예고 4편에서는 '크롤링의 핵심 도구: BeautifulSoup과 Requests 완벽 이해하기'를 주제로, 여러 종목의 현재가와 거래량을 한 번에 긁어오는 반복 크롤링 기법과 불필요한 공백을 깔끔하게 제거하는 데이터 전처리 노하우를 다룹니다.

  • 궁금한 점이 있으신가요? 오늘 코스피 지수 크롤링에 성공하셨다면, 현재 업무나 투자 분석을 위해 파이썬으로 당장 수집해보고 싶은 다른 웹사이트의 데이터는 무엇인지 댓글로 남겨주세요.

댓글 쓰기

0 댓글

이 블로그 검색

신고하기

프로필

이미지alt태그 입력