1. 학습 목표
본 강의의 목표는 파이썬(Python)을 활용하여 웹 사이트의 데이터를 자동으로 수집(Scraping)하고, 수집된 데이터를 비즈니스 인사이트에 맞게 가공한 뒤, 최종적으로 실무에서 즉시 활용 가능한 형태의 엑셀(Excel) 보고서로 자동 생성하는 전체 파이프라인을 구축하는 것입니다. 수동으로 반복하던 복사-붙여넣기 업무를 단 몇 초 만에 끝내는 매크로 프로그램을 직접 제작해 보겠습니다.
2. 사전 준비 사항
실습을 시작하기 전, 2026년 기준 표준화된 실무 환경을 다음과 같이 세팅합니다. 모든 도구는 최신 안정화 버전을 기준으로 합니다.
- 운영체제(OS): Windows 11 이상 또는 macOS Sequoia 이상
- 개발 환경(IDE): Visual Studio Code (VS Code) 최신 버전
- 파이썬 버전: Python 3.12.x 이상 (환경 변수 PATH 설정 필수)
- 필수 라이브러리 설치: 터미널(Terminal) 또는 CMD에서 아래 명령어를 입력하여 설치합니다.
pip install requests beautifulsoup4 pandas openpyxl
각 라이브러리의 역할은 다음과 같습니다:
requests: 웹 서버에 데이터를 요청하고 응답을 받습니다.beautifulsoup4: HTML 문서에서 원하는 데이터를 추출합니다.pandas: 데이터를 표(Table) 형태로 관리하고 분석합니다.openpyxl: 엑셀 파일을 생성하고 스타일을 적용합니다.
3. 1단계: 웹 데이터 수집 (Web Scraping)
가장 먼저 할 일은 웹페이지의 HTML 구조를 분석하여 우리가 원하는 정보를 가져오는 것입니다. 여기서는 뉴스 제목과 링크를 수집하는 예제를 다룹니다. 웹사이트의 차단 방지를 위해 ‘User-Agent’ 헤더를 설정하는 것이 핵심입니다.
스크래핑 코드 구현
import requests
from bs4 import BeautifulSoup
def get_web_data():
url = "https://news.naver.com/main/main.naver?mode=LSD&mid=shm&sid1=105"
headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36"}
response = requests.get(url, headers=headers)
if response.status_code != 200:
print("접근 실패!")
return []
soup = BeautifulSoup(response.text, 'html.parser')
# 뉴스 제목과 링크 추출 (사이트 구조에 따라 셀렉터는 변경될 수 있음)
articles = soup.select(".sa_text_title")
data_list = []
for article in articles[:20]: # 상위 20개 추출
title = article.get_text(strip=True)
link = article.get('href')
data_list.append({"제목": title, "링크": link})
return data_list
news_data = get_web_data()
print(f"{len(news_data)}개의 데이터를 수집했습니다.")
위 코드에서 select 함수는 CSS 선택자를 활용하여 HTML 내의 특정 요소를 지정합니다. 실무에서는 브라우저의 개발자 도구(F12)를 활용하여 정확한 클래스 명칭을 파악하는 것이 중요합니다.
4. 2단계: 데이터 가공 및 정제 (Data Processing)
수집된 리스트 형태의 데이터를 분석하기 쉬운 데이터프레임(DataFrame) 구조로 변환해야 합니다. Pandas 라이브러리는 대용량 데이터를 다루는 데 최적화되어 있습니다.
Pandas를 이용한 데이터 정제
import pandas as pd
def process_data(data):
# 리스트 데이터를 데이터프레임으로 변환
df = pd.DataFrame(data)
# 중복 데이터 제거
df.drop_duplicates(inplace=True)
# 특정 키워드가 포함된 데이터 필터링 (예: 'AI' 관련 기사만 추출)
df['중요도'] = df['제목'].apply(lambda x: '높음' if 'AI' in x or '반도체' in x else '보통')
# 수집 일자 추가
from datetime import datetime
df['수집일시'] = datetime.now().strftime('%Y-%m-%d %H:%M:%S')
return df
cleaned_df = process_data(news_data)
print(cleaned_df.head())
데이터 정제 단계에서는 결측치(NaN) 처리, 날짜 형식 변환, 파생 변수 생성 등을 수행합니다. 이는 단순한 데이터 수집을 넘어 비즈니스 가치를 창출하는 핵심 과정입니다.
5. 3단계: 엑셀 보고서 자동 생성 (Excel Automation)
이제 정제된 데이터를 엑셀 파일로 저장합니다. 단순히 저장하는 것에 그치지 않고, openpyxl을 활용하여 셀의 너비를 조정하고 제목 행에 색상을 입히는 등 가독성을 높이는 작업까지 자동화해 보겠습니다.
엑셀 저장 및 스타일링 코드
def save_to_excel(df, filename="IT_트렌드_보고서.xlsx"):
# 엑셀 파일로 저장
with pd.ExcelWriter(filename, engine='openpyxl') as writer:
df.to_excel(writer, index=False, sheet_name='최신뉴스')
# 스타일 적용을 위한 워크시트 접근
workbook = writer.book
worksheet = writer.sheets['최신뉴스']
# 컬럼 너비 조정
for col in worksheet.columns:
max_length = 0
column = col[0].column_letter
for cell in col:
try:
if len(str(cell.value)) > max_length:
max_length = len(str(cell.value))
except: pass
adjusted_width = (max_length + 2)
worksheet.column_dimensions[column].width = adjusted_width
print(f"'{filename}' 파일이 성공적으로 생성되었습니다.")
save_to_excel(cleaned_df)
ExcelWriter를 사용하면 여러 개의 시트를 하나의 엑셀 파일에 생성할 수 있으며, 기존 파일에 데이터를 추가하는 작업도 가능합니다. 실무에서는 보고서 양식이 정해져 있는 경우가 많으므로 기존 템플릿을 불러와 데이터만 채우는 방식으로도 응용할 수 있습니다.
6. 결과 확인 및 실무 활용 팁
모든 단계가 완료되었습니다. 생성된 IT_트렌드_보고서.xlsx 파일을 열어보면, 웹에서 수집한 데이터가 깔끔하게 정리되어 있을 것입니다. 이 매크로를 더욱 강력하게 만드는 방법은 다음과 같습니다.
추가 자동화 팁
- 스케줄러 등록: Windows의 ‘작업 스케줄러’ 또는 Linux의 ‘Crontab’을 활용하면 매일 아침 정해진 시간에 자동으로 보고서를 생성하여 이메일로 발송할 수 있습니다.
- 예외 처리: 네트워크 오류나 사이트 구조 변경에 대비하여
try-except구문을 보강하면 프로그램의 안정성이 높아집니다. - 다양한 데이터 소스: 뉴스뿐만 아니라 주식 시세, 경쟁사 상품 가격, 사내 게시판 데이터 등 다양한 소스에 적용해 보세요.
이제 여러분은 파이썬을 활용한 업무 자동화의 기초를 완벽하게 마스터했습니다. 반복되는 단순 업무는 파이썬에게 맡기고, 여러분은 더 창의적이고 가치 있는 일에 집중하시기 바랍니다.