Notice
Recent Posts
Recent Comments
Link
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
Archives
Today
Total
관리 메뉴

잡동사니 블로그

[Python] 심심해서 만든 무신사 추천상품 크롤링 본문

Python

[Python] 심심해서 만든 무신사 추천상품 크롤링

코딩부대찌개 2023. 11. 20. 16:41

대충 추천상품에서 가격 상품명을 가져와야 한다고함.

 

백엔드 친구놈이 DB 연습 한다고 무신사 상품 정보를 일일히 가져오고 있길래 하나 만듬.

대충 라이브러리 설치법은

https://eupppo.tistory.com/entry/Selenium%EA%B3%BC-bs4%EB%A5%BC-%EC%9D%B4%EC%9A%A9%ED%95%9C-%ED%81%AC%EB%A1%A4%EB%A7%81

 

[Python] Selenium과 bs4를 이용한 크롤링 + Pyautogui

크롤링 기본 구조 1. Selenium을 사용하여 소스코드로 지정된 WebDriver를 실행하여 웹 페이지에 접속한다. 2. 접속한 웹 페이지를 HTML 소스코드 형태로 파싱한다. 3. 파싱된 HTML 전체 코드에서 Beautiful S

eupppo.tistory.com

 

import pandas as pd
from bs4 import BeautifulSoup
from selenium import webdriver
import time
import random
driver = webdriver.Chrome()
ans=[]
#아우터, 상의, 하의, 신발, 가방
url = ['https://www.musinsa.com/categories/item/001',
       'https://www.musinsa.com/categories/item/002',
       'https://www.musinsa.com/categories/item/003',
       'https://www.musinsa.com/categories/item/004',
       'https://www.musinsa.com/categories/item/005']
for tag_url in url:
    driver.get(tag_url)
    tag_num = tag_url[-1]
    print('시작 : ',tag_num)
    time.sleep(2)
    driver.maximize_window()
    
    #각 상품 링크 추출
    html_1 = driver.page_source 
    soup_1 = BeautifulSoup(html_1, 'html.parser')
    elements=soup_1.find_all('a', attrs={'class':'img-block'})
    href=[]
    
    #추천 상품만
    for element in elements:
        p_link = element.get('href') 
        if 'www.musinsa.com/app/goods' in p_link and 'goods_rank' not in p_link:
            href.append(p_link)
        else :
            continue
    total=[]
    for link in range(len(href)) :
        time.sleep(1)
        driver.get('https:'+href[link])
        #과부하 막기를 위한 랜덤
        time.sleep(random.random())
        #상품명
        title=driver.execute_script('return document.querySelector("#page_product_detail > div.right_area.page_detail_product > div.right_contents.section_product_summary > span > em").innerText;')
        #품번
        num = driver.execute_script('return document.querySelector("#product_order_info > div.explan_product.product_info_section > ul > li:nth-child(1) > p.product_article_contents").innerText;')
        #가격
        price = int(driver.execute_script('return document.querySelector("#goods_price").innerText;')[:-1].replace(",", ""))
        #img 링크
        img_src = 'https:'+driver.execute_script('return document.querySelector("#bigimg").getAttribute("src");')
        #db key, tag, 품번, 상품명, 이미지링크, 가격
        total.append((link,int(tag_num),num.split(' / ')[1], title, img_src, price))
    ans.append(total)

결과

일단 코드상으론 한페이지만 추출함. 

구조는 각 페이지에 연결되는 링크를 리스트에 저장하여 그 리스트를 다시 반복하는 형식.

driver.execute_script << 잘 이용하면 쉬운 크롤링정도는 누구든지 금방할듯?