지난 12편에서 작업 스케줄러를 통해 엑셀 자동화의 완벽한 무인 시스템을 구축하셨다면, 이제는 파이썬 웹 크롤링 기술을 활용하여 내 컴퓨터 안방에 있는 엑셀 파일을 다루는 것을 넘어 집 밖(인터넷)에 있는 방대한 데이터를 자동으로 가져올 차례입니다.
사업을 운영하거나 실무를 담당하다 보면 매일 아침 특정 웹사이트에 접속해 새로운 공지사항, 경쟁사 제품 가격, 조달청(나라장터) 입찰 공고 등을 확인해야 하는 일과가 있습니다. 인터넷 창을 열고, 즐겨찾기를 누르고, 스크롤을 내리며 필요한 내용을 복사해서 엑셀에 붙여넣는 이 지루한 반복 작업은 직장인의 소중한 오전 시간을 심각하게 갉아먹습니다.
오늘 13편에서는 파이썬을 이용해 인터넷상의 데이터를 자동으로 긁어오는 파이썬 웹 크롤링(Web Crawling)의 기초를 다룹니다. 내 대신 웹사이트를 돌아다니며 내가 원하는 정보만 쏙쏙 뽑아 엑셀에 담아오는 ‘디지털 정찰병’을 파견하는 신세계를 경험해 보십시오.

1. 웹 크롤링의 핵심 원리와 2가지 필수 무기
웹 크롤링은 파이썬이 사람 대신 인터넷 브라우저에 접속하고, 웹페이지를 구성하는 복잡한 코드(HTML) 속에서 우리가 원하는 텍스트나 숫자만 정확하게 찾아내는 기술입니다. 이를 위해 파이썬에서 가장 널리 쓰이는 두 가지 강력한 외부 라이브러리가 필요합니다.
- requests 라이브러리: 파이썬이 웹사이트에 접속하여 “이 페이지의 내용을 내게 다 보여줘!”라고 문을 두드리고 요청(Request)하는 역할을 합니다.
- BeautifulSoup 라이브러리: requests가 통째로 가져온 복잡하고 외계어 같은 웹페이지 코드 더미 속에서, 내가 원하는 데이터만 예쁘게(Beautiful) 발라내고 정리하는 핀셋 역할을 합니다.
VS Code를 켜고 화면 하단의 터미널 창을 연 뒤, pip install requests bs4 명령어를 입력하여 이 두 가지 무기를 먼저 컴퓨터에 설치해 줍니다.
2. 실전 웹 크롤링 1단계: 웹사이트 접속하고 뼈대 가져오기
웹사이트에서 데이터를 긁어오려면, 먼저 파이썬이 그 사이트에 정상적으로 접속할 수 있어야 합니다. 아주 간단한 코드로 뼈대 데이터를 가져오는 첫 접속을 시도해 보겠습니다.
Python
import requests
from bs4 import BeautifulSoup
# 1. 접속할 웹사이트 주소 (예시: 공지사항 게시판)
url = "https://example.com"
# 2. 웹사이트에 접속 요청 및 데이터 받아오기
response = requests.get(url)
# 3. 접속이 성공했는지 상태 확인 (200이 나오면 정상 접속)
print("응답 코드:", response.status_code)
위 코드를 작성하고 실행했을 때 터미널 창에 응답 코드: 200이라고 출력된다면, 파이썬 정찰병이 해당 웹사이트의 보안을 통과하고 성공적으로 문을 열었다는 뜻입니다. (만약 404나 500 같은 숫자가 뜬다면 웹사이트 주소가 잘못되었거나, 해당 사이트에서 봇(Bot)의 접근을 차단한 것입니다.)
3. 실전 웹 크롤링 2단계: 원하는 텍스트만 쏙쏙 뽑아내기
이제 문을 열고 들어갔으니, 원하는 정보(예: 게시글 제목)만 찾아서 들고 와야 합니다. 모든 웹페이지는 <div>, <a>, <span> 같은 수많은 HTML ‘서랍(태그)’들로 이루어져 있습니다. 우리가 할 일은 크롬 브라우저에서 F12 키(개발자 도구)를 눌러, 내가 긁어오고 싶은 글씨가 어떤 모양의 서랍에 들어있는지 확인하는 것입니다.
만약 게시판의 제목들이 <a class="title"> 이라는 서랍에 들어있다는 것을 확인했다면, 코드는 아래와 같이 작성됩니다.
Python
# 4. 가져온 웹페이지 코드를 파이썬이 분석하기 쉽게 변환
soup = BeautifulSoup(response.text, 'html.parser')
# 5. 'title'이라는 클래스 이름을 가진 'a' 태그 서랍을 통째로 찾기
titles = soup.find_all('a', class_='title')
# 6. 찾은 서랍들을 하나씩 열어서 안의 글자(text)만 깔끔하게 출력하기
for t in titles:
print(t.text.strip())
이 코드를 실행하는 순간, 평소라면 웹페이지에 접속해서 스크롤을 내리며 눈으로 하나하나 확인해야 했던 수십 개의 게시글 제목들이 터미널 창에 0.1초 만에 좌르륵 쏟아지게 됩니다.

4. 긁어온 데이터를 엑셀 파일로 자동 저장하기
터미널 창에 데이터를 띄워보는 것에서 만족하면 진정한 실무 자동화가 아닙니다. 우리가 8~9편에서 지겹도록 다루었던 데이터 분석의 꽃, pandas(판다스) 라이브러리를 결합하면 방금 긁어온 제목들을 엑셀 파일로 아주 깔끔하게 저장할 수 있습니다.
Python
import pandas as pd
# 제목을 담을 빈 바구니(리스트) 만들기
title_list = []
for t in titles:
title_list.append(t.text.strip()) # 바구니에 제목을 하나씩 담기
# pandas를 이용해 표 형태로 만들고 엑셀로 저장하기
df = pd.DataFrame({'오늘의 공고 제목': title_list})
df.to_excel(r'C:\Users\Admin\Desktop\오늘의_공고.xlsx', index=False)
print("엑셀 저장이 완료되었습니다!")
이렇게 코드를 마무리하고 실행하면, 매일 아침 내가 수집해야 하는 경쟁사 동향이나 최신 공고 리스트가 내 바탕화면에 보기 좋은 엑셀 파일로 뚝딱 생성됩니다. 직전 포스팅에서 배운 ‘작업 스케줄러’와 결합한다면, 매일 아침 출근길에 컴퓨터가 스스로 크롤링을 돌리고 엑셀을 만들어 놓는 완벽한 파이프라인이 구축되는 것입니다.
5. 글을 마치며: 다음 단계는 ‘동적 웹페이지’ 정복하기
오늘 다룬 파이썬 웹 크롤링의 기초적인 형태(requests와 BeautifulSoup 조합)는 실행 속도가 압도적으로 빠르고 코드가 가볍다는 장점이 있습니다.
하지만 한계도 명확합니다. 회사 내부 그룹웨어나 조달청 나라장터처럼 로그인이 반드시 필요하거나, 마우스로 특정 버튼을 클릭해야만 숨겨진 표가 나타나는 복잡한 사이트에서는 데이터를 가져오지 못합니다.
그래서 다음 14편에서는 파이썬이 브라우저를 직접 띄워서 사람처럼 마우스를 움직이고 키보드를 치며 로그인까지 수행하는 궁극의 웹 크롤링 무기, ‘셀레늄(Selenium)’에 대해 알아보겠습니다. 14편까지 마스터하시면 인터넷상에 존재하는 그 어떤 데이터도 대표님의 엑셀로 자유자재로 가져올 수 있습니다!
