크롤링한 데이터(정책) > 엑셀 > 데이터베이스 > 스프링 > 프론트에 띄우기 ==> 일단 이렇게 생각하고 작업 중이다.

데이터 양이 많아서 스프링 애플리케이션 내에서 메모리에 모두 유지하는 것보다는

데이터베이스에 저장하여 관리하는 것이 좋을 것 같아서 저러한 과정을 거치기로 한 것.

 

크롤링한 데이터를 엑셀 파일로 저장하는 과정은 생각보다 어렵지 않았다

1. 먼저 필요한 라이브러리 설치

  • pip install openpyxl 

2. 엑셀파일 만들고 저장

# 엑셀 만들기
import openpyxl

wb = openpyxl.Workbook()

ws = wb.create_sheet('주거정책')

ws['A1'] = 'number'
ws['B1'] = 'name'

ws['A2'] = 1
ws['B2'] = '홍길동'

wb.save(r'C:\Users\tmdgm\Desktop\pyex\주거정책_data.xlsx')

엑셀파일 만들기 > openpyxl.Workbook()

엑셀 워크시트 만들기 > wb.create_sheet('엑셀시트이름')

행, 열에 들어갈 데이터 추가한 후 wb.save('저장할 경로') 로 저장하면 해당 폴더에 엑셀 시트가 만들어지는 것을 볼 수 있다.

 

이 코드를 데이터 크롤링하는 코드와 합쳐보면

# 가져온 데이터 엑셀파일로 저장
import requests
from bs4 import BeautifulSoup
import openpyxl

fpath = r'C:\Users\tmdgm\Desktop\pyex\주거정책_data.xlsx'

wb = openpyxl.load_workbook(fpath)
ws = wb.active # 현재 활성화된 시트 선택 - 기본시트 선택

row = 2
for i in range(1, 5):
  response = requests.get(f'https://youth.incheon.go.kr/youthpolicy/youthPolicyInfoList.do?menudiv=dwelling&pgno={i}')
  html = response.text
  soup = BeautifulSoup(html, 'html.parser')
  titles = soup.select(".boardList .con-box .tit") # 정책 title
  links = soup.select(".boardList .btn-box .btn:first-child") # 정책 url
  
  # for link in links:
  #   url = link.attrs['href']
  #   print(f'https://youth.incheon.go.kr{url}')
    
  for title in titles:
    print(title.text.strip())
    ws[f'B{row}'] = title.text
    row += 1
    
wb.save(fpath)

 

1. 엑셀 파일을 불러와서

openpyxl.load_workbook(엑셀파일저장되어있는경로) 

2. 현재 활성화된 시트를 선택하고

wb.active

3. 크롤링한 데이터들을 행에 알맞게 저장한다.

ws.[f'B{rows}'] = title.text

B행에 쭉 저장되겠죠 ?

4. 저장하면 끝.

wb.save(fpath)

 

+ Recent posts