복사 붙여넣기 지옥 탈출! 파이썬 웹 크롤링으로 인터넷 데이터 엑셀에 자동 수집하기

  매일 아침 출근하자마자 하는 일이 혹시 인터넷 창을 띄우는 것인가요? 환율 정보, 경쟁사 쇼핑몰의 상품 가격, 오늘의 주요 뉴스 제목 등을 마우스로 쭉 드래그해서 복사(Ctrl+C)한 뒤, 엑셀을 열고 붙여넣기(Ctrl+V)를 반복하고 계시다면 오늘 이 글이 여러분의 아침 시간을 완벽하게 바꿔놓을 것입니다. 사람이 눈으로 보고 마우스로 긁어오는 작업을 컴퓨터가 대신 눈 깜짝할 사이에 해치우는 기술, 바로 '웹 크롤링(Web Crawling)' 입니다. 파이썬과 판다스(Pandas)를 결합하면 인터넷상의 데이터를 1초 만에 긁어와서 깔끔한 엑셀 표로 저장할 수 있습니다. 오늘은 파이썬 크롤링의 국민 도구인 BeautifulSoup 을 활용해 웹 데이터를 수집하는 기초를 다져보겠습니다. 1. 웹 크롤링의 두 가지 필수 무기 인터넷의 데이터를 가져오려면 파이썬에게 두 가지 도구를 쥐여주어야 합니다. requests (요청하기): 인터넷 주소창에 URL을 입력하고 엔터를 치는 역할을 합니다. 웹페이지의 전체 소스코드(HTML)를 통째로 다운받아 옵니다. BeautifulSoup (요리하기): requests가 가져온 복잡한 외계어 같은 소스코드 속에서, 우리가 원하는 진짜 데이터(텍스트)만 예쁘게 발라내는 정교한 칼잡이 역할을 합니다. 코드를 작성하기 전, 주피터 노트북이나 터미널에서 pip install requests beautifulsoup4 를 입력해 두 도구를 설치해 줍니다. (판다스는 이미 설치되어 있다고 가정합니다.) 2. F12 개발자 도구로 데이터의 '이름표' 찾기 컴퓨터는 사람처럼 "저기 굵은 글씨로 적힌 뉴스 제목 좀 가져와"라고 말하면 알아듣지 못합니다. 웹사이트의 모든 글씨에는 고유한 'HTML 태그와 클래스 이름' 이 붙어있으며, 우리는 이 이름표를 파이썬에게 알려주어야 합니다. 크롬(Chrome) 브라우저에서 원하는 데이터가 있는...

엑셀로는 안 열리는 200만 행 대용량 데이터, 파이썬으로 1초 만에 요약하기

 회사에서 수년간 누적된 판매 데이터나 웹사이트 로그 데이터를 다운로드해 본 적 있으신가요? 파일 용량이 500MB를 넘어가고, 엑셀로 더블클릭해서 열었더니 화면 상단에 "데이터가 너무 많아 완전히 로드되지 않았습니다"라는 무시무시한 경고창이 뜹니다. 스크롤을 맨 밑으로 내려보면 정확히 1,048,576행에서 데이터가 싹둑 잘려 있습니다. 엑셀이라는 프로그램이 태생적으로 담을 수 있는 최대 한계치가 약 104만 행이기 때문입니다. 그 이상의 데이터는 엑셀로는 아예 열어볼 수조차 없습니다. 결국 데이터를 월별로 쪼개서 다운받는 등 불필요한 노가다를 해야 하죠. 하지만 파이썬에게 데이터의 한계란 '컴퓨터 메모리(RAM)의 한계'일 뿐입니다. 오늘은 엑셀은 쳐다보지도 못하는 200만 행, 1,000만 행의 대용량 데이터를 파이썬으로 가볍게 다루는 심화 기술을 알아보겠습니다. 1. 대용량 데이터의 표준, CSV 파일 불러오기 보통 100만 행이 넘어가는 대용량 데이터는 .xlsx 포맷이 아니라 .csv 포맷으로 저장되어 있습니다. CSV는 서식 없이 콤마(,)로만 데이터를 구분한 순수 텍스트 파일이라 용량이 훨씬 가볍기 때문입니다. 판다스에서 CSV 파일을 불러오는 방법은 엑셀과 거의 똑같습니다. read_excel 대신 read_csv 만 써주면 됩니다. import pandas as pd df = pd.read_csv('3년치_전체판매로그.csv') 엑셀이 열다가 기절해버린 200만 행짜리 파일도, 파이썬에서는 위 코드 한 줄이면 단 몇 초 만에 데이터 프레임(표)으로 변환되어 메모리에 척척 올라갑니다. 이제 13편에서 배웠던 피벗 테이블 코드를 돌리면 200만 행의 데이터도 순식간에 요약할 수 있습니다. 2. 컴퓨터가 멈춘다면? 마법의 옵션 chunksize 파이썬이 아무리 강력해도, 내 컴퓨터의 램(RAM) 메모리가 8GB밖에 안 되는데 10GB짜리 초거대 데이터를 한 번에 불러오려 ...

