파이썬 웹 크롤링 엑셀 저장: 여러 지역 날씨 한 번에 수집하기 (40대 실전 16편)

지난 15편에서는 기초적인 코드를 통해 특정 지역 하나의 날씨를 터미널 화면에 띄우는 데 성공했습니다. 하지만 실무에서는 화면에 스쳐 지나가는 텍스트만으로는 팀원들과 데이터를 공유할 수 없죠. 결국 우리가 매일 쓰는 ‘보고서’ 형태로 만들어내야 합니다. 그래서 오늘은 파이썬 웹 크롤링 엑셀 저장 기술을 완벽하게 마스터해 보겠습니다.

화성시 한 곳이 아니라 수원시, 용인시, 평택시 등 우리가 관리하는 여러 방역 구역의 기상 상황을 한 번에 긁어온 뒤, 가장 친숙한 문서 파일로 1초 만에 예쁘게 저장하는 무인 자동화를 시작하겠습니다.

파이썬 웹 크롤링 엑셀 저장을 통해 자동 생성된 다중 지역 기상 방역 대장
대체 텍스트: 파이썬 웹 크롤링 엑셀 저장을 통해 자동 생성된 다중 지역 기상 방역 대장

1. 파이썬 웹 크롤링 엑셀 저장의 핵심: 반복문과 pandas

여러 지역의 정보를 한 번에 모아서 엑셀로 만들려면, 우리가 앞선 3편에서 배웠던 마법의 데이터 가공 라이브러리인 pandas를 다시 사용해야 합니다. 파이썬 웹 크롤링 엑셀 저장의 작업 논리는 아주 간단합니다.

  1. 우리가 작업할 지역들의 이름을 ‘리스트(List)’라는 바구니에 담아둡니다.
  2. for 반복문을 사용하여 바구니 안의 지역을 하나씩 꺼내며 날씨를 검색(크롤링)합니다.
  3. 긁어온 데이터를 차곡차곡 모아 pandas를 이용해 표(DataFrame)로 만듭니다.
  4. 이 표를 바탕화면에 .xlsx 파일로 내보냅니다.

이 4단계만 이해하시면 날씨뿐만 아니라 주식 가격, 부동산 시세 등 모든 웹상의 데이터를 내 입맛대로 소유할 수 있습니다.

2. 실무 트러블슈팅: 봇(Bot) 차단을 막는 생명줄 time.sleep

코드를 짤 때 초보자들이 가장 많이 저지르는 치명적인 실수가 있습니다. 바로 컴퓨터의 ‘엄청난 속도’를 통제하지 않는 것입니다.

파이썬이 for 반복문을 돌면서 화성, 수원, 용인 날씨를 검색하는 속도는 0.1초도 걸리지 않습니다. 네이버나 구글의 보안 서버는 이렇게 비인간적인 속도로 접속을 요청하는 IP를 ‘악성 로봇(디도스 공격 등)’으로 간주하고 그 즉시 여러분의 IP를 차단해버립니다.

이를 피하기 위해 우리는 내장 모듈인 time을 사용해야 합니다. 검색을 한 번 하고 나면 time.sleep(2)라는 코드를 넣어 “사람처럼 2초 정도 멈췄다가 다음 검색을 해라”라고 여유를 주어야 합니다. 이 한 줄이 여러분의 코드를 안전하게 지켜줍니다. (참고자료: 파이썬 time 모듈 공식 문서)

파이썬 웹 크롤링 엑셀 저장 시 봇 차단을 막기 위한 time.sleep 함수 적용 모습
대체 텍스트: 파이썬 웹 크롤링 엑셀 저장 시 봇 차단을 막기 위한 time.sleep 함수 적용 모습

3. 실전 코드: 다중 지역 날씨 크롤링 후 엑셀로 뽑아내기

이제 방역 현장 4곳의 날씨를 긁어와 바탕화면에 ‘오늘의_현장날씨.xlsx’ 파일로 저장하는 완성된 코드를 공개합니다.

Python

import requests
from bs4 import BeautifulSoup
import pandas as pd
import time
import os

# 1. 크롤링할 대상 지역 리스트 
locations = ['화성시', '수원시', '용인시', '평택시']

# 2. 긁어온 데이터를 차곡차곡 담을 빈 리스트 준비
weather_data = []

# 3. 봇 차단 방지용 가짜 신분증(User-Agent)
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.0.0 Safari/537.36'
}

# 4. 반복문(for)을 돌면서 각 지역 날씨 긁어오기
for loc in locations:
    url = f"https://search.naver.com/search.naver?query={loc}+날씨"
    response = requests.get(url, headers=headers)
    
    if response.status_code == 200:
        soup = BeautifulSoup(response.text, 'html.parser')
        
        try:
            temp = soup.select_one('.temperature_text > strong').text.strip()
            status = soup.select_one('.weather_main').text.strip()
            humidity = soup.select_one('.summary_list > div:nth-child(2) > dd').text.strip()
            
            # 추출한 데이터를 딕셔너리 형태로 묶어서 리스트에 추가
            weather_data.append({
                '현장 지역': loc,
                '현재 온도': temp,
                '기상 상태': status,
                '습도': humidity
            })
            print(f"{loc} 날씨 수집 완료!")
            
        except AttributeError:
            print(f"{loc} 날씨 정보를 찾을 수 없습니다.")
            
    # 사람처럼 보이게 2초 쉬기 (매우 중요)
    time.sleep(2)

# 5. 수집된 데이터를 pandas를 이용해 엑셀 표(DataFrame)로 변환
df = pd.DataFrame(weather_data)

# 6. 바탕화면에 엑셀 파일로 저장하기
desktop_path = os.path.join(os.path.expanduser('~'), 'Desktop')
file_path = os.path.join(desktop_path, '오늘의_방역현장_날씨.xlsx')

df.to_excel(file_path, index=False, engine='openpyxl')

print("완벽합니다! 바탕화면에 엑셀 파일이 저장되었습니다.")

이 코드를 실행하고 터미널 창에 ‘수집 완료’ 메시지가 모두 뜬 후 바탕화면을 확인해 보십시오. 마우스 클릭 한 번 하지 않았는데, 4개 도시의 날씨가 완벽하게 표로 정리된 엑셀 파일이 생성되어 있을 것입니다.

파이썬 웹 크롤링 엑셀 저장 코드가 성공적으로 실행되어 바탕화면에 파일이 생성된 결과
Alt텍스트: 파이썬 웹 크롤링 엑셀 저장 코드가 성공적으로 실행되어 바탕화면에 파일이 생성된 결과

4. 글을 마치며: 수집, 가공, 알림의 완전한 루프 완성

오늘 배운 파이썬 웹 크롤링 엑셀 저장 기술은 실무 자동화의 가장 강력한 무기입니다. 우리는 지금까지 16편의 여정을 통해 인터넷에서 데이터를 수집하고, pandas로 가공하며, 카카오톡으로 자동 발송하는 루프를 모두 완성했습니다.

다음 17편에서는 이렇게 만든 소중한 파이썬 코드를, 파이썬이 설치되지 않은 다른 직원의 컴퓨터에서도 원클릭으로 실행할 수 있게 만들어주는 ‘.exe’ 실행 파일 변환 방법(Pyinstaller)에 대해 알아보겠습니다.

(이전 글: [15편: 파이썬 웹 크롤링 기초 – 방역 현장 날씨 수집하기] 보러 가기)

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다