개요
크롤링으로 수집한 데이터를 어떻게 효율적으로 관리하고 활용해야할까?
엑셀 파일로 데이터를 저장하면 공유나 분석에 편리함을 더할 수 있으므로 이번 포스팅에서는 파이썬을 활용하여
크롤링한 데이터를 다양한 방식으로 엑셀로 변환하는 방법에 대해서 기록해보려고 한다.
기본 크롤링 및 데이터 수집
간단한 웹 크롤링 예제를 통해 데이터를 수집함.
추출된 데이터들은 아래 시나리오별 챕터에서 쓰일 것임
import requests
from bs4 import BeautifulSoup
url = 'https://example.com/products'
response = requests.get(url)
soup = BeautifulSoup(response.content, 'html.parser')
products = []
for item in soup.find_all('div', class_='product'):
name = item.find('h2').text
price = int(item.find('span', class_='price').text.replace(',', '').replace('원', ''))
category = item.find('span', class_='category').text
products.append({'상품명': name, '가격': price, '카테고리': category})
# 데이터프레임 생성
import pandas as pd
df = pd.DataFrame(products)
시나리오별 데이터 처리 및 엑셀 저장 방법
1. 특정 조건에 따라 데이터를 필터링하여 엑셀로 저장
예를 들어, 크롤링한 제품 데이터 중 가격이 10,000원 이상인 상품만을 필터링하여 저장할 때
import pandas as pd
# 크롤링한 데이터 예시 (DataFrame으로 가정)
data = {
'상품명': ['상품A', '상품B', '상품C', '상품D'],
'가격': [8000, 12000, 15000, 5000],
'카테고리': ['전자제품', '전자제품', '가전제품', '생활용품']
}
df = pd.DataFrame(data)
# 가격이 10,000원 이상인 상품만 필터링
filtered_df = df[df['가격'] >= 10000]
# 필터링된 데이터를 엑셀로 저장
filtered_df.to_excel('filtered_products.xlsx', index=False)
2. 카테고리별로 데이터를 분류하여 각 시트에 저장
크롤링한 상품 데이터를 카테고리별로 분류하고, 각 카테고리를 엑셀 파일의 개별 시트에 저장
import pandas as pd
# 크롤링한 데이터 예시
data = {
'상품명': ['상품A', '상품B', '상품C', '상품D'],
'가격': [8000, 12000, 15000, 5000],
'카테고리': ['전자제품', '전자제품', '가전제품', '생활용품']
}
df = pd.DataFrame(data)
# 엑셀 작성자 생성
with pd.ExcelWriter('categorized_products.xlsx') as writer:
for category, group in df.groupby('카테고리'):
group.to_excel(writer, sheet_name=category, index=False)
3. 데이터를 취합하여 요약 정보 저장
크롤링한 판매 데이터를 기반으로 각 카테고리별 총 판매량과 평균 가격을 계산하여 저장
import pandas as pd
# 크롤링한 판매 데이터 예시
data = {
'카테고리': ['전자제품', '전자제품', '가전제품', '생활용품', '전자제품'],
'판매량': [10, 20, 5, 15, 25],
'가격': [8000, 12000, 15000, 5000, 10000]
}
df = pd.DataFrame(data)
# 카테고리별 총 판매량과 평균 가격 계산
summary_df = df.groupby('카테고리').agg({
'판매량': 'sum',
'가격': 'mean'
}).reset_index()
# 요약 정보를 엑셀로 저장
summary_df.to_excel('sales_summary.xlsx', index=False)
4. 여러 데이터 소스를 병합하고 중복 제거 후 저장하기
여러 웹사이트에서 동일한 상품 데이터를 크롤링하여 하나의 데이터프레임으로 병합하고, 중복된 상품을 제거한 후 저장
import pandas as pd
# 사이트 A에서 크롤링한 데이터
data_a = {
'상품명': ['상품A', '상품B', '상품C'],
'가격': [8000, 12000, 15000]
}
df_a = pd.DataFrame(data_a)
# 사이트 B에서 크롤링한 데이터
data_b = {
'상품명': ['상품B', '상품C', '상품D'],
'가격': [11500, 14800, 5000]
}
df_b = pd.DataFrame(data_b)
# 데이터 병합
merged_df = pd.concat([df_a, df_b], ignore_index=True)
# 중복 제거 (상품명 기준)
deduplicated_df = merged_df.drop_duplicates(subset='상품명', keep='first')
# 결과를 엑셀로 저장
deduplicated_df.to_excel('merged_products.xlsx', index=False)
5. 여러 개의 엑셀 파일을 하나로 통합
크롤링한 데이터가 여러 엑셀 파일로 저장되어 있을 때, 이를 하나의 엑셀 파일로 통합
import pandas as pd
import glob
# 엑셀 파일 목록 가져오기
excel_files = glob.glob('data_folder/*.xlsx')
# 데이터프레임 리스트 생성
df_list = []
for file in excel_files:
df = pd.read_excel(file)
df_list.append(df)
# 데이터프레임 통합
combined_df = pd.concat(df_list, ignore_index=True)
# 통합된 데이터 저장
combined_df.to_excel('combined_data.xlsx', index=False)
6. 특정 열을 기준으로 데이터를 정렬하여 저장
크롤링한 데이터를 특정 열(예: 가격) 기준으로 오름차순 또는 내림차순 정렬하여 저장
import pandas as pd
# 크롤링한 데이터 예시
data = {
'상품명': ['상품A', '상품B', '상품C', '상품D'],
'가격': [8000, 12000, 15000, 5000]
}
df = pd.DataFrame(data)
# 가격 기준 내림차순 정렬
sorted_df = df.sort_values(by='가격', ascending=False)
# 정렬된 데이터 저장
sorted_df.to_excel('sorted_data.xlsx', index=False)