파이썬 몰라도 더블클릭이면 끝! 자동화 코드 bat 파일로 원클릭 실행하기

지난 14편 동안 우리는 파이썬과 판다스(Pandas)를 이용해 흩어진 엑셀 파일을 하나로 합치고, 불필요한 데이터를 청소하고, 피벗 테이블로 요약한 뒤, 예쁜 차트까지 엑셀에 쏙 집어넣는 완벽한 자동화 코드를 완성했습니다. 여기까지 따라오시느라 정말 고생 많으셨습니다! 하지만 진정한 자동화는 여기서 끝이 아닙니다. 매일 아침 출근해서 이 코드를 실행하기 위해 주피터 노트북(Jupyter)이나 VS Code 같은 파이썬 편집기를 켜고, 코드 실행 버튼을 누르는 과정조차 귀찮지 않으신가요? 게다가 이 훌륭한 결과물을 파이썬이 안 깔려 있는 다른 팀원들에게 공유하고 싶을 때는 어떻게 해야 할까요? 오늘은 파이썬 코드를 일반 프로그램처럼 아이콘 '더블클릭' 한 번으로 실행하게 만들어주는 마법, bat(배치) 파일 만들기 를 배워보겠습니다. 1. 윈도우 메모장 하나면 준비 끝! 거창한 프로그램이 필요하지 않습니다. 윈도우에 기본으로 깔려있는 '메모장(Notepad)'을 엽니다. 그리고 딱 두 줄만 적어주면 됩니다. (여러분이 작성한 파이썬 코드 파일 이름이 auto_report.py 라고 가정해 보겠습니다.) python auto_report.py pause python auto_report.py : 컴퓨터에게 "파이썬으로 이 파일을 실행해 줘!"라고 내리는 명령입니다. pause : 코드가 실행된 후 까만색 명령 프롬프트 창이 휙 꺼지지 않고, 우리가 결과를 확인하거나 에러 메시지를 읽을 수 있도록 화면을 잠시 멈춰주는 역할을 합니다. 2. 저장할 때 주의사항: 확장자를 .bat으로! 메모장에 두 줄을 적었다면 [파일] - [다른 이름으로 저장] 을 누릅니다. 여기서 실무자들이 가장 많이 하는 실수가 있습니다. 파일 이름을 그냥 적고 저장하면 실행.bat.txt 처럼 단순한 메모장 파일로 저장되어 버립니다. 반드시 저장 창 아래쪽에 있는 [파일 형식]을 '텍스트 ...

