diff --git a/moodico/products/utils/scraper.py b/moodico/products/utils/scraper.py new file mode 100644 index 0000000..b086ada --- /dev/null +++ b/moodico/products/utils/scraper.py @@ -0,0 +1,88 @@ +# utils/scraper.py +from selenium.webdriver.common.by import By +from selenium.webdriver.support import expected_conditions as EC +from selenium.webdriver.support.ui import WebDriverWait +from selenium import webdriver +from selenium.webdriver.chrome.service import Service +from webdriver_manager.chrome import ChromeDriverManager +import sys + +def _build_chrome_driver(): + # Chrome config + options = webdriver.ChromeOptions() + options.add_argument("--headless=new") + options.add_argument("--no-sandbox") + options.add_argument("--disable-dev-shm-usage") + options.add_argument("--disable-gpu") + options.add_argument( + "user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 " + "(KHTML, like Gecko) Chrome/117.0.0.0 Safari/537.36" + ) + + # Linux (Ubuntu) 배포 서버 + if sys.platform.startswith("linux"): + options.binary_location = "/usr/bin/chromium-browser" + service = Service("/usr/bin/chromedriver") + + return webdriver.Chrome(service=service, options=options) + + # macOS/Windows or fallback -> use webdriver_manager + return webdriver.Chrome(service=Service(ChromeDriverManager().install()), options=options) + +def scrape_oliveyoung_products(max_items=10): + driver = _build_chrome_driver() + products = [] + + try: + # Target + url = ( + "https://www.oliveyoung.co.kr/store/main/getBestList.do" + "?dispCatNo=900000100100001&fltDispCatNo=10000010002&pageIdx=1&rowsPerPage=10" + ) + driver.get(url) + + wait = WebDriverWait(driver, 5) # 5초 기다리기 (아이템들 있는지 체크하는 동안) + wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, "ul.cate_prd_list"))) + items = driver.find_elements(By.CSS_SELECTOR, "ul.cate_prd_list li") #all
해당 카테고리의 추천 제품이 없어요
+{% if recommended_product.is_user_liked %} 💖 내가 찜한 제품 | {{ - recommended_product.product_brand }} {% else %} {{ - recommended_product.product_brand }} 💜 | {{ - recommended_product.like_count }}명이 찜함 {% endif %} + recommended_product.product_brand }} + {% else %} + {{recommended_product.product_brand }} 💜 | + {{recommended_product.like_count }}명이 찜함 + {% endif %}
@@ -296,11 +298,7 @@