복사 붙여넣기 지옥 탈출! 파이썬 웹 크롤링으로 인터넷 데이터 엑셀에 자동 수집하기
매일 아침 출근하자마자 하는 일이 혹시 인터넷 창을 띄우는 것인가요? 환율 정보, 경쟁사 쇼핑몰의 상품 가격, 오늘의 주요 뉴스 제목 등을 마우스로 쭉 드래그해서 복사(Ctrl+C)한 뒤, 엑셀을 열고 붙여넣기(Ctrl+V)를 반복하고 계시다면 오늘 이 글이 여러분의 아침 시간을 완벽하게 바꿔놓을 것입니다.
사람이 눈으로 보고 마우스로 긁어오는 작업을 컴퓨터가 대신 눈 깜짝할 사이에 해치우는 기술, 바로 '웹 크롤링(Web Crawling)'입니다. 파이썬과 판다스(Pandas)를 결합하면 인터넷상의 데이터를 1초 만에 긁어와서 깔끔한 엑셀 표로 저장할 수 있습니다. 오늘은 파이썬 크롤링의 국민 도구인 BeautifulSoup을 활용해 웹 데이터를 수집하는 기초를 다져보겠습니다.
1. 웹 크롤링의 두 가지 필수 무기
인터넷의 데이터를 가져오려면 파이썬에게 두 가지 도구를 쥐여주어야 합니다.
- requests (요청하기): 인터넷 주소창에 URL을 입력하고 엔터를 치는 역할을 합니다. 웹페이지의 전체 소스코드(HTML)를 통째로 다운받아 옵니다.
- BeautifulSoup (요리하기): requests가 가져온 복잡한 외계어 같은 소스코드 속에서, 우리가 원하는 진짜 데이터(텍스트)만 예쁘게 발라내는 정교한 칼잡이 역할을 합니다.
코드를 작성하기 전, 주피터 노트북이나 터미널에서 pip install requests beautifulsoup4를 입력해 두 도구를 설치해 줍니다. (판다스는 이미 설치되어 있다고 가정합니다.)
2. F12 개발자 도구로 데이터의 '이름표' 찾기
컴퓨터는 사람처럼 "저기 굵은 글씨로 적힌 뉴스 제목 좀 가져와"라고 말하면 알아듣지 못합니다. 웹사이트의 모든 글씨에는 고유한 'HTML 태그와 클래스 이름'이 붙어있으며, 우리는 이 이름표를 파이썬에게 알려주어야 합니다.
크롬(Chrome) 브라우저에서 원하는 데이터가 있는 웹페이지를 띄운 뒤, 키보드 F12를 눌러보세요. 우측에 복잡한 창(개발자 도구)이 뜹니다. 여기서 마우스 화살표 모양 아이콘을 클릭하고 화면의 텍스트를 클릭해 보면, 그 글씨가 <a class="title_text"> 처럼 어떤 이름표를 달고 있는지 확인할 수 있습니다.
3. 크롤링부터 엑셀 저장까지 한 번에 (실전 코드)
이제 인터넷에 있는 뉴스 제목들을 긁어와서 엑셀로 저장하는 코드를 작성해 보겠습니다. (웹사이트의 구조는 예시이며, 실제 사이트의 클래스 이름에 맞게 수정하여 사용합니다.)
import requests
from bs4 import BeautifulSoup
import pandas as pd
# 1. 봇 차단 방지를 위한 User-Agent 설정 (마치 사람이 접속한 것처럼 위장)
headers = {'User-Agent': 'Mozilla/5.0'}
# 2. 웹페이지 접속해서 데이터 가져오기
url = 'https://news.naver.com/main/main.naver?mode=LSD&mid=shm&sid1=105'
response = requests.get(url, headers=headers)
# 3. 뷰티풀수프(BeautifulSoup)로 데이터 요리하기
soup = BeautifulSoup(response.text, 'html.parser')
# 4. F12로 찾은 이름표(예: class가 'sh_text_headline'인 a 태그)를 가진 모든 데이터 찾기
titles = soup.find_all('a', class_='sh_text_headline')
# 5. 빈 상자(리스트)를 만들고, 태그를 떼어낸 순수 텍스트만 차곡차곡 담기
title_list = []
for title in titles:
title_list.append(title.text.strip())
# 6. 수집한 데이터를 판다스 데이터프레임으로 만들고 엑셀로 저장하기!
df = pd.DataFrame({'오늘의 뉴스 제목': title_list})
df.to_excel('뉴스수집결과.xlsx', index=False)
print("크롤링 및 엑셀 저장 완료!")
이 코드를 실행하고 폴더를 확인해 보세요! 매일 아침 마우스로 드래그하고 복사해서 붙여넣던 그 데이터들이 뉴스수집결과.xlsx 파일 안에 깔끔하게 정리되어 들어간 것을 볼 수 있습니다. 15편에서 배운 bat 파일로 만들어두면, 더블클릭 한 번에 최신 정보가 담긴 엑셀이 매일 새롭게 탄생하는 것입니다.
크롤링 시 주의사항 (서버에 매너 지키기)
웹 크롤링은 너무나 강력하고 편리한 기술이지만 주의할 점이 있습니다. for 반복문을 돌리면서 1초에 수천 번씩 데이터를 가져오도록 코드를 짜면, 상대방 웹사이트 서버가 공격(DDoS)을 받는 것으로 인식하여 여러분의 아이피(IP)를 차단해 버릴 수 있습니다. 코드를 짤 때는 항상 time.sleep(2) 같은 휴식 코드를 넣어 기계가 아닌 사람의 속도처럼 여유롭게 수집하는 매너를 지켜주셔야 합니다.
▶ 핵심 요약
- 웹 크롤링을 위해서는 웹페이지를 다운받는
requests와, HTML 코드에서 필요한 데이터만 발라내는BeautifulSoup라이브러리가 필요합니다. - 브라우저에서
F12개발자 도구를 활용해 내가 가져오고 싶은 데이터의 태그(Tag)와 클래스(Class) 이름을 확인해야 파이썬에게 정확한 명령을 내릴 수 있습니다. soup.find_all()로 수집한 데이터를 텍스트만 추출해 리스트에 담은 뒤, 판다스의to_excel()을 사용하면 순식간에 엑셀 파일로 자동 저장됩니다.
웹에서 데이터를 수집하고, 분석하고, 엑셀로 포장까지 마쳤습니다. 이제 이 파일을 부서 사람들에게 나눠줄 일만 남았네요. 다음 18편에서는 '아웃룩(Outlook) 켤 필요 없다! 완성된 엑셀 파일을 파이썬으로 자동 첨부하여 수십 명에게 이메일 쏘기'에 대해 다루겠습니다.
여러분은 회사 업무 중, 인터넷에서 매일 수동으로 복사해서 엑셀로 옮겨 적고 있는 가장 귀찮은 데이터는 무엇인가요? 환율? 경쟁사 가격? 댓글로 남겨주시면 크롤링 아이디어를 나눠보겠습니다!
댓글
댓글 쓰기