엑셀 차트 필요 없다! 파이썬으로 1초 만에 그래프 그리고 엑셀에 자동 삽입하기

 데이터를 깔끔하게 다듬고 피벗 테이블로 요약까지 마쳤다면, 이제 방점을 찍을 차례입니다. 숫자가 빼곡한 표만으로는 팀장님의 마음을 사로잡을 수 없습니다. 직관적으로 한눈에 들어오는 '그래프(차트)'가 반드시 필요하죠. 엑셀에서 차트를 그리려면 데이터 범위를 드래그하고, 삽입 탭에 가서 차트 종류를 고르고, 축 제목을 바꾸고, 색상을 변경하는 등 마우스 클릭을 수십 번 해야 합니다. 매달 데이터가 바뀔 때마다 이 작업을 반복하는 것은 엄청난 스트레스입니다. 하지만 파이썬에서는 표에 있는 숫자를 그래프로 바꾸고, 심지어 엑셀 파일 안에 예쁘게 배치하는 것까지 단 몇 줄의 코드로 완벽하게 자동화할 수 있습니다. 1. 표를 1초 만에 그림으로: df.plot() 파이썬 판다스(Pandas)에는 데이터 프레임(표)을 즉시 그래프로 바꿔주는 아주 편리한 plot() 기능이 내장되어 있습니다. 13편에서 만든 부서별 매출액 피벗 테이블(pivot_df)이 있다고 가정해 봅시다. 이 표를 막대그래프로 보고 싶다면 어떻게 할까요? pivot_df.plot(kind='bar') 놀랍게도 이게 끝입니다. kind='bar' 는 막대그래프, kind='line' 은 꺾은선그래프를 의미합니다. 이 코드 한 줄이면 파이썬이 표의 행과 열을 알아서 분석해 X축과 Y축을 설정하고 알록달록한 그래프를 화면에 띄워줍니다. 2. 실무자 필수 팁: 한글 깨짐 방지 폰트 설정 여기서 한국인 실무자들이 100% 마주치는 에러가 있습니다. 파이썬 그래프의 기본 폰트는 영어 전용이라서, 부서명 같은 한글 데이터가 전부 네모 박스(ㅁㅁㅁ)로 깨져서 나옵니다. 이때는 당황하지 마시고 코드 맨 위에 '맑은 고딕' 폰트를 사용하겠다는 마법의 주문 두 줄을 추가해 주세요. import matplotlib.pyplot as plt plt.rc('font', family='Malgun Goth...

엑셀 피벗 테이블(Pivot Table), 파이썬 코드 한 줄로 1초 만에 자동화하기

  수만 줄, 수십만 줄의 원본 데이터(Raw Data)를 팀장님이 한눈에 볼 수 있도록 요약하려면 어떻게 해야 할까요? 엑셀을 조금 다룰 줄 아는 직장인이라면 주저 없이 '피벗 테이블(Pivot Table)'을 켤 것입니다. 십자 모양의 틀 안에 부서명, 날짜, 매출액을 마우스로 끌어다 놓기만 하면 순식간에 멋진 요약 보고서가 완성되니까요. 하지만 엑셀 피벗 테이블에는 치명적인 단점이 있습니다. 매달 새로운 데이터가 추가될 때마다 원본 범위를 다시 잡고 '새로고침'을 눌러야 하며, 마우스로 일일이 필드를 드래그하는 작업은 '자동화'와 거리가 멉니다. 파이썬 판다스(Pandas)에서는 이 번거로운 마우스 드래그 작업을 단 한 줄의 코드로 영구적으로 자동화할 수 있습니다. 오늘은 파이썬으로 피벗 테이블을 1초 만에 뚝딱 만들어내는 공식을 알아보겠습니다. 1. 엑셀의 4구역, 파이썬 코드로 매칭하기 엑셀 피벗 테이블을 띄우면 우측에 4개의 네모 칸(필터, 열, 행, 값)이 나옵니다. 파이썬의 pd.pivot_table() 함수는 이 4개의 칸을 영단어로 그대로 옮겨놓았을 뿐, 원리는 100% 똑같습니다. index : 엑셀의 [행] (예: 부서별로 볼래) columns : 엑셀의 [열] (예: 월별로 나누어서 볼래) values : 엑셀의 [값] (예: 매출액을 볼래) aggfunc : [계산 방식] (예: 더할래? 평균을 낼래?) 이 공식만 머릿속에 넣으면 끝입니다. "부서별(행), 월별(열) 매출액(값)의 합계(계산)를 구해줘!"를 코드로 바꾸면 아래와 같이 됩니다. pivot_df = pd.pivot_table(df, index='부서명', columns='월', values='매출액', aggfunc='sum') 이 한 줄을 실행하는 순간, 마우스로 낑낑대며 드래그하던 ...

윗줄에 결재란이 떡하니? 지저분한 엑셀 양식 파이썬으로 무시하고 읽어오기

파이썬 엑셀 자동화를 공부할 때 책이나 강의에서 제공하는 예제 파일들은 보통 1행부터 '이름, 부서, 직급' 같은 제목(Header)이 예쁘게 적혀있습니다. 하지만 우리 회사의 현실은 어떤가요? 파일 맨 위에는 거대한 글씨로 '월간 영업 실적 보고서'라는 제목이 병합되어 있고, 오른쪽 위에는 팀장, 국장, 사장님의 도장을 받는 '결재란'이 떡하니 자리 잡고 있습니다. 진짜 데이터는 한 4행이나 5행부터 시작하죠. 이런 엑셀 파일을 파이썬에서 pd.read_excel() 로 그냥 불러오면 대참사가 일어납니다. 파이썬은 무조건 1행을 표의 제목으로 인식하기 때문에, 거대한 '보고서 제목'을 표의 기준으로 삼아버리고 나머지 진짜 제목들은 전부 'Unnamed'라는 정체불명의 데이터로 뭉개버립니다. 오늘은 엑셀 원본 양식을 손상하지 않고, 내가 원하는 진짜 데이터부터 쏙 빼오는 실전 불러오기 기술을 알아보겠습니다. 1. 불필요한 윗줄 건너뛰기: skiprows 옵션 엑셀 원본 파일에 있는 결재란과 제목을 일일이 마우스로 우클릭해서 '행 삭제'를 하고 계신가요? 수십 개의 파일을 그렇게 지우는 것은 자동화가 아닙니다. 파이썬에게 "위에 있는 쓸데없는 3줄은 눈 감고 무시해 줘!"라고 명령하면 끝납니다. 이때 사용하는 것이 바로 skiprows (행 건너뛰기) 옵션입니다. 데이터를 불러오는 코드 괄호 안에 이 마법의 단어만 추가해 주시면 됩니다. df = pd.read_excel('실적보고서.xlsx', skiprows=3) 이렇게 적어주면 파이썬은 엑셀 파일의 맨 위에서부터 3줄(1~3행)을 아예 없는 셈 치고 건너뜁니다. 그리고 4행에 있는 '사번, 이름, 부서명'을 정확하게 표의 제목으로 인식하여 데이터를 깔끔하게 불러옵니다. 위쪽 양식이 아무리 복잡하게 병합되어 있어도 이 코드 한 줄이면 완벽하게 회피할 수 있...

가공 끝난 데이터, 파이썬으로 엑셀 시트(Sheet) 여러 개로 쪼개서 저장하기

파이썬으로 수만 줄의 데이터를 불러와 조건에 맞게 필터링하고 빈칸까지 깔끔하게 청소했습니다. 이제 이 완벽한 데이터를 엑셀로 저장해서 팀장님께 보고할 일만 남았습니다. 그런데 팀장님의 지시사항이 하나 더 떨어집니다. "이번 달 전체 실적 데이터, 부서별로 엑셀 탭(시트) 나눠서 하나의 파일로 정리해 주세요." 엑셀만 다룰 줄 알던 시절이라면 어떻게 했을까요? '영업팀'으로 필터링해서 복사하고, 아래쪽의 + 버튼을 눌러 새 시트를 만든 뒤 붙여넣고, 시트 이름을 '영업팀'으로 바꿉니다. 그리고 이 짓을 인사팀, 마케팅팀, 재무팀... 부서 개수만큼 무한 반복합니다. 부서가 20개라면 20번을 반복해야 하죠. 하지만 파이썬에서는 판다스의 숨겨진 무기 하나만 꺼내면 클릭 한 번에 20개의 시트가 알아서 척척 만들어집니다. 1. to_excel()의 치명적 한계 2편에서 우리는 데이터를 엑셀로 내보낼 때 df.to_excel('결과.xlsx') 라는 코드를 쓴다고 배웠습니다. 그렇다면 영업팀 데이터(df_sales)와 인사팀 데이터(df_hr)를 각각 저장하려면 이렇게 쓰면 될까요? df_sales.to_excel('결과.xlsx', sheet_name='영업팀') df_hr.to_excel('결과.xlsx', sheet_name='인사팀') 이 코드를 실행하고 엑셀 파일을 열어보면, 안타깝게도 '인사팀' 시트 딱 하나만 남아있을 것입니다. to_excel() 함수는 기본적으로 파일을 **'새로 덮어쓰기'**하기 때문입니다. 영업팀 시트를 기껏 만들어놨더니, 그 다음 줄에서 인사팀 데이터가 기존 파일을 싹 밀어버리고 혼자 자리를 차지한 것이죠. 2. 엑셀의 바인더 역할을 하는 마법사: pd.ExcelWriter 여러 개의 시트를 하나의 파일에 차곡차곡 모으려면, 파이썬에게 "이 엑셀 파일 아직 닫지 말고 열...