지난 2편에서 파이썬과 VS Code 설치를 무사히 마쳤다면, 이제 가장 가슴 뛰는 첫 실전입니다. 매일 아침 HTS나 포털 금융 화면에 접속해 거시 경제 지표를 확인하고 엑셀에 옮겨 적던 일과를 파이썬 스크립트 단 몇 줄로 끝내는 마법을 경험할 차례입니다.
처음 코드를 실행하고 터미널 창에 내가 원하던 ‘숫자’가 정확히 텍스트로 나타났을 때의 쾌감은 코딩 학습의 가장 큰 원동력이 됩니다. 복잡한 이론 대신, 당장 실무에 써먹을 수 있는 코드를 통해 웹 크롤링(Web Crawling)의 뼈대를 잡아보겠습니다.
웹 크롤링의 핵심 원리: '요청'과 '추출'
우리가 웹 브라우저를 켜서 특정 금융 사이트에 접속하는 과정을 컴퓨터의 언어로 바꾸면 딱 두 단계로 요약됩니다.
접속을 요청한다 (Requests 라이브러리)
수많은 글자 중 원하는 숫자만 쏙 골라낸다 (BeautifulSoup 라이브러리)
지난 시간에 터미널에서 설치했던 라이브러리가 바로 이 역할을 수행합니다. Requests가 웹서버에 접속해 웹페이지 전체 코드(HTML)를 받아오는 역할이라면, BeautifulSoup은 그 복잡한 코드 뭉치에서 우리가 원하는 시장 지표만 정확히 찾아주는 돋보기입니다.
실전 코딩: KOSPI 200 지수 추출하기
VS Code를 열고 새 파일을 만들어 crawling_test.py라고 저장한 뒤, 아래 코드를 작성해 봅니다. 주석(우물정자 # 표시)은 코드의 실행을 돕는 설명서이므로 함께 읽어보시기 바랍니다.
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 댓글