반응형
파이썬 웹 스크래핑 크롤링 후 엑셀 데이터 저장 샘플 프로그래밍
파이썬을 사용하여 웹에서 특정 데이터를 추출 및 가공 후 엑셀에 저장하는 방법에 대해서 알아보도록 하겠습니다. 먼저 웹데이터 크롤링을 위한 라이브러리로 requests, BeautifulSoup 두가지를 사용했고 엑셀 데이터 저장에는 openpyxl을 사용했습니다.
import requests
from bs4 import BeautifulSoup
from openpyxl import Workbook
data_box = []
# 유저 에이전트
h = {'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/104.0.0.0 '
'Safari/537.36'}
# 무신사 상품 리스트 주소
url = 'https://www.musinsa.com/search/musinsa/goods?q=%EB%8B%88%ED%8A%B8&list_kind=small&sortCode=pop&sub_sort=&page=1'
get_musinsa = requests.get(url, headers=h)
soup = BeautifulSoup(get_musinsa.text, 'html.parser')
site_data = soup.find(id='searchList').find_all(class_='article_info')
for c in site_data:
item_title = str(c.find(class_='item_title').text).replace(' ', '').replace('\n', '')
list_info = str(c.find(class_='list_info').text).replace(' ', '').replace('\n', '')
price_ck = str(c.find(class_='price').text).replace(' ', '').replace('\n', '').split('원')
price = ''
if price_ck[1]:
price = price_ck[1] + '원'
else:
price = price_ck[0] + '원'
try:
count_view = str(c.find(class_='count').text).replace(' ', '').replace('\n', '') + '개'
except AttributeError:
count_view = 'None'
item_url = str(c.find(class_='list_info').find('a')['href'])
data_box.append([item_title, list_info, price, count_view, item_url])
# 엑셀파일 쓰기
write_wb = Workbook()
write_ws = write_wb.active
write_ws.column_dimensions['A'].width = 20
write_ws.column_dimensions['B'].width = 60
write_ws.column_dimensions['C'].width = 20
write_ws.column_dimensions['D'].width = 20
write_ws.column_dimensions['E'].width = 20
write_ws['A1'] = '브랜드'
write_ws['B1'] = '상품명'
write_ws['C1'] = '가격'
write_ws['D1'] = '리뷰 개수'
write_ws['E1'] = '링크'
sell_count = 2
# 행 단위로 추가
for z in data_box:
write_ws[f'A{sell_count}'].value = z[0]
write_ws[f'B{sell_count}'].value = z[1]
write_ws[f'C{sell_count}'].value = z[2]
write_ws[f'D{sell_count}'].value = z[3]
# 하이퍼링크 추가
write_ws[f'E{sell_count}'].hyperlink = z[4]
write_ws[f'E{sell_count}'].value = z[4]
write_ws[f'E{sell_count}'].style = "Hyperlink"
sell_count += 1
write_wb.save(fr"무신사 상품 리스트.xlsx")
write_wb.close()
input('작업 완료')
먼저 requests, BeautifulSoup 두가지를 사용해서 웹에서 데이터를 추출 후 리스트에 저장을 합니다. 그리고 리스트를 for문에 대입을 시켜서 순서대로 엑셀에 입력을 하고 xlsx 파일로 저장을 하는 것입니다.
data_box = []
# 유저 에이전트
h = {'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/104.0.0.0 '
'Safari/537.36'}
# 무신사 상품 리스트 주소
url = 'https://www.musinsa.com/search/musinsa/goods?q=%EB%8B%88%ED%8A%B8&list_kind=small&sortCode=pop&sub_sort=&page=1'
get_musinsa = requests.get(url, headers=h)
soup = BeautifulSoup(get_musinsa.text, 'html.parser')
site_data = soup.find(id='searchList').find_all(class_='article_info')
for c in site_data:
item_title = str(c.find(class_='item_title').text).replace(' ', '').replace('\n', '')
list_info = str(c.find(class_='list_info').text).replace(' ', '').replace('\n', '')
price_ck = str(c.find(class_='price').text).replace(' ', '').replace('\n', '').split('원')
price = ''
if price_ck[1]:
price = price_ck[1] + '원'
else:
price = price_ck[0] + '원'
try:
count_view = str(c.find(class_='count').text).replace(' ', '').replace('\n', '') + '개'
except AttributeError:
count_view = 'None'
item_url = str(c.find(class_='list_info').find('a')['href'])
data_box.append([item_title, list_info, price, count_view, item_url])
requests, BeautifulSoup을 사용하여 데이터를 추출하는 과정입니다. 데이터 추출 과정에서 텍스트의 불필요한 띄어쓰기와 줄바꿈 등을 replace로 제거한 뒤 data_box 리스트에 넣어줬습니다. 페이지의 데이터를 다 추출 한 뒤 openpyxl 코드로 넘어갑니다.
# 엑셀파일 쓰기
write_wb = Workbook()
write_ws = write_wb.active
write_ws.column_dimensions['A'].width = 20
write_ws.column_dimensions['B'].width = 60
write_ws.column_dimensions['C'].width = 20
write_ws.column_dimensions['D'].width = 20
write_ws.column_dimensions['E'].width = 20
write_ws['A1'] = '브랜드'
write_ws['B1'] = '상품명'
write_ws['C1'] = '가격'
write_ws['D1'] = '리뷰 개수'
write_ws['E1'] = '링크'
sell_count = 2
# 행 단위로 추가
for z in data_box:
write_ws[f'A{sell_count}'].value = z[0]
write_ws[f'B{sell_count}'].value = z[1]
write_ws[f'C{sell_count}'].value = z[2]
write_ws[f'D{sell_count}'].value = z[3]
# 하이퍼링크 추가
write_ws[f'E{sell_count}'].hyperlink = z[4]
write_ws[f'E{sell_count}'].value = z[4]
write_ws[f'E{sell_count}'].style = "Hyperlink"
sell_count += 1
write_wb.save(fr"무신사 상품 리스트.xlsx")
write_wb.close()
openpyxl에서 행과 열에 데이터를 넣는 과정은 어렵지 않기 때문에 특별하게 설명할 기능들은 없는 것 같습니다. openpyxl 자체적으로 엑셀 대부분의 기능을 사용할 수 있고 하이퍼링크를 추가하는 것 또한 간단한 코드 몇 줄로 작업이 가능합니다.
코드의 끝에 도달하면 디렉토리에 무신사 상품 리스트.xlsx 파일이 저장됩니다.
requests, BeautifulSoup을 활용해 데이터를 가공한 브랜드, 상품명, 가격, 리뷰 개수, url 등 문제없이 엑셀 파일에 저장된 것을 볼 수 있습니다. (중간에 브랜드 명 주말특가 옥에 티 하나 발견!!)
반응형
'파이썬 프로그래밍' 카테고리의 다른 글
파이썬 셀레니움 Selenium 파일 첨부 업로드 (0) | 2022.11.27 |
---|---|
파이썬 셀레니움 selenium 모바일 버전 브라우저 접속 (2) | 2022.11.27 |
파이썬 매크로 pyautogui 키보드 마우스 자동 제어 기능 (0) | 2022.10.02 |
파이썬 카카오톡 챗봇 만들기 flask 서버 및 api 사용하기 (0) | 2022.10.02 |
파이썬 Django 로컬 서버 외부 접속 및 배포하기 (ngrok) (0) | 2022.10.02 |