[파이썬] openpyxl / 파일 업로드, 다운로드

2022. 12. 16. 17:43자격증(다다익선)/파이썬

728x90

https://chanytv.tistory.com/137

 

[파이썬] 변수&기본연산 / 리스트,딕셔너리 / 함수 / 조건문 / 반복문

[파이썬] 변수&기본연산 / 리스트,딕셔너리 / 함수 / 조건문 / 반복문 파이썬 기초를 시작하면서.... 크롤링 한 번 해보자고 시작한 파이썬 공부다. 모든 공부는 기초가 중요한 법!! 이 번 공부로 파

chanytv.tistory.com

https://chanytv.tistory.com/138

 

[파이썬] 스크래핑(크롤링)

https://chanytv.tistory.com/137 [파이썬] 변수&기본연산 / 리스트,딕셔너리 / 함수 / 조건문 / 반복문 [파이썬] 변수&기본연산 / 리스트,딕셔너리 / 함수 / 조건문 / 반복문 파이썬 기초를 시작하면서.... 크

chanytv.tistory.com

 

[파이썬] openpyxl / 파일 업로드, 다운로드


openpyxl - 데이터를 엑셀로 정리하기 -

값을 엑셀로 정리하기 위해선 역시나 환경 구성을 해줘야 한다.

pip install openpyxl

환경 구성이 끝났다면 아래 코드로 테스를 하여 엑셀이 생성 되는지 확인해보면 된다.

from openpyxl import Workbook

wb= Workbook()
sheet = wb.active

sheet['A1'] = 'DJ차니블로그'

wb.save("테스트입니다.xlsx")
wb.close()

#여러개 입력하는 방법

from openpyxl import Workbook

wb = Workbook()
sheet = wb.active

row = [1,'사과',300]

sheet.append(row)
sheet.append(row)
sheet.append(row)
sheet.append(row)

wb.save("샘플파일.xlsx")
wb.close()

openpyxl부터 workbook을 불러오는 코드 인 것 같다.

workbook은 너무 기니 wb로 줄여주고

sheet를 설정해준 다음

내용이 들어갈 위치를 지정해 준다.

그다음 save할 이름까지 정해주면 테스트 파일을 완성이 된다.

 

불러오는 방법은 이와 반대다.

 

openpyxl을 불러오는 코드를 써준다.

불러올 wb를 지정해준다. 파일에 시트를 지정해준다.

마지막으로 불러올 위치를 지정해주면 된다. 그 코드는 아래와 같다.

import openpyxl
wb = openpyxl.load_workbook('샘플파일.xlsx')
sheet = wb['Sheet']

sheet['A1'].value

#반복문을 통해 전체 데이터를 불러오는 방법

for row in sheet.rows:
  print(row[0].value, row[1].value, row[2].value)

#첫 줄을 빼고 불러오는 방법 -list 활용-

new_rows = list(sheet.rows)[1:]

for row in new_rows:
  print(row[0].value, row[1].value, row[2].value)

# if함수를 활용한 방법

for row in new_rows:
  if row[2].value < 500:
    print(row[0].value, row[1].value, row[2].value)

여러개를 불러와야 한다면 반복문을 사용하여 불러오면 된다. 변수를 줘야한다면 if함수를 사용하면 된다.

엑셀을 불러오는 일이 많을 것 같은데 첫 줄을 빼는 '[1:]'는 암기를 해아 할 듯하다.

 

엑셀로 저장하고 내용을 불러올 수 있는 방법을 배웠으니 이제 스크래핑한 결과를 엑셀로 만드는 방법은 간단하다.

import requests
from bs4 import BeautifulSoup

from openpyxl import Workbook

wb = Workbook()
sheet = wb.active

headers = {'User-Agent' : 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36'}
data = requests.get(f'https://search.naver.com/search.naver?where=news&ie=utf8&sm=nws_hty&query=삼성전자',headers=headers)

soup = BeautifulSoup(data.text, 'html.parser')
lis = soup.select('#main_pack > section > div > div.group_news > ul > li')

for li in lis:
  a = li.select_one('a.news_tit')
  row = [a.text, a['href']]
  sheet.append(row)

wb.save("샘플파일.xlsx")
wb.close()

#키워드를 활용한 검색어 지정 및 파일 제목 지정

def make_news_excel(keyword):

  wb.save(f"{keyword}.xlsx")
  wb.close()
  
keywords = ['삼성전자','LG전자','현대자동차','SK']

for keyword in keywords:
  make_news_excel(keyword)

날짜를 추가하는 방법도 있다.

#날짜입력을 위한 환경구성
from datetime import datetime

#오늘 날짜를 불러오는 코드
  today = datetime.today().strftime("%Y-%m-%d")

#제목과 함께 노출 될 수 있도록 배치
  wb.save(f"{today}_{keyword}.xlsx")

저장할 폴더 위치를 지정하는 방법은 파일명 앞에 경로를 지정해주는 거다.

  wb.save(f"news/{today}_{keyword}.xlsx")
  wb.close()

파일을 여러개 다운받을 경우 Colab에서 다중다운을 지원하지 않다보니 압축형태로 받아야 한다.

압축하는 방법은 아래와 같다.

!zip -r /content/files.zip /content/news

#!zip -r /zip파일이 저장될 경로 /압축할 파일 경로

파일명을 일괄로 변경하는 방법이다.

import os

path = '/content/news'
names = os.listdir(path)

for name in names:
  print(name)

#적용

import os

path = '/content/news'
names = os.listdir(path)

for name in names:
  new_file = name.split('.')[0] + '(뉴스).xlsx'
  os.rename(path+'/'+name,path+'/'+new_file)

이미지도 다운가능~

이미지 다운로드를 위한 환경 구성은 아래와 같다.

import urllib.request

url = 'https://ssl.pstatic.net/imgfinance/chart/item/area/year3/005930.png'
urllib.request.urlretrieve(url, "samsung.jpg")

주소를 주의깊게 보면 파일명이 종목코드와 같다. 즉 종목코드만 추출해내면

몇십몇백개도 한 번에 스크래핑이 가능해진다.

강의에서 제공한 관리종목을 불러와서 그래프를 저장한 코드다.

import openpyxl
import urllib.request

wb = openpyxl.load_workbook('관리종목.xlsx')
sheet = wb['종목']

new_rows = list(sheet.rows)[1:]

for row in new_rows:
  url = f'https://ssl.pstatic.net/imgfinance/chart/item/area/year3/{row[1].value}.png'
  urllib.request.urlretrieve(url, f"imgs/{row[0].value}.png")
728x90