본문 바로가기
기초 및 언어/▶ python

Python 웹 크롤링 완벽 가이드:실전 수집부터 엑셀 데이터화까지

by 류딩이 2023. 12. 2.
Python Web Scraper Deep-Dive

Python 웹 크롤링 완벽 가이드:
실전 수집부터 엑셀 데이터화까지

데이터 수집의 기초

데이터 사이언스의 첫 단추는 양질의 데이터를 확보하는 것입니다. 이를 위해 두 가지 개념을 구분해야 합니다.

  • 크롤링(Crawling): 자동화 봇이 웹 페이지의 링크를 타고 다니며 정보를 수집하는 행위
  • 스크레이핑(Scraping): 수집된 HTML 데이터에서 필요한 특정 정보(텍스트, 이미지 등)를 추출하여 가공하는 행위

BeautifulSoup 요소 추출 실습

HTML의 복잡한 태그 구조 속에서 원하는 데이터만 뽑아내기 위해 findfindAll 함수를 사용합니다.

 
 
 
import requests
from bs4 import BeautifulSoup

url = 'https://basicenglishspeaking.com/daily-english-conversation-topics/'
res = requests.get(url)
soup = BeautifulSoup(res.text, 'html.parser')

# 1. 특정 영역(div) 먼저 타겟팅
content_area = soup.find('div', {'class': 'thrv-columns'})

# 2. 영역 내 모든 앵커(a) 태그 추출
links = content_area.findAll('a')

# 3. 데이터 정제 후 리스트 저장
topics = [link.text.strip() for link in links]
print(f"총 {len(topics)}개의 주제를 수집했습니다.")

안티 크롤링 대응 전략

상당수 웹사이트는 봇의 접근을 차단하기 위해 HTTP 406 Not Acceptable 에러를 반환합니다. 이를 해결하기 위해 실제 브라우저처럼 보이게 하는 헤더 정보가 필요합니다.

User-Agent: 요청을 보내는 주체가 사람이 사용하는 '브라우저'임을 증명하는 문자열입니다.

 
 
 
# 멜론 차트 수집 시 필수 설정
header = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) Chrome/119.0.0.0'}
request = requests.get('https://www.melon.com/chart/index.html', headers=header)

# zip 함수를 활용한 타이틀-아티스트 병렬 처리
for i, (t, a) in enumerate(zip(titles, artists), 1):
    print(f"{i}위: {a.text.strip()} - {t.text.strip()}")

Pandas를 활용한 데이터 자동화

수집된 비정형 데이터를 Pandas DataFrame으로 변환하면 한 줄의 코드로 엑셀 저장 및 통계 분석이 가능해집니다.

 
 
 
import pandas as pd

# 1. 딕셔너리 리스트를 데이터프레임으로 변환
df = pd.DataFrame(data_list)

# 2. 엑셀 파일로 내보내기 (인덱스 제외)
df.to_excel('finance_report.xlsx', index=False)

# 3. 팁: time.sleep()을 활용하여 서버 부하 방지
import time
time.sleep(2) # 다중 페이지 수집 시 필수 매너

윤리적 크롤링 가이드

모든 웹사이트는 루트 경로에 /robots.txt를 두어 크롤링 허용 범위를 명시합니다.

  • 무분별한 요청 금지: 1초에 수십 번씩 요청을 보내는 것은 서버 공격으로 간주될 수 있습니다.
  • 개인정보 수집 금지: 로그인 후 개인정보를 긁어오는 행위는 법적 처벌의 대상이 될 수 있습니다.
  • 저작권 준수: 수집한 데이터를 상업적으로 재배포할 때는 신중해야 합니다.
기초 및 언어 > python

Copyright 2026. All Rights Reserved.

TOP