멋쟁이사자처럼 13기/TIL 챌린지

멋쟁이사자처럼 후기 + 일은 간편해지고 수익은 성장하는 자동화 스킬 : 파이썬부터 Chat GPT 까지

개발자 지망생 리네 2025. 5. 8. 23:58

📆 DAY31

 

3. 웹크롤링을 활용한 데이터 수집 자동화

(1) 웹크롤링 소개 및 웹크롤링의 원리

- 웹크롤링

- 웹: 인터넷 공간

- 크롤링: 기어가는 것

- 웹크롤링: 웹페이지에서 데이터를 추출하는 행위

- 멜론 차트 가져오기

import urllib.request as req
from bs4 import BeautifulSoup
import os
import openpyxl
import datetime
from openpyxl.drawing.image import Image

# 기존 엑셀파일 삭제
if os.path.exists("./멜론_크롤링.xlsx"):
    os.remove("./멜론_크롤링.xlsx")

# 이미지 저장할 폴더 생성
if not os.path.exists("./멜론이미지"):
    os.mkdir("./멜론이미지")

header = req.Request("https://www.melon.com/chart/index.htm", headers={"User-Agent":"Mozilla/5.0"})
code = req.urlopen(header)
soup = BeautifulSoup(code, "html.parser")
title = soup.select("div.ellipsis.rank01 > span > a")
name = soup.select("div.ellipsis.rank02 > span")
album = soup.select("div.ellipsis.rank03 > a")
img = soup.select("a.image_typeAll > img")

# 엑셀 파일 생성
if not os.path.exists("./멜론_크롤링.xlsx"):
    openpyxl.Workbook().save("./멜론_크롤링.xlsx")

# 엑셀 파일 불러오기
book = openpyxl.load_workbook("./멜론_크롤링.xlsx")
# 쓸데 없는 시트 지우기
if "Sheet" in book.sheetnames:
    book.remove(book["Sheet"])
sheet = book.create_sheet()
now = datetime.datetime.now()
sheet.title = f"{now.year}년 {now.month}월 {now.day}일 {now.hour}시 {now.minute}분 {now.second}초"
# 열 너비 조절
sheet.column_dimensions["A"].width = 15
sheet.column_dimensions["B"].width = 50
sheet.column_dimensions["C"].width = 30
sheet.column_dimensions["D"].width = 50

for i in range(len(title)):
    img_file_name = f"./멜론이미지/{i+1}.png"
    req.urlretrieve(img[i].attrs["src"], img_file_name)
    print(f"{i+1}위. {title[i].text} - {name[i].text}")
    img_for_excel = Image(img_file_name)
    sheet.add_image(img_for_excel, f"A{i+1}")
    sheet.cell(row=i + 1, column=2).value = title[i].text
    sheet.cell(row=i + 1, column=3).value = name[i].text
    sheet.cell(row=i + 1, column=4).value = album[i].text
    sheet.row_dimensions[i+1].height = 90
    book.save("./멜론_크롤링.xlsx")

 

- 인터넷 선을 따라서 서버 컴퓨터에 요청을 보냄

 

- CGV 크롤링

import requests
from bs4 import BeautifulSoup

# 서버로부터 HTML 코드 가져오기
code = requests.get("http://www.cgv.co.kr/movies/?Lt=1&ft=0")

#HTML 코드 예쁘게 정리하기
soup = BeautifulSoup(code.text, features="html.parser")
print(soup)

 

 

더 알고 싶은 점

위 코드에서 실제로 엑셀 파일을 생성하는 부분이 어디인지

# 엑셀 파일 생성
if not os.path.exists("./멜론_크롤링.xlsx"):
    openpyxl.Workbook().save("./멜론_크롤링.xlsx")

 

위 코드가 실제로 동작하는 원리

- 엑셀 파일 생성

-> 멜론에 요청을 보냄

-> 시트의 스타일 지정

-> 곡을 전부 가져와 곡의 길이 만큼 데이터를 저장하는 로직을 반복

 

 

느낀 점

이제 파이썬 기초 문법에서 벗어나, 가장 궁금했던 부분인 웹크롤링에 대해 배우게 되었다. 이전에 FLO 클론 코딩을 하면서 저 음원 차트들을 가져오는 방법이 궁금했었는데, 실제 현재 음원 차트들이 내 프로그램으로 가져와지고, 엑셀 파일까지 생성되는 게 굉장히 신기했다. 저 코드들 중에서 어떤 코드가 엑셀 파일을 생성하는 것인지도 궁금해졌다. 지금은 단순히 코드를 분석하는 것에서 그치지만, 언젠가는 저 코드들을 예제를 받지 않고도 스스로 작성할 수 있으면 좋겠다.