본문 바로가기
코드리뷰/chatGPT(Python)코드

클릭 한 번으로 쿠팡에서 잘 팔리는 노트북 TOP 10 리스트 저장하기

by 디마드 2024. 10. 4.

파이썬 tkinter를 이용한 UI 만들기 세 번째 영상입니다. 쿠팡 크롤러가 수집한 인기상품 TOP 10 리스트를 내 PC에 저장하는 방법을 알려 드립니다. 초보자도 쉽게 이해할 수 있도록 코드별 자세하게 설명합니다. 

온라인 상품 판매나 제휴 마케팅을 위해 판매 데이터 구축이 필요한 분들이라면 꼭 시청하시면 좋겠네요. 나만의 크롤러를 만들어 판매 데이터를 구축해 보아요.

https://youtu.be/7IAo-q-poyA

 

- YouTube

 

www.youtube.com

 

추가/개선한 소스코드입니다.  

1. 쿠팡 크롤링 시 상품 가격 가져오는 로직을 수정함  - sale가격을 먼저 찾고 없으면 기본 가격을 찾게함, 기본가격 자체가 없는 경우 에러가 발생하여 순서를 수정하고 예외처리함. 

2. 검색 키워드 입력 후 키보드 엔터 처리를 추가함. 마우스 클리과 같은 효과임. 각 위젯의 config에서 command는 클릭 처리를 위한 것이고 bind는 이를 포함해 더 많은 기능을 처리할 수 있다. 예를 들면 키보드 엔터, 마우스 오른쪽 버튼 등...

3. 파일명 자동 생성 로직과 검색 결과 파일 저장하는 코드 

import tkinter as tk
from selenium import webdriver
from selenium.webdriver.common.by import By
import tkinter.messagebox as msg
from datetime import datetime

win = tk.Tk()
win.geometry("600x550")
win.option_add("*font","맑은고딕 15")
win.title("테스트 window")

lblKeyword = tk.Label(win,text="Keyword")
lblKeyword.pack()
# 검색어 입력
def on_enter_key(event):
    btnSearch.invoke()
entKeyword = tk.Entry(win,width=20)
entKeyword.pack()
entKeyword.focus() 
entKeyword.bind("<Return>",on_enter_key)

# 상품 검색
def btn_search_click() :
    lb.delete(0,tk.END)
    keyword = entKeyword.get()
    drvier = webdriver.Chrome()
    drvier.get (f"https://www.coupang.com/np/search?q={keyword}")

    drvier.implicitly_wait(5)

    results = drvier.find_elements(By.CLASS_NAME, "descriptions-inner")
    for rank, r in enumerate(results,1) :
        if rank > 10 : 
            break
        try :
            name = r.find_element(By.CLASS_NAME, "name")
            print(f"*** {name.text} ")
            price = r.find_element(By.CLASS_NAME, "price")
            
            sale_price = price.find_element(By.CLASS_NAME, "sale")
            if sale_price :
                last_price = sale_price.find_element(By.CLASS_NAME,"price-value")
                print(f"{rank}위 {name.text} {last_price.text}")
                lb.insert(tk.END, f"{rank}위 {name.text} {last_price.text}원")
            else :
                base_price = price.find_element(By.CLASS_NAME,"price-info")
                print(f"{rank}위 {name.text}  {base_price.text} ")
                lb.insert(tk.END, f"{rank}위 {name.text} {base_price.text}원")
        except :
            print(f"skip")
    drvier.quit()
    
# 검색 버튼    
btnSearch = tk.Button(win, text="쿠팡검색")
btnSearch.config(command=btn_search_click)
btnSearch.pack()

# 검색 결과 출력
lb = tk.Listbox(win,width=50,height=20)
lb.pack()

# 파일 저장
def btn_save_click() :
    now = datetime.now()
    file_name = entKeyword.get() + "_" + now.strftime("%y%m%d_%H%M")
    with open(f"data/{file_name}.txt","w",encoding="utf-8") as f:
        for info in lb.get(0,tk.END):
            f.write(info + "\n")
    msg.showinfo("저장","파일 저장 완료")
btnSave = tk.Button(win,text="저장")
btnSave.config(command=btn_save_click)
btnSave.pack()

win.mainloop()
반응형

댓글